Commit 612cbdcf authored by Richard Henderson's avatar Richard Henderson

Merge kanga.twiddle.net:/home/rth/linux/linus-2.5

into kanga.twiddle.net:/home/rth/linux/axp-2.5
parents 94fd582e 0dd22e54
...@@ -25,6 +25,23 @@ ...@@ -25,6 +25,23 @@
#define __deprecated #define __deprecated
#endif #endif
/*
* Allow us to avoid 'defined but not used' warnings on functions and data,
* as well as force them to be emitted to the assembly file.
*
* As of gcc 3.3, static functions that are not marked with attribute((used))
* may be elided from the assembly file. As of gcc 3.3, static data not so
* marked will not be elided, but this may change in a future gcc version.
*
* In prior versions of gcc, such functions and data would be emitted, but
* would be warned about except with attribute((unused)).
*/
#if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3
#define __attribute_used__ __attribute__((__used__))
#else
#define __attribute_used__ __attribute__((__unused__))
#endif
/* This macro obfuscates arithmetic on a variable address so that gcc /* This macro obfuscates arithmetic on a variable address so that gcc
shouldn't recognize the original var, and make assumptions about it */ shouldn't recognize the original var, and make assumptions about it */
#define RELOC_HIDE(ptr, off) \ #define RELOC_HIDE(ptr, off) \
......
...@@ -1294,7 +1294,7 @@ do_clock_nanosleep(clockid_t which_clock, int flags, struct timespec *tsave) ...@@ -1294,7 +1294,7 @@ do_clock_nanosleep(clockid_t which_clock, int flags, struct timespec *tsave)
} }
restart_block->fn = clock_nanosleep_restart; restart_block->fn = clock_nanosleep_restart;
restart_block->arg0 = which_clock; restart_block->arg0 = which_clock;
restart_block->arg1 = (int)tsave; restart_block->arg1 = (unsigned long)tsave;
restart_block->arg2 = new_timer.expires; restart_block->arg2 = new_timer.expires;
return -ERESTART_RESTARTBLOCK; return -ERESTART_RESTARTBLOCK;
} }
......
...@@ -384,6 +384,7 @@ add_header(struct buffer *b) ...@@ -384,6 +384,7 @@ add_header(struct buffer *b)
{ {
buf_printf(b, "#include <linux/module.h>\n"); buf_printf(b, "#include <linux/module.h>\n");
buf_printf(b, "#include <linux/vermagic.h>\n"); buf_printf(b, "#include <linux/vermagic.h>\n");
buf_printf(b, "#include <linux/compiler.h>\n");
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "const char vermagic[]\n"); buf_printf(b, "const char vermagic[]\n");
buf_printf(b, "__attribute__((section(\"__vermagic\"))) =\n"); buf_printf(b, "__attribute__((section(\"__vermagic\"))) =\n");
...@@ -449,6 +450,7 @@ add_depends(struct buffer *b, struct module *mod, struct module *modules) ...@@ -449,6 +450,7 @@ add_depends(struct buffer *b, struct module *mod, struct module *modules)
buf_printf(b, "\n"); buf_printf(b, "\n");
buf_printf(b, "static const char __module_depends[]\n"); buf_printf(b, "static const char __module_depends[]\n");
buf_printf(b, "__attribute_used__\n");
buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n"); buf_printf(b, "__attribute__((section(\".modinfo\"))) =\n");
buf_printf(b, "\"depends="); buf_printf(b, "\"depends=");
for (s = mod->unres; s; s = s->next) { for (s = mod->unres; s; s = s->next) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment