All of lore.kernel.org
 help / color / mirror / Atom feed
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.