From: Bernardo Innocenti <bernie@develer.com>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Andrew Morton <akpm@osdl.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] GCC 3.3.x/3.4 compatiblity fix in include/linux/init.h
Date: Sat, 27 Sep 2003 02:47:30 +0200 [thread overview]
Message-ID: <3F74DE22.60105@develer.com> (raw)
Hello,
GCC 3.4 miscompiles the kernel because it silently optimizes away
data placed in the .init.setup section by the __setup() macro.
I've initially reported it as a 3.4 regression, but it turned
out to be correct behavior:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12324
__attribute__((unused)) does only avoid the warning, but doesn't
mark the data as being used.
Since GCC 3.3, __attribute__((used)) can also be applied to
variables. The __attribute_used__ macro from linux/compiler.h
already takes care of compiler differences for us.
In this patch, I've gone a step further and proactively fixed
that in all places.
Please apply.
--- linux-2.6.0-test5-bk9/include/linux/init.h.orig 2003-09-27 02:15:54.000000000 +0200
+++ linux-2.6.0-test5-bk9/include/linux/init.h 2003-09-27 02:18:25.000000000 +0200
@@ -43,12 +43,12 @@
#define __init __attribute__ ((__section__ (".init.text")))
#define __initdata __attribute__ ((__section__ (".init.data")))
#define __exitdata __attribute__ ((__section__(".exit.data")))
-#define __exit_call __attribute__ ((unused,__section__ (".exitcall.exit")))
+#define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
#ifdef MODULE
#define __exit __attribute__ ((__section__(".exit.text")))
#else
-#define __exit __attribute__ ((unused,__section__(".exit.text")))
+#define __exit __attribute_used__ __attribute__ ((__section__(".exit.text")))
#endif
/* For assembly routines */
@@ -79,7 +79,8 @@ extern initcall_t __security_initcall_st
*/
#define __define_initcall(level,fn) \
- static initcall_t __initcall_##fn __attribute__ ((unused,__section__ (".initcall" level ".init"))) = fn
+ static initcall_t __initcall_##fn __attribute_used__ \
+ __attribute__((__section__(".initcall" level ".init"))) = fn
#define core_initcall(fn) __define_initcall("1",fn)
#define postcore_initcall(fn) __define_initcall("2",fn)
@@ -91,14 +92,16 @@ extern initcall_t __security_initcall_st
#define __initcall(fn) device_initcall(fn)
-#define __exitcall(fn) \
+#define __exitcall(fn) \
static exitcall_t __exitcall_##fn __exit_call = fn
#define console_initcall(fn) \
- static initcall_t __initcall_##fn __attribute__ ((unused,__section__ (".con_initcall.init")))=fn
+ static initcall_t __initcall_##fn \
+ __attribute_used__ __attribute__((__section__(".con_initcall.init")))=fn
#define security_initcall(fn) \
- static initcall_t __initcall_##fn __attribute__ ((unused,__section__ (".security_initcall.init"))) = fn
+ static initcall_t __initcall_##fn \
+ __attribute_used__ __attribute__((__section__(".security_initcall.init"))) = fn
struct obs_kernel_param {
const char *str;
@@ -106,10 +109,11 @@ struct obs_kernel_param {
};
/* OBSOLETE: see moduleparam.h for the right way. */
-#define __setup(str, fn) \
- static char __setup_str_##fn[] __initdata = str; \
- static struct obs_kernel_param __setup_##fn \
- __attribute__((unused,__section__ (".init.setup"))) \
+#define __setup(str, fn) \
+ static char __setup_str_##fn[] __initdata = str; \
+ static struct obs_kernel_param __setup_##fn \
+ __attribute_used__ \
+ __attribute__((__section__(".init.setup"))) \
= { __setup_str_##fn, fn }
#endif /* __ASSEMBLY__ */
--
// Bernardo Innocenti - Develer S.r.l., R&D dept.
\X/ http://www.develer.com/
Please don't send Word attachments - http://www.gnu.org/philosophy/no-word-attachments.html
reply other threads:[~2003-09-27 0:47 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3F74DE22.60105@develer.com \
--to=bernie@develer.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.