|
@@ -491,6 +491,23 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
|
|
|
*/
|
|
|
break;
|
|
|
|
|
|
+ case R_PPC64_REL16_HA:
|
|
|
+ /* Subtract location pointer */
|
|
|
+ value -= (unsigned long)location;
|
|
|
+ value = ((value + 0x8000) >> 16);
|
|
|
+ *((uint16_t *) location)
|
|
|
+ = (*((uint16_t *) location) & ~0xffff)
|
|
|
+ | (value & 0xffff);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case R_PPC64_REL16_LO:
|
|
|
+ /* Subtract location pointer */
|
|
|
+ value -= (unsigned long)location;
|
|
|
+ *((uint16_t *) location)
|
|
|
+ = (*((uint16_t *) location) & ~0xffff)
|
|
|
+ | (value & 0xffff);
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
printk("%s: Unknown ADD relocation: %lu\n",
|
|
|
me->name,
|