aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2008-09-13 13:13:36 -0700
committerRob Pike <r@golang.org>2008-09-13 13:13:36 -0700
commitc1ad0509ee31822f817c11ca79706ab148ae5aee (patch)
tree4e8dc4cb2c7abc755c637bd91ea0433b56dbc1aa /src/runtime
parentddc7bc5aba8239ae1f83261ce1afb27f0ab0889e (diff)
downloadgo-c1ad0509ee31822f817c11ca79706ab148ae5aee.tar.xz
remove special trap-handling code for array out of bounds -
compiler doesn't generate them any more R=ken OCL=15309 CL=15309
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/rt1_amd64_darwin.c43
-rw-r--r--src/runtime/rt1_amd64_linux.c44
2 files changed, 11 insertions, 76 deletions
diff --git a/src/runtime/rt1_amd64_darwin.c b/src/runtime/rt1_amd64_darwin.c
index f6f49ccbcd..f8718aed3b 100644
--- a/src/runtime/rt1_amd64_darwin.c
+++ b/src/runtime/rt1_amd64_darwin.c
@@ -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);
diff --git a/src/runtime/rt1_amd64_linux.c b/src/runtime/rt1_amd64_linux.c
index 8c131d2920..54b6496d1c 100644
--- a/src/runtime/rt1_amd64_linux.c
+++ b/src/runtime/rt1_amd64_linux.c
@@ -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);