Bug 762 - error: redefinition of 'struct ia64_fpreg'
: error: redefinition of 'struct ia64_fpreg'
Status: REOPENED
Product: glibc
Classification: Unclassified
Component: libc
: 2.3.3
: P2 normal
: ---
Assigned To: H.J. Lu
: https://lkml.org/lkml/2012/12/23/118
:
:
:
  Show dependency treegraph
 
Reported: 2005-02-24 15:23 UTC by Grigory Zagorodnev
Modified: 2013-01-09 19:55 UTC (History)
4 users (show)

See Also:
Host: ia64-suse-linux
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Grigory Zagorodnev 2005-02-24 15:23:11 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.
Comment 1 H.J. Lu 2005-03-10 15:22:40 UTC
<asm/fpu.h> isn't supposed to be used by any user space program. Which program
uses this?
Comment 2 Jakub Jelinek 2005-03-15 08:12:27 UTC
Userland programs should not include kernel headers, only the glibc ones.
No glibc header includes <asm/fpu.h>.
Comment 3 Robin Johnson 2012-12-22 01:53:20 UTC
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.
Comment 4 Andreas Schwab 2012-12-22 08:29:10 UTC
What is <linux/autodit.h> needing <linux/ptrace.h> for?
Comment 5 Mike Frysinger 2012-12-24 02:04:15 UTC
(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.
Comment 6 Mike Frysinger 2013-01-09 19:55:45 UTC
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