summaryrefslogtreecommitdiffstats
path: root/arch/ppc64/kernel/module.c
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@pobox.com>2005-10-18 21:23:11 -0400
committerJeff Garzik <jgarzik@pobox.com>2005-10-18 21:23:11 -0400
commit4e0e329d9a2011f9f7a7c0a378dc3bff7b0a0283 (patch)
treea802614e01460631c694dfa118642d54c3d5fc79 /arch/ppc64/kernel/module.c
parente33b9dfa3008fcaa908dc0c8c472a812c400f839 (diff)
parent59a10b172fccaea793352c00fd9065f0a5b4ef70 (diff)
downloadtalos-obmc-linux-4e0e329d9a2011f9f7a7c0a378dc3bff7b0a0283.tar.gz
talos-obmc-linux-4e0e329d9a2011f9f7a7c0a378dc3bff7b0a0283.zip
Merge branch 'upstream'
Diffstat (limited to 'arch/ppc64/kernel/module.c')
-rw-r--r--arch/ppc64/kernel/module.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arch/ppc64/kernel/module.c b/arch/ppc64/kernel/module.c
index c683bf88e690..928b8581fcb0 100644
--- a/arch/ppc64/kernel/module.c
+++ b/arch/ppc64/kernel/module.c
@@ -341,6 +341,19 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
*(unsigned long *)location = my_r2(sechdrs, me);
break;
+ case R_PPC64_TOC16:
+ /* Subtact TOC pointer */
+ value -= my_r2(sechdrs, me);
+ if (value + 0x8000 > 0xffff) {
+ printk("%s: bad TOC16 relocation (%lu)\n",
+ me->name, value);
+ return -ENOEXEC;
+ }
+ *((uint16_t *) location)
+ = (*((uint16_t *) location) & ~0xffff)
+ | (value & 0xffff);
+ break;
+
case R_PPC64_TOC16_DS:
/* Subtact TOC pointer */
value -= my_r2(sechdrs, me);
OpenPOWER on IntegriCloud