Changeset 10196


Ignore:
Timestamp:
Jul 24, 2008, 11:06:01 AM (11 years ago)
Author:
gb
Message:

Check for NULL program_counter before reading its contents in handle_exception.
(Probably not necessary if IS_MAYBE_INT_TRAP is reasonable and cant' catch
all bogus PC values, but can't hurt.)

is_write_fault: Solaris version same as Linux.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/x86-exceptions.c

    r10094 r10196  
    753753#endif
    754754#endif
    755 #ifdef LINUX
     755#if defined(LINUX) || defined(SOLARIS)
    756756  return (xpGPR(xp,REG_ERR) & 0x2) != 0;
    757757#endif
     
    963963         course that has nothing to do with accessing protected
    964964         memory; of course, most Unices act as if it did.*/
    965       if (*program_counter == INTN_OPCODE) {
    966         program_counter++;
    967         switch (*program_counter) {
    968         case UUO_ALLOC_TRAP:
    969           if (handle_alloc_trap(context, tcr)) {
    970             xpPC(context) += 2; /* we might have GCed. */
    971             return true;
    972           }
    973           break;
    974         case UUO_GC_TRAP:
    975           if (handle_gc_trap(context, tcr)) {
    976             xpPC(context) += 2;
    977             return true;
    978           }
    979           break;
    980          
    981         case UUO_DEBUG_TRAP:
    982           xpPC(context) = (natural) (program_counter+1);
    983           lisp_Debugger(context, info, debug_entry_dbg, false, "Lisp Breakpoint");
    984           return true;
    985 
    986         case UUO_DEBUG_TRAP_WITH_STRING:
    987           xpPC(context) = (natural) (program_counter+1);
     965      if ((program_counter != NULL) &&
     966          (*program_counter == INTN_OPCODE)) {
     967        program_counter++;
     968        switch (*program_counter) {
     969        case UUO_ALLOC_TRAP:
     970          if (handle_alloc_trap(context, tcr)) {
     971            xpPC(context) += 2; /* we might have GCed. */
     972            return true;
     973          }
     974          break;
     975        case UUO_GC_TRAP:
     976          if (handle_gc_trap(context, tcr)) {
     977            xpPC(context) += 2;
     978            return true;
     979          }
     980          break;
     981           
     982        case UUO_DEBUG_TRAP:
     983          xpPC(context) = (natural) (program_counter+1);
     984          lisp_Debugger(context, info, debug_entry_dbg, false, "Lisp Breakpoint");
     985          return true;
     986           
     987        case UUO_DEBUG_TRAP_WITH_STRING:
     988          xpPC(context) = (natural) (program_counter+1);
    988989          {
    989990            char msg[512];
    990 
     991             
    991992            get_lisp_string(xpGPR(context,Iarg_z),msg, sizeof(msg)-1);
    992993            lisp_Debugger(context, info, debug_entry_dbg, false, msg);
    993994          }
    994           return true;
    995          
     995          return true;
     996           
    996997        default:
    997998          return handle_error(tcr, context);
Note: See TracChangeset for help on using the changeset viewer.