Avoid using the incomplete type "struct siginfo"; use siginfo_t instead. Basically this is a replacement 's/struct siginfo/siginfo_t/g' on the whole gcc source tree. It avoids error messages like this one: gcc-3.4.6/gcc/unwind-dw2.c: In function `uw_frame_state_for': gcc-3.4.6/gcc/unwind-dw2.c:1031: error: field `info' has incomplete type Based on the essence of https://bugs.gentoo.org/show_bug.cgi?id=424970#c3 2012-12-29 Martin von Gagern Index: gcc-3.4.6/gcc/config/alpha/linux.h =================================================================== --- gcc-3.4.6.orig/gcc/config/alpha/linux.h +++ gcc-3.4.6/gcc/config/alpha/linux.h @@ -95,7 +95,7 @@ Boston, MA 02111-1307, USA. */ else if (pc_[1] == 0x201f015f) /* lda $0,NR_rt_sigreturn */ \ { \ struct rt_sigframe { \ - struct siginfo info; \ + siginfo_t info; \ struct ucontext uc; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = &rt_->uc.uc_mcontext; \ Index: gcc-3.4.6/gcc/config/i386/linux.h =================================================================== --- gcc-3.4.6.orig/gcc/config/i386/linux.h +++ gcc-3.4.6/gcc/config/i386/linux.h @@ -235,9 +235,9 @@ Boston, MA 02111-1307, USA. */ { \ struct rt_sigframe { \ int sig; \ - struct siginfo *pinfo; \ + siginfo_t *pinfo; \ void *puc; \ - struct siginfo info; \ + siginfo_t info; \ struct ucontext uc; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; \ Index: gcc-3.4.6/gcc/config/i386/linux64.h =================================================================== --- gcc-3.4.6.orig/gcc/config/i386/linux64.h +++ gcc-3.4.6/gcc/config/i386/linux64.h @@ -164,9 +164,9 @@ Boston, MA 02111-1307, USA. */ { \ struct rt_sigframe { \ int sig; \ - struct siginfo *pinfo; \ + siginfo_t *pinfo; \ void *puc; \ - struct siginfo info; \ + siginfo_t info; \ struct ucontext uc; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; \ Index: gcc-3.4.6/gcc/config/ia64/linux.h =================================================================== --- gcc-3.4.6.orig/gcc/config/ia64/linux.h +++ gcc-3.4.6/gcc/config/ia64/linux.h @@ -86,7 +86,7 @@ do { \ struct sigframe { \ char scratch[16]; \ unsigned long sig_number; \ - struct siginfo *info; \ + siginfo_t *info; \ struct sigcontext *sc; \ } *frame_ = (struct sigframe *)(CONTEXT)->psp; \ struct sigcontext *sc_ = frame_->sc; \ @@ -159,7 +159,7 @@ do { \ struct sigframe { \ char scratch[16]; \ unsigned long sig_number; \ - struct siginfo *info; \ + siginfo_t *info; \ struct sigcontext *sc; \ } *frame_ = (struct sigframe *)(CONTEXT)->psp; \ struct sigcontext *sc_ = frame_->sc; \ Index: gcc-3.4.6/gcc/config/mips/linux.h =================================================================== --- gcc-3.4.6.orig/gcc/config/mips/linux.h +++ gcc-3.4.6/gcc/config/mips/linux.h @@ -233,7 +233,7 @@ typedef struct _sig_ucontext { { \ struct rt_sigframe { \ u_int32_t trampoline[2]; \ - struct siginfo info; \ + siginfo_t info; \ _sig_ucontext_t uc; \ } *rt_ = (CONTEXT)->ra; \ sc_ = &rt_->uc.uc_mcontext; \ Index: gcc-3.4.6/gcc/config/sh/linux.h =================================================================== --- gcc-3.4.6.orig/gcc/config/sh/linux.h +++ gcc-3.4.6/gcc/config/sh/linux.h @@ -250,7 +250,7 @@ do { \ && (*(unsigned short *) (pc_+14) == 0x00ad)))) \ { \ struct rt_sigframe { \ - struct siginfo info; \ + siginfo_t info; \ struct ucontext uc; \ } *rt_ = (CONTEXT)->cfa; \ sc_ = (struct sigcontext *) &rt_->uc.uc_mcontext; \