[PATCH] ppc64: Add R_PPC64_TOC16 module reloc
Newer gcc's are generating this relocation, so the module loader needs to handle it. Signed-off-by: Peter Bergner <bergner@vnet.ibm.com> Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>hifive-unleashed-5.1
parent
d3089792f6
commit
9149ccfa35
|
@ -341,6 +341,19 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
|
||||||
*(unsigned long *)location = my_r2(sechdrs, me);
|
*(unsigned long *)location = my_r2(sechdrs, me);
|
||||||
break;
|
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:
|
case R_PPC64_TOC16_DS:
|
||||||
/* Subtact TOC pointer */
|
/* Subtact TOC pointer */
|
||||||
value -= my_r2(sechdrs, me);
|
value -= my_r2(sechdrs, me);
|
||||||
|
|
Loading…
Reference in New Issue