Sources Bugzilla – Bug 762
error: redefinition of 'struct ia64_fpreg'
Last modified: 2013-01-09 19:55:45 UTC
Starting Nov 2003, glibc provides own definition of ia64_fpreg structure in the header file 'sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h', duplicating same structure definition in the kernel header 'include/asm-ia64/fpu.h' Thus GCC compiler reports redefinition of `struct ia64_fpreg' on the following simple case: $ cat test1.c #include <asm/fpu.h> #include <signal.h> $ gcc -c -O0 -g test1.c In file included from /usr/include/signal.h:326, from test1.c:2: /usr/include/bits/sigcontext.h:30: error: redefinition of `struct ia64_fpreg' Older version of bits/sigcontext.h imports ia64_fpreg structure definition from asm/fpu.h, avoiding the conflict. Search over the documentation gave nothing about restricted use of this pair of header files, so it seems to be a bug.
<asm/fpu.h> isn't supposed to be used by any user space program. Which program uses this?
Userland programs should not include kernel headers, only the glibc ones. No glibc header includes <asm/fpu.h>.
Sorry to reopen this, but I think this is the most relevant place to discuss this problem, lest a new bug be marked as a duplicate. The audit package: http://people.redhat.com/sgrubb/audit/ This was discovered during the packaging of audit for Gentoo, as noted in the linked bug (gentoo bug 439188). Audit requires both the kernel audit headers, as well as signal.h, this leads it to bring in both definitions of ia64_fpreg, and fail to compile. audit-2.2.2/src/auditd.c:#include <signal.h> audit-2.2.2/src/auditd.c:#include "libaudit.h" audit-2.2.2/lib/libaudit.h:#include <linux/audit.h> /usr/include/linux/audit.h: #include <linux/ptrace.h> /usr/include/linux/ptrace.h:#include <asm/ptrace.h> /usr/include/asm/ptrace.h:#include <asm/fpu.h> /usr/include/asm/fpu.h:struct ia64_fpreg { /usr/include/signal.h:# include <bits/sigcontext.h> /usr/include/bits/sigcontext.h:struct ia64_fpreg Can we please get this refactored to only have a single ia64_fpreg definition, or have it protected by a common #ifdef, so that only one definition exists.
What is <linux/autodit.h> needing <linux/ptrace.h> for?
(In reply to comment #4) good question. i don't see a point to it. sent a patch to lkml to drop it. that said, asm/ptrace.h includes asm/fpu.h on ia64.
akpm has picked up my patch so it should be in linux 3.8 or 3.9, so that fixes the linux/audit.h issue the ia64 ptrace.h suckage still exists