]> Cypherpunks repositories - gostls13.git/commitdiff
remove special trap-handling code for array out of bounds -
authorRob Pike <r@golang.org>
Sat, 13 Sep 2008 20:13:36 +0000 (13:13 -0700)
committerRob Pike <r@golang.org>
Sat, 13 Sep 2008 20:13:36 +0000 (13:13 -0700)
compiler doesn't generate them any more

R=ken
OCL=15309
CL=15309

src/runtime/rt1_amd64_darwin.c
src/runtime/rt1_amd64_linux.c

index f6f49ccbcdbd33a8b236e028889e917ec8c8dbc7..f8718aed3b021dd78d6c322db6caeb5993af90a4 100644 (file)
@@ -130,37 +130,6 @@ typedef struct  sigaction {
        int32 sa_flags;                 /* see signal options below */
 } sigaction;
 
-/*
- * For trace traps, disassemble instruction to see if it's INTB of known type.
- */
-int32
-inlinetrap(int32 sig, byte* pc)
-{
-       extern void etext();
-       extern void _rt0_amd64_darwin();
-
-       if(sig != 5)    /* INTB 5 looks like TRAP */
-               return 0;
-       pc -= 2;        // mac steps across INTB
-       if(pc < (byte*)_rt0_amd64_darwin || pc+2 >= (byte*)etext)
-               return 0;
-       if(pc[0] != 0xcd)  /* INTB */
-               return 0;
-       switch(pc[1]) {
-       case 5:
-               prints("\nTRAP: array out of bounds\n");
-               break;
-       case 6:
-               prints("\nTRAP: leaving function with returning a value\n");
-               break;
-       default:
-               prints("\nTRAP: unknown run-time trap ");
-               sys·printint(pc[1]);
-               prints("\n");
-       }
-       return 1;
-}
-
 void
 sighandler(int32 sig, siginfo *info, void *context)
 {
@@ -170,13 +139,11 @@ sighandler(int32 sig, siginfo *info, void *context)
         _STRUCT_MCONTEXT64 *uc_mcontext = get_uc_mcontext(context);
         _STRUCT_X86_THREAD_STATE64 *ss = get___ss(uc_mcontext);
 
-       if(!inlinetrap(sig, (byte *)ss->__rip)) {
-               if(sig < 0 || sig >= NSIG){
-                       prints("Signal ");
-                       sys·printint(sig);
-               }else{
-                       prints(sigtab[sig].name);
-               }
+       if(sig < 0 || sig >= NSIG){
+               prints("Signal ");
+               sys·printint(sig);
+       }else{
+               prints(sigtab[sig].name);
        }
 
        prints("\nFaulting address: 0x");  sys·printpointer(info->si_addr);
index 8c131d29202854ae163f8907c68c1bd9f8e4200c..54b6496d1cba5c32099868e73fea9afc50918b95 100644 (file)
@@ -129,41 +129,11 @@ typedef struct sigaction {
                void (*sa_handler)(int32);
                void (*sa_sigaction)(int32, siginfo *, void *);
        } u;                            /* signal handler */
-       uint8 sa_mask[128];             /* signal mask to apply. 128? are they MORONS? */
+       uint8 sa_mask[128];             /* signal mask to apply. 128? are they KIDDING? */
        int32 sa_flags;                 /* see signal options below */
        void (*sa_restorer) (void);     /* unused here; needed to return from trap? */
 } sigaction;
 
-/*
- * For trace traps, disassemble instruction to see if it's INTB of known type.
- */
-int32
-inlinetrap(int32 sig, byte* pc)
-{
-       extern void etext();
-       extern void _rt0_amd64_linux();
-
-       if(sig != 5 && sig != 11)       /* 5 is for trap, but INTB 5 looks like SEGV */
-               return 0;
-       if(pc < (byte*)_rt0_amd64_linux || pc+2 >= (byte*)etext)
-               return 0;
-       if(pc[0] != 0xcd)  /* INTB */
-               return 0;
-       switch(pc[1]) {
-       case 5:
-               prints("\nTRAP: array out of bounds\n");
-               break;
-       case 6:
-               prints("\nTRAP: leaving function with returning a value\n");
-               break;
-       default:
-               prints("\nTRAP: unknown run-time trap ");
-               sys·printint(pc[1]);
-               prints("\n");
-       }
-       return 1;
-}
-
 void
 sighandler(int32 sig, siginfo* info, void** context)
 {
@@ -172,13 +142,11 @@ sighandler(int32 sig, siginfo* info, void** context)
 
         struct sigcontext *sc = &(((struct ucontext *)context)->uc_mcontext);
 
-       if(!inlinetrap(sig, (byte *)sc->rip)) {
-               if(sig < 0 || sig >= NSIG){
-                       prints("Signal ");
-                       sys·printint(sig);
-               }else{
-                       prints(sigtab[sig].name);
-               }
+       if(sig < 0 || sig >= NSIG){
+               prints("Signal ");
+               sys·printint(sig);
+       }else{
+               prints(sigtab[sig].name);
        }
 
         prints("\nFaulting address: 0x");  sys·printpointer(info->si_addr);