1
0
mirror of https://github.com/golang/go synced 2024-11-22 06:24:38 -07:00

Get the right sigaction struct for the 386 rt_sigaction system

call.  This uses the header files from a 32-bit Ubuntu Hardy
system.

The use of _LOOSE_KERNEL_NAMES seems right.  The
-D__ARCH_SI_UID_T works around a bug which appears to be fixed
in later Linux versions.

R=rsc
http://go/go-review/1013015
This commit is contained in:
Ian Lance Taylor 2009-10-26 22:49:08 -07:00
parent 1228112b50
commit f529224039
3 changed files with 20 additions and 9 deletions

View File

@ -1,4 +1,4 @@
// godefs -f -m32 -f -I/home/rsc/pub/linux-2.6/arch/x86/include -f -I/home/rsc/pub/linux-2.6/include defs2.c
// godefs -f -m32 -f -D_LOOSE_KERNEL_NAMES -f -D__ARCH_SI_UID_T=__kernel_uid32_t defs2.c
// MACHINE GENERATED - DO NOT EDIT.
@ -54,8 +54,7 @@ struct Fpstate {
uint32 reserved;
Fpxreg _fxsr_st[8];
Xmmreg _xmm[8];
uint32 padding1[44];
byte _anon_[48];
uint32 padding[56];
};
typedef struct Timespec Timespec;
@ -72,10 +71,10 @@ struct Timeval {
typedef struct Sigaction Sigaction;
struct Sigaction {
byte _u[4];
uint32 sa_mask;
void *k_sa_handler;
uint32 sa_flags;
void *sa_restorer;
uint32 sa_mask;
};
typedef struct Siginfo Siginfo;

View File

@ -88,9 +88,9 @@ initsig(void)
for(i = 0; i<NSIG; i++) {
if(sigtab[i].flags) {
if(sigtab[i].flags & SigCatch)
*(void**)sa._u = (void*)sigtramp; // handler
sa.k_sa_handler = (void*)sigtramp;
else
*(void**)sa._u = (void*)sigignore; // handler
sa.k_sa_handler = (void*)sigignore;
if(sigtab[i].flags & SigRestart)
sa.sa_flags |= SA_RESTART;
else

View File

@ -13,8 +13,9 @@
#include <asm/signal.h>
#include <asm/mman.h>
#include <asm/sigframe.h>
#include <asm/sigcontext.h>
#include <asm/ucontext.h>
#include <asm/siginfo.h>
/*
#include <sys/signal.h>
@ -22,6 +23,17 @@
#include <ucontext.h>
*/
/* This is the sigaction structure from the Linux 2.1.68 kernel which
is used with the rt_sigaction system call. For 386 this is not
defined in any public header file. */
struct kernel_sigaction {
__sighandler_t k_sa_handler;
unsigned long sa_flags;
void (*sa_restorer) (void);
sigset_t sa_mask;
};
enum {
$PROT_NONE = PROT_NONE,
$PROT_READ = PROT_READ,
@ -43,7 +55,7 @@ typedef struct _xmmreg $Xmmreg;
typedef struct _fpstate $Fpstate;
typedef struct timespec $Timespec;
typedef struct timeval $Timeval;
typedef struct sigaction $Sigaction;
typedef struct kernel_sigaction $Sigaction;
typedef siginfo_t $Siginfo;
typedef struct sigaltstack $Sigaltstack;
typedef struct sigcontext $Sigcontext;