From f25152e29c9f69afd7297d95a5f8c20b08df65b4 Mon Sep 17 00:00:00 2001 From: Peter Bergner Date: Tue, 11 Oct 2005 09:28:24 -0700 Subject: [PATCH] --- yaml --- r: 9810 b: refs/heads/master c: 9149ccfa3571eaa4a4b444777d67fc4ed3ebcf27 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/ppc64/kernel/module.c | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c50d6deeea80..0032606e47a3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d3089792f6ee38cdc9e254a7cb2f8c8d7f38c20d +refs/heads/master: 9149ccfa3571eaa4a4b444777d67fc4ed3ebcf27 diff --git a/trunk/arch/ppc64/kernel/module.c b/trunk/arch/ppc64/kernel/module.c index c683bf88e690..928b8581fcb0 100644 --- a/trunk/arch/ppc64/kernel/module.c +++ b/trunk/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);