Re: [PATCH] static int __init foobar_init(void) {} fix

From: Rusty Russell (rusty@linuxcare.com.au)
Date: Wed Mar 15 2000 - 02:20:50 EST


In message <20000313153841.F568@mff.cuni.cz> you write:
> On the other side, we can cheat:

Linus, please apply this: Jakub you're my hero!

[Comment added (it's a little obscure otherwise)].

--- linux-2.3-official/include/linux/init.h Tue Mar 14 23:55:41 2000
+++ linux-2.3-nfmerge/include/linux/init.h Wed Mar 15 18:16:48 2000
@@ -98,8 +98,17 @@
 
 /* Not sure what version aliases were introduced in, but certainly in 2.91.66. */
 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 91)
-#define module_init(x) int init_module(void) __attribute__((alias(#x)));
-#define module_exit(x) void cleanup_module(void) __attribute__((alias(#x)));
+/* These macros create a dummy inline: gcc 2.9x does not count alias
+ as usage, hence the `unused function' warning when __init functions
+ are declared static */
+#define module_init(x) \
+int init_module(void) __attribute__((alias(#x))); \
+extern inline void *__init_module_inline(void) \
+{ return (void *)x; }
+#define module_exit(x) \
+void cleanup_module(void) __attribute__((alias(#x))); \
+extern inline void *__cleanup_module_inline(void) \
+{ return (void *)x; }
 #else
 #define module_init(x) int init_module(void) { return x(); }
 #define module_exit(x) void cleanup_module(void) { x(); }

--
Hacking time.

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Mar 15 2000 - 21:00:30 EST