diff options
author | Nicolas Pitre <nicolas.pitre@linaro.org> | 2011-04-19 21:55:22 -0400 |
---|---|---|
committer | Nicolas Pitre <nicolas.pitre@linaro.org> | 2011-04-20 00:30:20 -0400 |
commit | 925f6039cebb771e0143c26bd9c63dfd1fa314db (patch) | |
tree | eb3db5047fc503529b17487b690e6a25f6d9c853 /arch/arm/boot | |
parent | 8dcbf26fb5bf96bd3bad4a913ebef5459a0c0cf0 (diff) |
ARM: zImage: fix issues with missing GOT entries for some global variables
Many architecture specific versions of uncompress.h make use of global
variables marked static. In such case the GOT is bypassed and the
code in head.S can't relocate them.
Instead of removing the static keyword from all those files and hope that
it won't come back, let's simply
define it out.
Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Diffstat (limited to 'arch/arm/boot')
-rw-r--r-- | arch/arm/boot/compressed/misc.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c index a5658533e18..0125daead29 100644 --- a/arch/arm/boot/compressed/misc.c +++ b/arch/arm/boot/compressed/misc.c @@ -30,7 +30,20 @@ unsigned int __machine_arch_type; static void putstr(const char *ptr); extern void error(char *x); +/* + * Many instances of mach/uncompress.h are including global variables. + * Contrary to standard usage, we should _not_ mark those variables + * static otherwise they get accessed via GOTOFF references which cannot + * be modified at run time. The entry code in head.S relies on the ability + * to move writable sections around, and for that to work, we must have all + * references going through the GOT which works only with non static + * variables. So, instead of asking for a non intuitive requirement + * making many files non standard according to accepted coding practices + * we fix the issue here by simply defining the static keyword to nothing. + */ +#define static /* non-static */ #include <mach/uncompress.h> +#undef static #ifdef CONFIG_DEBUG_ICEDCC |