diff options
author | Alan Modra <amodra@bigpond.net.au> | 2004-09-02 12:46:27 +0000 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2004-09-02 22:16:27 +0930 |
commit | d86c1b91730b2710a4042ee6972c513f939015a6 (patch) | |
tree | 71ae8c323da1ab022aa9baee198aab5e130d072e | |
parent | 3806400dd9ee2c9dc5c8e10f6d3c57413f0360e5 (diff) | |
download | gcc-d86c1b91730b2710a4042ee6972c513f939015a6.zip gcc-d86c1b91730b2710a4042ee6972c513f939015a6.tar.gz gcc-d86c1b91730b2710a4042ee6972c513f939015a6.tar.bz2 |
linux64.h: Don't include signal.h or sys/ucontext.h.
* config/rs6000/linux64.h: Don't include signal.h or sys/ucontext.h.
(struct kernel_old_ucontext): Delete.
(struct gcc_pt_regs, gcc_sigcontext, gcc_ucontext): New.
(MD_FALLBACK_FRAME_STATE_FOR): Use gcc_* structs. Only define
when IN_LIGGCC2.
From-SVN: r86962
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/rs6000/linux64.h | 80 |
2 files changed, 53 insertions, 35 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2081c5d..5137c8c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-09-02 Alan Modra <amodra@bigpond.net.au> + + * config/rs6000/linux64.h: Don't include signal.h or sys/ucontext.h. + (struct kernel_old_ucontext): Delete. + (struct gcc_pt_regs, gcc_sigcontext, gcc_ucontext): New. + (MD_FALLBACK_FRAME_STATE_FOR): Use gcc_* structs. Only define + when IN_LIGGCC2. + 2004-09-02 Richard Sandiford <rsandifo@redhat.com> * toplev.c (process_options): Fix typo. diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index f87f10e..e7b57d4 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -557,36 +557,44 @@ while (0) #define USE_LD_AS_NEEDED 1 #endif -/* Do code reading to identify a signal frame, and set the frame - state data appropriately. See unwind-dw2.c for the structs. */ - #ifdef IN_LIBGCC2 -#include <signal.h> -#ifdef __powerpc64__ -#include <sys/ucontext.h> - -enum { SIGNAL_FRAMESIZE = 128 }; -#else - -/* During the 2.5 kernel series the kernel ucontext was changed, but - the new layout is compatible with the old one, so we just define - and use the old one here for simplicity and compatibility. */ +/* This file defines our own versions of various kernel and user + structs, so that system headers are not needed, which otherwise + can make bootstrapping a new toolchain difficult. Do not use + these structs elsewhere; Many fields are missing, particularly + from the end of the structures. */ + +struct gcc_pt_regs +{ + unsigned long gpr[32]; + unsigned long nip; + unsigned long msr; + unsigned long orig_gpr3; + unsigned long ctr; + unsigned long link; +}; -struct kernel_old_ucontext { - unsigned long uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - struct sigcontext_struct uc_mcontext; - sigset_t uc_sigmask; +struct gcc_sigcontext +{ + unsigned long pad[7]; + struct gcc_pt_regs *regs; }; -enum { SIGNAL_FRAMESIZE = 64 }; -#endif +struct gcc_ucontext +{ +#ifdef __powerpc64__ + unsigned long pad[21]; +#else + unsigned long pad[5]; #endif + struct gcc_sigcontext uc_mcontext; +}; #ifdef __powerpc64__ +enum { SIGNAL_FRAMESIZE = 128 }; + /* If the current unwind info (FS) does not contain explicit info saving R2, then we have to do a minor amount of code reading to figure out if it was saved. The big problem here is that the @@ -605,10 +613,13 @@ enum { SIGNAL_FRAMESIZE = 64 }; } \ } while (0) +/* Do code reading to identify a signal frame, and set the frame + state data appropriately. See unwind-dw2.c for the structs. */ + #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ do { \ unsigned char *pc_ = (CONTEXT)->ra; \ - struct sigcontext *sc_; \ + struct gcc_sigcontext *sc_; \ long new_cfa_; \ int i_; \ \ @@ -621,7 +632,7 @@ enum { SIGNAL_FRAMESIZE = 64 }; { \ struct sigframe { \ char gap[SIGNAL_FRAMESIZE]; \ - struct sigcontext sigctx; \ + struct gcc_sigcontext sigctx; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = &rt_->sigctx; \ } \ @@ -629,8 +640,8 @@ enum { SIGNAL_FRAMESIZE = 64 }; { \ struct rt_sigframe { \ int tramp[6]; \ - struct siginfo *pinfo; \ - struct ucontext *puc; \ + void *pinfo; \ + struct gcc_ucontext *puc; \ } *rt_ = (struct rt_sigframe *) pc_; \ sc_ = &rt_->puc->uc_mcontext; \ } \ @@ -661,12 +672,14 @@ enum { SIGNAL_FRAMESIZE = 64 }; goto SUCCESS; \ } while (0) -#else +#else /* !__powerpc64__ */ + +enum { SIGNAL_FRAMESIZE = 64 }; #define MD_FALLBACK_FRAME_STATE_FOR(CONTEXT, FS, SUCCESS) \ do { \ unsigned char *pc_ = (CONTEXT)->ra; \ - struct sigcontext *sc_; \ + struct gcc_sigcontext *sc_; \ long new_cfa_; \ int i_; \ \ @@ -681,7 +694,7 @@ enum { SIGNAL_FRAMESIZE = 64 }; { \ struct sigframe { \ char gap[SIGNAL_FRAMESIZE]; \ - struct sigcontext sigctx; \ + struct gcc_sigcontext sigctx; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = &rt_->sigctx; \ } \ @@ -689,12 +702,9 @@ enum { SIGNAL_FRAMESIZE = 64 }; || *(unsigned int *) (pc_+0) == 0x380000AC) \ { \ struct rt_sigframe { \ - char gap[SIGNAL_FRAMESIZE]; \ - unsigned long _unused[2]; \ - struct siginfo *pinfo; \ - void *puc; \ - struct siginfo info; \ - struct kernel_old_ucontext uc; \ + char gap[SIGNAL_FRAMESIZE + 16]; \ + char siginfo[128]; \ + struct gcc_ucontext uc; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = &rt_->uc.uc_mcontext; \ } \ @@ -726,6 +736,6 @@ enum { SIGNAL_FRAMESIZE = 64 }; } while (0) #endif - +#endif /* LIBGCC2 */ #define OS_MISSING_POWERPC64 !TARGET_64BIT |