Valid relocation symbol for FLAT format on ARM
PATCH v3 1/1 Valid relocation symbol for FLAT format on ARM
Strange - this did not seem to go through. Another try.
Cheers.
Jun
-------------- next part --------------
Apparently newer GCC would generate ANCHOR symbols beyond the end of data/bss segment on ARM CPUs. As a result, the exiting validity checking for relocation symbols in FLAT format will fail.
Signed-off-by Jun Sun <[email protected]>
---
arch/arm/include/asm/flat.h renamed from arch/arm/include/asm/flat.h.orig +6 -1
@@ -7,7 +7,12 @@#define flat_argvp_envp_on_stack () 1#define flat_old_ram_flag (flags) (flags) -#define flat_reloc_valid (reloc, size) ((reloc) <= (size)) +/* New gcc 4.x generates ANCHOR symbols in order to reduce the size +* of GOT table for PIC code. It is possible the ANCHOR is placed beyond +* the end of data/bss segment up to 4K bytes(12 bits), because ARM allows +* negative 12-bit offset. Thus we allow 0x1000 extra in reloc address range. +*/ +#define flat_reloc_valid (reloc, size) ((reloc) <= (size) + 0x1000)#define flat_get_addr_from_rp (rp, relval, flags, persistent) get_unaligned(rp)#define flat_put_addr_at_rp (rp, val, relval) put_unaligned(val,rp)#define flat_get_relocate_addr (rel) (rel)