typedef int (*initcall_t)(void);
typedef void (*exitcall_t)(void);
-#define __init __attribute__ ((__section__ (".text.init")))
-#define __exit __attribute__ ((unused, __section__(".text.exit")))
-#define __initdata __attribute__ ((__section__ (".data.init")))
+/* These are for everybody (although not all archs will actually
+ discard it in modules) */
+#define __init __attribute__ ((__section__ (".init.text")))
+#define __initdata __attribute__ ((__section__ (".init.data")))
+#define __exitdata __attribute__ ((__section__(".exit.data")))
+#define __exit_call __attribute_used__ __attribute__ ((__section__ (".exitcall.exit")))
+
+#ifdef MODULE
+#define __exit __attribute__ ((__section__(".exit.text")))
+#else
+#define __exit __attribute_used__ __attribute__ ((__section__(".exit.text")))
+#endif
#endif
* Mark functions and data as being only used at initialization
* or exit time.
*/
-#define __uml_init_setup __attribute__ ((unused,__section__ (".uml.setup.init")))
-#define __uml_setup_help __attribute__ ((unused,__section__ (".uml.help.init")))
-#define __uml_init_call __attribute__ ((unused,__section__ (".uml.initcall.init")))
-#define __uml_postsetup_call __attribute__ ((unused,__section__ (".uml.postsetup.init")))
-#define __uml_exit_call __attribute__ ((unused,__section__ (".uml.exitcall.exit")))
+#define __uml_init_setup __attribute_used__ __attribute__ ((__section__ (".uml.setup.init")))
+#define __uml_setup_help __attribute_used__ __attribute__ ((__section__ (".uml.help.init")))
+#define __uml_init_call __attribute_used__ __attribute__ ((__section__ (".uml.initcall.init")))
+#define __uml_postsetup_call __attribute_used__ __attribute__ ((__section__ (".uml.postsetup.init")))
+#define __uml_exit_call __attribute_used__ __attribute__ ((__section__ (".uml.exitcall.exit")))
+
+#ifndef __KERNEL__
+
+#define __initcall(fn) static initcall_t __initcall_##fn __init_call = fn
+#define __exitcall(fn) static exitcall_t __exitcall_##fn __exit_call = fn
+
+#define __init_call __attribute__ ((unused,__section__ (".initcall.init")))
+
+#endif
#endif /* _LINUX_UML_INIT_H */