From: Brian Gerst <bgerst@didntduck.org>

Move the __this_module structure to the modpost code where it really
belongs.


---

 25-akpm/include/linux/module.h   |   16 +---------------
 25-akpm/scripts/Makefile.modpost |    2 ++
 25-akpm/scripts/modpost.c        |   12 ++++++++++++
 3 files changed, 15 insertions(+), 15 deletions(-)

diff -puN include/linux/module.h~move-__this_module-to-modpost include/linux/module.h
--- 25/include/linux/module.h~move-__this_module-to-modpost	Mon Mar 29 15:51:03 2004
+++ 25-akpm/include/linux/module.h	Mon Mar 29 15:51:03 2004
@@ -70,6 +70,7 @@ static const char __module_cat(name,__LI
 extern const struct gtype##_id __mod_##gtype##_table		\
   __attribute__ ((unused, alias(__stringify(name))))
 
+extern struct module __this_module;
 #define THIS_MODULE (&__this_module)
 
 #else  /* !MODULE */
@@ -481,21 +482,6 @@ static inline int unregister_module_noti
 
 #endif /* CONFIG_MODULES */
 
-#ifdef MODULE
-extern struct module __this_module;
-#ifdef KBUILD_MODNAME
-/* We make the linker do some of the work. */
-struct module __this_module
-__attribute__((section(".gnu.linkonce.this_module"))) = {
-	.name = __stringify(KBUILD_MODNAME),
-	.init = init_module,
-#ifdef CONFIG_MODULE_UNLOAD
-	.exit = cleanup_module,
-#endif
-};
-#endif /* KBUILD_MODNAME */
-#endif /* MODULE */
-
 #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
 
 /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
diff -puN scripts/Makefile.modpost~move-__this_module-to-modpost scripts/Makefile.modpost
--- 25/scripts/Makefile.modpost~move-__this_module-to-modpost	Mon Mar 29 15:51:03 2004
+++ 25-akpm/scripts/Makefile.modpost	Mon Mar 29 15:51:03 2004
@@ -35,6 +35,8 @@ targets += $(modules)
 
 # Compile version info for unresolved symbols
 
+modname = $(*F)
+
 quiet_cmd_cc_o_c = CC      $@
       cmd_cc_o_c = $(CC) $(c_flags) $(CFLAGS_MODULE)	\
 		   -c -o $@ $<
diff -puN scripts/modpost.c~move-__this_module-to-modpost scripts/modpost.c
--- 25/scripts/modpost.c~move-__this_module-to-modpost	Mon Mar 29 15:51:03 2004
+++ 25-akpm/scripts/modpost.c	Mon Mar 29 15:51:03 2004
@@ -355,6 +355,9 @@ handle_modversions(struct module *mod, s
 		/* ignore global offset table */
 		if (strcmp(symname, "_GLOBAL_OFFSET_TABLE_") == 0)
 			break;
+		/* ignore __this_module, it will be resolved shortly */
+		if (strcmp(symname, MODULE_SYMBOL_PREFIX "__this_module") == 0)
+			break;
 #ifdef STT_REGISTER
 		if (info->hdr->e_machine == EM_SPARC ||
 		    info->hdr->e_machine == EM_SPARCV9) {
@@ -480,6 +483,15 @@ add_header(struct buffer *b)
 	buf_printf(b, "#include <linux/compiler.h>\n");
 	buf_printf(b, "\n");
 	buf_printf(b, "MODULE_INFO(vermagic, VERMAGIC_STRING);\n");
+	buf_printf(b, "\n");
+	buf_printf(b, "struct module __this_module\n");
+	buf_printf(b, "__attribute__((section(\".gnu.linkonce.this_module\"))) = {\n");
+	buf_printf(b, " .name = __stringify(KBUILD_MODNAME),\n");
+	buf_printf(b, " .init = init_module,\n");
+	buf_printf(b, "#ifdef CONFIG_MODULE_UNLOAD\n");
+	buf_printf(b, " .exit = cleanup_module,\n");
+	buf_printf(b, "#endif\n");
+	buf_printf(b, "};\n");
 }
 
 /* Record CRCs for unresolved symbols */

_