[ELF] Support R_PPC_ADDR24 (ba foo; bla foo)
authorFangrui Song <i@maskray.me>
Sun, 17 Jan 2021 08:02:13 +0000 (00:02 -0800)
committerFangrui Song <i@maskray.me>
Sun, 17 Jan 2021 08:02:13 +0000 (00:02 -0800)
lld/ELF/Arch/PPC.cpp
lld/test/ELF/ppc32-reloc-addr.s

index 5b22e6c..aaecef6 100644 (file)
@@ -222,6 +222,7 @@ RelExpr PPC::getRelExpr(RelType type, const Symbol &s,
   case R_PPC_ADDR16_HA:
   case R_PPC_ADDR16_HI:
   case R_PPC_ADDR16_LO:
+  case R_PPC_ADDR24:
   case R_PPC_ADDR32:
     return R_ABS;
   case R_PPC_DTPREL16:
@@ -345,6 +346,7 @@ void PPC::relocate(uint8_t *loc, const Relocation &rel, uint64_t val) const {
     write32(loc, (read32(loc) & ~mask) | (val & mask));
     break;
   }
+  case R_PPC_ADDR24:
   case R_PPC_REL24:
   case R_PPC_LOCAL24PC:
   case R_PPC_PLTREL24: {
index 98bd61b..78865b8 100644 (file)
 # CHECK-LABEL: section .R_PPC_ADDR16_LO:
 # CHECK: addi 4, 4, 4660
 
+.section .R_PPC_ADDR24,"ax",@progbits
+  ba a
+# CHECK-LABEL: section .R_PPC_ADDR24:
+# CHECK: ba 4660
+
 .section .R_PPC_ADDR32,"a",@progbits
   .long a
   .long b
 # HEX-LABEL: section .R_PPC_ADDR32:
-# HEX-NEXT: 100000b4 00001234 000bcdef
+# HEX-NEXT: {{.*}} 00001234 000bcdef