diff options
| author | Rob Pike <r@golang.org> | 2008-06-21 17:28:37 -0700 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2008-06-21 17:28:37 -0700 |
| commit | 12c2864e4f02d9d5ab452eb70e296fa6c715443b (patch) | |
| tree | 60dc6619a824d8b5a1f43f7e22dba01cd2cebb0d /src/runtime/rt1_amd64_linux.c | |
| parent | aeb43984ec7c86aee220cc56146e0127de4ce2e3 (diff) | |
| download | go-12c2864e4f02d9d5ab452eb70e296fa6c715443b.tar.xz | |
more nearly correct interface code for signals on linux
SVN=124021
Diffstat (limited to 'src/runtime/rt1_amd64_linux.c')
| -rw-r--r-- | src/runtime/rt1_amd64_linux.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/runtime/rt1_amd64_linux.c b/src/runtime/rt1_amd64_linux.c index de6ac7f044..6c8b051dd8 100644 --- a/src/runtime/rt1_amd64_linux.c +++ b/src/runtime/rt1_amd64_linux.c @@ -29,8 +29,9 @@ 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? */ int32 sa_flags; /* see signal options below */ - uint8 sa_mask[2]; /* signal mask to apply. BUG: 2 is a guess */ + void (*sa_restorer) (void); /* unused here; needed to return from trap? */ } sigaction; void @@ -62,12 +63,10 @@ initsig(void) { int32 i; a.u.sa_sigaction = (void*)sigtramp; - a.sa_flags = 1|2|4|0x10000000|0x20000000|0x40000000|0x80000000; - //a.sa_flags |= SA_SIGINFO; - a.sa_flags = ~0; /* BUG: why is this needed? */ + a.sa_flags |= 0x04; /* SA_SIGINFO */ for(i=0; i<sizeof(a.sa_mask); i++) a.sa_mask[i] = 0xFF; - //a.sa_mask[1] = (1 << (11-1)); + for(i = 0; i <NSIG; i++) if(sigtab[i].catch){ sys_rt_sigaction(i, &a, (void*)0, 8); |
