diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2007-02-01 08:52:23 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-01 19:17:06 -0500 |
commit | 2a3d4f1f1f839e354ebd7d40b2d5d8ac8481a930 (patch) | |
tree | a22da6bd95c69ab7771b8e7870351bfa15b8025d /arch/i386/boot | |
parent | 9abcf40b1d1443e6f0ef86e6a822193142a34abc (diff) |
[PATCH] __crc_... is intended to be absolute
i386 boot/compressed/relocs checks for absolute symbols and warns about
unexpected ones. If you build with modversions, you get ~2500 warnings
about __crc_<symbol>. These suckers are really absolute symbols - we
do _not_ want to modify them on relocation.
They are generated by genksyms - EXPORT_... generates a weak alias, then
genksyms produces an ld script with __crc_<symbol> = <checksum> and it's
fed to ld to produce the final object file. Their only use is to match
kernel and module at modprobe time; they _must_ be absolute.
boot/compressed/relocs has a whitelist of known absolute symbols, but
it doesn't know about __crc_... stuff. As the result, we get shitloads
of false positives on any ld(1) version.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/i386/boot')
-rw-r--r-- | arch/i386/boot/compressed/relocs.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/i386/boot/compressed/relocs.c b/arch/i386/boot/compressed/relocs.c index 468da89153c4..881951ca03e1 100644 --- a/arch/i386/boot/compressed/relocs.c +++ b/arch/i386/boot/compressed/relocs.c | |||
@@ -43,6 +43,8 @@ static int is_safe_abs_reloc(const char* sym_name) | |||
43 | /* Match found */ | 43 | /* Match found */ |
44 | return 1; | 44 | return 1; |
45 | } | 45 | } |
46 | if (strncmp(sym_name, "__crc_", 6) == 0) | ||
47 | return 1; | ||
46 | return 0; | 48 | return 0; |
47 | } | 49 | } |
48 | 50 | ||