diff options
author | Al Viro <viro@ftp.linux.org.uk> | 2007-02-01 13:52:23 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-02 00:17:06 (GMT) |
commit | 2a3d4f1f1f839e354ebd7d40b2d5d8ac8481a930 (patch) | |
tree | a22da6bd95c69ab7771b8e7870351bfa15b8025d /arch/i386/boot | |
parent | 9abcf40b1d1443e6f0ef86e6a822193142a34abc (diff) | |
download | linux-2a3d4f1f1f839e354ebd7d40b2d5d8ac8481a930.tar.xz |
[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 468da89..881951c 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) /* Match found */ return 1; } + if (strncmp(sym_name, "__crc_", 6) == 0) + return 1; return 0; } |