patch-2.3.13 linux/include/linux/init.h

Next file: linux/include/linux/ioport.h
Previous file: linux/include/linux/if_shaper.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.12/linux/include/linux/init.h linux/include/linux/init.h
@@ -48,18 +48,83 @@
  */
 
 #ifndef MODULE
-#include <asm/init.h>
+
+#ifndef __ASSEMBLY__
+
+/*
+ * Used for initialization calls..
+ */
+typedef int (*initcall_t)(void);
+
+extern initcall_t __initcall_start, __initcall_end;
+
+#define __initcall(fn)								\
+	static initcall_t __initcall_##fn __init_call = fn
+
+/*
+ * Used for kernel command line parameter setup
+ */
+struct kernel_param {
+	const char *str;
+	int (*setup_func)(char *);
+};
+
+extern struct kernel_param __setup_start, __setup_end;
+
+#define __setup(str, fn)								\
+	static char __setup_str_##fn[] __initdata = str;				\
+	static struct kernel_param __setup_##fn __initsetup = { __setup_str_##fn, fn }
+
+#endif /* __ASSEMBLY__ */
+
+/*
+ * Mark functions and data as being only used at initialization
+ * or exit time.
+ */
+#define __init		__attribute__ ((__section__ (".text.init")))
+#define __exit		__attribute__ ((unused, __section__(".text.init")))
+#define __initdata	__attribute__ ((__section__ (".data.init")))
+#define __exitdata	__attribute__ ((unused, __section__ (".data.init")))
+#define __initsetup	__attribute__ ((unused,__section__ (".setup.init")))
+#define __init_call	__attribute__ ((unused,__section__ (".initcall.init")))
+
+#define __initfunc(__arginit) \
+	__arginit __init; \
+	__arginit
+
+/* For assembly routines */
+#define __INIT		.section	".text.init","ax"
+#define __FINIT		.previous
+#define __INITDATA	.section	".data.init","aw"
+
+#define module_init(x)	__initcall(x);
+#define module_exit(x)	/* nothing */
+
 #else
+
 #define __init
+#define __exit
 #define __initdata
+#define __exitdata
 #define __initfunc(__arginit) __arginit
+#define __initcall
 /* For assembly routines */
 #define __INIT
 #define __FINIT
 #define __INITDATA
+
+/* Not sure what version aliases were introduced in, but certainly in 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#define module_init(x)	int init_module(void) __attribute__((alias(#x)));
+#define module_exit(x)	void cleanup_module(void) __attribute__((alias(#x)));
+#else
+#define module_init(x)	int init_module(void) { return x(); }
+#define module_exit(x)	void cleanup_module(void) { x(); }
+#endif
+
 #endif
 
-#if __GNUC__ >= 2 && __GNUC_MINOR__ >= 8
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)
 #define __initlocaldata  __initdata
 #else
 #define __initlocaldata

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)