Skip to content
  • Chaskiel Grundman's avatar
    [PATCH] alpha: process_reloc_for_got confuses r_offset and r_addend · 69ac5964
    Chaskiel Grundman authored
    
    
    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: default avatarRichard Henderson <rth@twiddle.net>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    69ac5964