From f529224039b3222c3b2c3904f197328fa223197a Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Mon, 26 Oct 2009 22:49:08 -0700 Subject: [PATCH] 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 --- src/pkg/runtime/linux/386/defs.h | 9 ++++----- src/pkg/runtime/linux/386/signal.c | 4 ++-- src/pkg/runtime/linux/defs2.c | 16 ++++++++++++++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/pkg/runtime/linux/386/defs.h b/src/pkg/runtime/linux/386/defs.h index 112fc7b094..94bc2b5b6f 100755 --- a/src/pkg/runtime/linux/386/defs.h +++ b/src/pkg/runtime/linux/386/defs.h @@ -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; diff --git a/src/pkg/runtime/linux/386/signal.c b/src/pkg/runtime/linux/386/signal.c index 5deb0f9855..54e109f588 100644 --- a/src/pkg/runtime/linux/386/signal.c +++ b/src/pkg/runtime/linux/386/signal.c @@ -88,9 +88,9 @@ initsig(void) for(i = 0; i #include -#include +#include #include +#include /* #include @@ -22,6 +23,17 @@ #include */ +/* 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; -- 2.50.0