summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2005-12-14 22:04:22 +0000
committerRussell King <rmk+kernel@arm.linux.org.uk>2005-12-14 22:04:22 +0000
commitc2e2611425a956d25d2948c5d95d3848c4db1257 (patch)
tree54f6e333ff805a0a0eb63299f0adaa4d11544ab5
parent1ee9530a71686436dbeb5f31dd5b925c39cf71d7 (diff)
downloadlinux-c2e2611425a956d25d2948c5d95d3848c4db1257.tar.gz
linux-c2e2611425a956d25d2948c5d95d3848c4db1257.tar.bz2
linux-c2e2611425a956d25d2948c5d95d3848c4db1257.zip
[ARM] 3205/1: Handle new EABI relocations when loading kernel modules.
Patch from Daniel Jacobowitz Handle new EABI relocations when loading kernel modules. This is necessary for CONFIG_AEABI kernels, and also for some broken (since fixed) old ABI toolchains. Signed-off-by: Daniel Jacobowitz <dan@codesourcery.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/kernel/module.c2
-rw-r--r--include/asm-arm/elf.h2
2 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
index 6055e1427ba3..055bf5d28894 100644
--- a/arch/arm/kernel/module.c
+++ b/arch/arm/kernel/module.c
@@ -101,6 +101,8 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
break;
case R_ARM_PC24:
+ case R_ARM_CALL:
+ case R_ARM_JUMP24:
offset = (*(u32 *)loc & 0x00ffffff) << 2;
if (offset & 0x02000000)
offset -= 0x04000000;
diff --git a/include/asm-arm/elf.h b/include/asm-arm/elf.h
index 7da97a937548..2d44b42d1847 100644
--- a/include/asm-arm/elf.h
+++ b/include/asm-arm/elf.h
@@ -22,6 +22,8 @@ typedef unsigned long elf_freg_t[3];
#define R_ARM_NONE 0
#define R_ARM_PC24 1
#define R_ARM_ABS32 2
+#define R_ARM_CALL 28
+#define R_ARM_JUMP24 29
#define ELF_NGREG (sizeof (struct pt_regs) / sizeof(elf_greg_t))
typedef elf_greg_t elf_gregset_t[ELF_NGREG];