* [PATCH] warning: `__attribute_used__' redefined
@ 2004-02-10 6:39 Jeff Chua
2004-02-10 6:53 ` Andrew Morton
0 siblings, 1 reply; 10+ messages in thread
From: Jeff Chua @ 2004-02-10 6:39 UTC (permalink / raw)
To: Linus Torvalds, Andrew Morton; +Cc: Linux Kernel
Linus, Andrew,
Here's a small fix for linux 2.6.3-rc2 to get rid of the annoying warnings
while non-kernel programs ...
/usr/include/linux/compiler-gcc2.h:15: warning: `__attribute_used__' redefined
/usr/include/sys/cdefs.h:170: warning: this is the location of the previous definition
Thanks,
Jeff
--- linux-2.6.2/include/linux/compiler-gcc2.h Wed Feb 4 11:45:02 2004
+++ linux-2.6.3-rc2/include/linux/compiler-gcc2.h Tue Feb 10 14:30:04 2004
@@ -12,6 +12,10 @@
# define __builtin_expect(x, expected_value) (x)
#endif
+#ifdef __attribute_used__
+#undef __attribute_used__
+#endif
+
#define __attribute_used__ __attribute__((__unused__))
/*
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 6:39 [PATCH] warning: `__attribute_used__' redefined Jeff Chua
@ 2004-02-10 6:53 ` Andrew Morton
2004-02-10 13:59 ` Jeff Chua
0 siblings, 1 reply; 10+ messages in thread
From: Andrew Morton @ 2004-02-10 6:53 UTC (permalink / raw)
To: Jeff Chua; +Cc: torvalds, linux-kernel
Jeff Chua <jeffchua@silk.corp.fedex.com> wrote:
>
> Here's a small fix for linux 2.6.3-rc2 to get rid of the annoying warnings
> while non-kernel programs ...
>
> /usr/include/linux/compiler-gcc2.h:15: warning: `__attribute_used__' redefined
> /usr/include/sys/cdefs.h:170: warning: this is the location of the previous definition
It is more likely that we need to extend the __KERNEL__ coverage somewhere.
Can you please do a `gcc -H' of that application and show us the inclusion
route by which it is hitting compiler.h?
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 6:53 ` Andrew Morton
@ 2004-02-10 13:59 ` Jeff Chua
2004-02-10 16:25 ` Andrew Morton
0 siblings, 1 reply; 10+ messages in thread
From: Jeff Chua @ 2004-02-10 13:59 UTC (permalink / raw)
To: Andrew Morton; +Cc: Jeff Chua, torvalds, Linux Kernel
On Mon, 9 Feb 2004, Andrew Morton wrote:
> It is more likely that we need to extend the __KERNEL__ coverage somewhere.
>
> Can you please do a `gcc -H' of that application and show us the inclusion
> route by which it is hitting compiler.h?
Andrew,
Here's the sample "sig.c". Just compile with "cc sig.c"
#include <signal.h> /* signal */
#include <stdio.h> /* printf */
void action(int signum);
int main(int argc, char *argv[])
{
int i;
for(i = 1; i < 31; i++) {
if(i == 9 || i == 19)
continue;
signal(i, action);
}
}
void action(int signum)
{
printf("%d\n", signum);
}
Here's output of "gcc -H sig.c" gcc 2.95.3 glibc 2.2.5 linux 2.6.3-rc2
/usr/include/signal.h
/usr/include/features.h
/usr/include/sys/cdefs.h
/usr/include/gnu/stubs.h
/usr/include/bits/sigset.h
/usr/include/bits/types.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
/usr/include/bits/pthreadtypes.h
/usr/include/bits/sched.h
/usr/include/bits/signum.h
/usr/include/time.h
/usr/include/bits/siginfo.h
/usr/include/bits/wordsize.h
/usr/include/bits/sigaction.h
/usr/include/bits/sigcontext.h
/usr/include/asm/sigcontext.h
/usr/include/linux/compiler.h
/usr/include/linux/compiler-gcc2.h
/usr/include/linux/compiler-gcc.h
In file included from /usr/include/linux/compiler.h:18,
from /usr/include/asm/sigcontext.h:4,
from /usr/include/bits/sigcontext.h:28,
from /usr/include/signal.h:307,
from sig.c:1:
/usr/include/linux/compiler-gcc2.h:21: warning: `__attribute_used__' redefined
/usr/include/sys/cdefs.h:170: warning: this is the location of the previous definition
/usr/include/bits/sigstack.h
/usr/include/bits/sigthread.h
/usr/include/stdio.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
/usr/include/libio.h
/usr/include/_G_config.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
/usr/include/wchar.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
/usr/include/bits/wchar.h
/usr/include/gconv.h
/usr/include/wchar.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
/usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stdarg.h
/usr/include/bits/stdio_lim.h
Thanks,
Jeff
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 13:59 ` Jeff Chua
@ 2004-02-10 16:25 ` Andrew Morton
2004-02-10 16:31 ` Linus Torvalds
0 siblings, 1 reply; 10+ messages in thread
From: Andrew Morton @ 2004-02-10 16:25 UTC (permalink / raw)
To: Jeff Chua; +Cc: jeffchua, torvalds, linux-kernel
Jeff Chua <jchua@fedex.com> wrote:
>
> ...
> Here's output of "gcc -H sig.c" gcc 2.95.3 glibc 2.2.5 linux 2.6.3-rc2
>
>
> /usr/include/signal.h
> /usr/include/features.h
> /usr/include/sys/cdefs.h
> /usr/include/gnu/stubs.h
> /usr/include/bits/sigset.h
> /usr/include/bits/types.h
> /usr/lib/gcc-lib/i586-pc-linux-gnu/2.95.3/include/stddef.h
> /usr/include/bits/pthreadtypes.h
> /usr/include/bits/sched.h
> /usr/include/bits/signum.h
> /usr/include/time.h
> /usr/include/bits/siginfo.h
> /usr/include/bits/wordsize.h
> /usr/include/bits/sigaction.h
> /usr/include/bits/sigcontext.h
> /usr/include/asm/sigcontext.h
> /usr/include/linux/compiler.h
> /usr/include/linux/compiler-gcc2.h
> /usr/include/linux/compiler-gcc.h
> In file included from /usr/include/linux/compiler.h:18,
> from /usr/include/asm/sigcontext.h:4,
> from /usr/include/bits/sigcontext.h:28,
> from /usr/include/signal.h:307,
> from sig.c:1:
> /usr/include/linux/compiler-gcc2.h:21: warning: `__attribute_used__' redefined
ah, thanks.
Like this?
--- 25/include/asm-i386/sigcontext.h~sigcontext-include-fix 2004-02-10 08:23:47.000000000 -0800
+++ 25-akpm/include/asm-i386/sigcontext.h 2004-02-10 08:24:18.000000000 -0800
@@ -1,7 +1,9 @@
#ifndef _ASMi386_SIGCONTEXT_H
#define _ASMi386_SIGCONTEXT_H
+#ifdef __KERNEL__
#include <linux/compiler.h>
+#endif
/*
* As documented in the iBCS2 standard..
_
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 16:25 ` Andrew Morton
@ 2004-02-10 16:31 ` Linus Torvalds
2004-02-10 17:10 ` Daniel Jacobowitz
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Linus Torvalds @ 2004-02-10 16:31 UTC (permalink / raw)
To: Andrew Morton; +Cc: Jeff Chua, jeffchua, linux-kernel
On Tue, 10 Feb 2004, Andrew Morton wrote:
>
> ah, thanks.
>
> Like this?
That will just break. The reason for the "compiler.h" include is the
"__user" part of fpstate, so now you'll get a parse error later if
non-kernel code includes this.
So the rule should still be: don't include kernel headers from user
programs. But if it's needed for some reason, that #ifdef needs to be
somewhere else (inside "compiler.h" or something).
Linus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 16:31 ` Linus Torvalds
@ 2004-02-10 17:10 ` Daniel Jacobowitz
2004-02-10 17:18 ` Linus Torvalds
2004-02-10 17:28 ` Valdis.Kletnieks
2004-02-10 17:37 ` Andrew Morton
2004-02-11 13:07 ` Jeff Chua
2 siblings, 2 replies; 10+ messages in thread
From: Daniel Jacobowitz @ 2004-02-10 17:10 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Andrew Morton, Jeff Chua, jeffchua, linux-kernel
On Tue, Feb 10, 2004 at 08:31:24AM -0800, Linus Torvalds wrote:
>
>
> On Tue, 10 Feb 2004, Andrew Morton wrote:
> >
> > ah, thanks.
> >
> > Like this?
>
> That will just break. The reason for the "compiler.h" include is the
> "__user" part of fpstate, so now you'll get a parse error later if
> non-kernel code includes this.
>
> So the rule should still be: don't include kernel headers from user
> programs. But if it's needed for some reason, that #ifdef needs to be
> somewhere else (inside "compiler.h" or something).
This is what Debian has been using. I believe the other folks with a
glibc-kernel-headers package based on 2.6 do something similar. I
don't know how you'll feel about adding this sort of crap to the
kernel, though. Someone else needs to find time to start linuxabi
moving again...
--- include/linux/compiler.h 2003-10-15 11:13:09.000000000 -0400
+++ include/linux/compiler.h.t 2003-11-01 18:04:19.000000000 -0500
@@ -9,6 +9,15 @@
# define __kernel
#endif
+#if !defined(__KERNEL__)
+/* Debian: Most of these are inappropriate for userspace. */
+/* We don't define likely, unlikely, or barrier; they're namespace-intrusive
+ and should not be needed outside of __KERNEL__. For __attribute_pure__
+ and __attribute_used__ we use glibc's definitions. */
+# include <sys/cdefs.h>
+# define __deprecated
+#else
+
#if __GNUC__ > 3
# include <linux/compiler-gcc+.h> /* catch-all for GCC 4, 5, etc. */
#elif __GNUC__ == 3
@@ -86,4 +95,6 @@
(typeof(ptr)) (__ptr + (off)); })
#endif
+#endif /* __KERNEL__ */
+
#endif /* __LINUX_COMPILER_H */
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 17:10 ` Daniel Jacobowitz
@ 2004-02-10 17:18 ` Linus Torvalds
2004-02-10 17:28 ` Valdis.Kletnieks
1 sibling, 0 replies; 10+ messages in thread
From: Linus Torvalds @ 2004-02-10 17:18 UTC (permalink / raw)
To: Daniel Jacobowitz; +Cc: Andrew Morton, Jeff Chua, jeffchua, linux-kernel
On Tue, 10 Feb 2004, Daniel Jacobowitz wrote:
>
> This is what Debian has been using. I believe the other folks with a
> glibc-kernel-headers package based on 2.6 do something similar. I
> don't know how you'll feel about adding this sort of crap to the
> kernel, though. Someone else needs to find time to start linuxabi
> moving again...
I don't mind adding a few __KERNEL__ checks, but no I don't want code like
this:
> +#if !defined(__KERNEL__)
> +/* Debian: Most of these are inappropriate for userspace. */
> +/* We don't define likely, unlikely, or barrier; they're namespace-intrusive
> + and should not be needed outside of __KERNEL__. For __attribute_pure__
> + and __attribute_used__ we use glibc's definitions. */
> +# include <sys/cdefs.h>
> +# define __deprecated
> +#else
that is completely glibc-dependent and has no meaning in a kernel header
file.
In general, anything that uses most of the kernel special magic defines
(__deprecated, __inline__, etc) probably should be inside #ifdef
__KERNEL__ anyway, so the kernel <linux/compiler.h> file should not need
to define them.
There are a few cases that look special, just because they touch data
structures that are actually visible to user space. That would be things
like "__packed__" and "__user" etc, which are used to tell something about
the data structure.
So right now I just added a "#ifdef __KERNEL__" around the special parts,
and did _not_ do the part about. We can add a few more #ifdef's around
something else that breaks, but in general I feel that this is up to
whoever merges the headers into user space.
Linus
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 17:10 ` Daniel Jacobowitz
2004-02-10 17:18 ` Linus Torvalds
@ 2004-02-10 17:28 ` Valdis.Kletnieks
1 sibling, 0 replies; 10+ messages in thread
From: Valdis.Kletnieks @ 2004-02-10 17:28 UTC (permalink / raw)
To: Daniel Jacobowitz
Cc: Linus Torvalds, Andrew Morton, Jeff Chua, jeffchua, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 805 bytes --]
On Tue, 10 Feb 2004 12:10:55 EST, Daniel Jacobowitz said:
> This is what Debian has been using. I believe the other folks with a
> glibc-kernel-headers package based on 2.6 do something similar. I
> don't know how you'll feel about adding this sort of crap to the
I found this in the Fedora linux-2.6.0-compile.patch included in their
kernel-2.6.1-1.65.src.rpm. A bit more hard-line. :)
Anybody want to push it for the Linus or -mm trees? ;)
--- linux-2.6.0-test11/include/linux/config.h~ 2003-12-11 09:29:14.090625985 +0100
+++ linux-2.6.0-test11/include/linux/config.h 2003-12-11 09:29:14.090625985 +0100
@@ -2,5 +2,7 @@
#define _LINUX_CONFIG_H
#include <linux/autoconf.h>
-
+#ifndef __KERNEL__
+#error including kernel header in userspace; use the glibc headers instead!
+#endif
#endif
[-- Attachment #2: Type: application/pgp-signature, Size: 226 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 16:31 ` Linus Torvalds
2004-02-10 17:10 ` Daniel Jacobowitz
@ 2004-02-10 17:37 ` Andrew Morton
2004-02-11 13:07 ` Jeff Chua
2 siblings, 0 replies; 10+ messages in thread
From: Andrew Morton @ 2004-02-10 17:37 UTC (permalink / raw)
To: Linus Torvalds; +Cc: jeffchua, linux-kernel
Linus Torvalds <torvalds@osdl.org> wrote:
>
> So the rule should still be: don't include kernel headers from user
> programs.
Yup. I generally take the position that we should fix up things which used
to work, but which 2.6 broke. Usually that is the only thing which people
care about anyway...
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] warning: `__attribute_used__' redefined
2004-02-10 16:31 ` Linus Torvalds
2004-02-10 17:10 ` Daniel Jacobowitz
2004-02-10 17:37 ` Andrew Morton
@ 2004-02-11 13:07 ` Jeff Chua
2 siblings, 0 replies; 10+ messages in thread
From: Jeff Chua @ 2004-02-11 13:07 UTC (permalink / raw)
To: Linus Torvalds; +Cc: Andrew Morton, Jeff Chua, Jeff Chua, Linux Kernel
On Tue, 10 Feb 2004, Linus Torvalds wrote:
> On Tue, 10 Feb 2004, Andrew Morton wrote:
> > ah, thanks.
> > Like this?
> That will just break. The reason for the "compiler.h" include is the
> "__user" part of fpstate, so now you'll get a parse error later if
> non-kernel code includes this.
>
> So the rule should still be: don't include kernel headers from user
> programs. But if it's needed for some reason, that #ifdef needs to be
> somewhere else (inside "compiler.h" or something).
So, what's wrong with the patch I posted earlier. I've verified that it
works with just one place to patch, and that makes all warnings went away.
Patch attached here again.
Thanks,
Jeff
--- linux-2.6.2/include/linux/compiler-gcc2.h Wed Feb 4 11:45:02 2004
+++ linux-2.6.3-rc2/include/linux/compiler-gcc2.h Tue Feb 10 14:30:04 2004
@@ -12,6 +12,10 @@
# define __builtin_expect(x, expected_value) (x)
#endif
+#ifdef __attribute_used__
+#undef __attribute_used__
+#endif
+
#define __attribute_used__ __attribute__((__unused__))
/*
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2004-02-11 13:07 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-02-10 6:39 [PATCH] warning: `__attribute_used__' redefined Jeff Chua
2004-02-10 6:53 ` Andrew Morton
2004-02-10 13:59 ` Jeff Chua
2004-02-10 16:25 ` Andrew Morton
2004-02-10 16:31 ` Linus Torvalds
2004-02-10 17:10 ` Daniel Jacobowitz
2004-02-10 17:18 ` Linus Torvalds
2004-02-10 17:28 ` Valdis.Kletnieks
2004-02-10 17:37 ` Andrew Morton
2004-02-11 13:07 ` Jeff Chua
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox