summaryrefslogtreecommitdiffstats
path: root/arch/sparc64
diff options
context:
space:
mode:
authorChaskiel Grundman <cg2v@andrew.cmu.edu>2005-09-09 13:01:54 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-09 13:57:30 -0700
commit69ac59647e66c1b53fb98fe8b6d0f2099cffad60 (patch)
tree6f748623905ac08850c6318583a3e17feabad377 /arch/sparc64
parent092c948811359d8715790af0eedefc7dff1cd619 (diff)
downloadlinux-stable-69ac59647e66c1b53fb98fe8b6d0f2099cffad60.tar.gz
linux-stable-69ac59647e66c1b53fb98fe8b6d0f2099cffad60.tar.bz2
linux-stable-69ac59647e66c1b53fb98fe8b6d0f2099cffad60.zip
[PATCH] alpha: process_reloc_for_got confuses r_offset and r_addend
arch/alpha/kernel/module.c:process_reloc_for_got(), which figures out how big the .got section for a module should be, appears to be confusing r_offset (the file offset that the relocation needs to be applied to) with r_addend (the offset of the relocation's actual target address from the address of the relocation's symbol). Because of this, one .got entry is allocated for each relocation instead of one each unique symbol/addend. In the module I am working with, this causes the .got section to be almost 10 times larger than it needs to be (75544 bytes instead of 7608 bytes). As the .got is accessed with global-pointer-relative instructions, it needs to be within the 64k gp "zone", and a 75544 byte .got clearly does not fit. The result of this is that relocation overflows are detected during module load and the load is aborted. Change struct got_entry/process_reloc_for_got to fix this. Acked-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/sparc64')
0 files changed, 0 insertions, 0 deletions