<div dir="ltr">Hi Simon,<br><br>Bit of a drive by review, but could you (would you) add in some comments of what the relocation calculation actually does above the implementation? Similar to table 4-11 in <a href="http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf">http://math-atlas.sourceforge.net/devel/assembly/mipsabi32.pdf</a> at least?<div><br></div><div>-eric</div></div><br><div class="gmail_quote">On Thu, Mar 19, 2015 at 1:08 PM Simon Atanasyan <<a href="mailto:simon@atanasyan.com">simon@atanasyan.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: atanasyan<br>
Date: Thu Mar 19 14:58:58 2015<br>
New Revision: 232755<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=232755&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=232755&view=rev</a><br>
Log:<br>
[Mips] Implement R_MIPS_PC19_S2 / R_MIPS_PC26_S2 relocations handling<br>
<br>
Added:<br>
    lld/trunk/test/elf/Mips/rel-<u></u>pc19-s2.test<br>
    lld/trunk/test/elf/Mips/rel-<u></u>pc26-s2.test<br>
Modified:<br>
    lld/trunk/lib/ReaderWriter/<u></u>ELF/Mips/<u></u>MipsRelocationHandler.cpp<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/<u></u>ELF/Mips/<u></u>MipsRelocationHandler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsRelocationHandler.cpp?rev=232755&r1=232754&r2=232755&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/lib/<u></u>ReaderWriter/ELF/Mips/<u></u>MipsRelocationHandler.cpp?rev=<u></u>232755&r1=232754&r2=232755&<u></u>view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/lib/ReaderWriter/<u></u>ELF/Mips/<u></u>MipsRelocationHandler.cpp (original)<br>
+++ lld/trunk/lib/ReaderWriter/<u></u>ELF/Mips/<u></u>MipsRelocationHandler.cpp Thu Mar 19 14:58:58 2015<br>
@@ -65,8 +65,12 @@ static MipsRelocationParams getRelocatio<br>
   case R_MIPS_26:<br>
   case LLD_R_MIPS_GLOBAL_26:<br>
     return {4, 0x3ffffff, 2, false};<br>
+  case R_MIPS_PC19_S2:<br>
+    return {4, 0x7ffff, 2, false};<br>
   case R_MIPS_PC21_S2:<br>
     return {4, 0x1fffff, 2, false};<br>
+  case R_MIPS_PC26_S2:<br>
+    return {4, 0x3ffffff, 2, false};<br>
   case R_MIPS_HI16:<br>
   case R_MIPS_LO16:<br>
   case R_MIPS_GPREL16:<br>
@@ -221,6 +225,14 @@ static uint32_t relocGPRel32(uint64_t S,<br>
   return result;<br>
 }<br>
<br>
+/// \brief R_MIPS_PC19_S2<br>
+static uint32_t relocPc19(uint64_t P, uint64_t S, int64_t A) {<br>
+  A = llvm::SignExtend32<21>(A);<br>
+  // FIXME (simon): Check that S + A has 4-byte alignment<br>
+  int32_t result = S + A - P;<br>
+  return result >> 2;<br>
+}<br>
+<br>
 /// \brief R_MIPS_PC21_S2<br>
 static uint32_t relocPc21(uint64_t P, uint64_t S, int64_t A) {<br>
   A = llvm::SignExtend32<23>(A);<br>
@@ -229,6 +241,14 @@ static uint32_t relocPc21(uint64_t P, ui<br>
   return result >> 2;<br>
 }<br>
<br>
+/// \brief R_MIPS_PC26_S2<br>
+static uint32_t relocPc26(uint64_t P, uint64_t S, int64_t A) {<br>
+  A = llvm::SignExtend32<28>(A);<br>
+  // FIXME (simon): Check that S + A has 4-byte alignment<br>
+  int32_t result = S + A - P;<br>
+  return result >> 2;<br>
+}<br>
+<br>
 /// \brief R_MICROMIPS_PC7_S1<br>
 static uint32_t relocPc7(uint64_t P, uint64_t S, int64_t A) {<br>
   A = llvm::SignExtend32<8>(A);<br>
@@ -361,8 +381,12 @@ static ErrorOr<uint64_t> calculateReloca<br>
     return relocGOT(tgtAddr, gpAddr);<br>
   case R_MIPS_GOT_OFST:<br>
     return relocGOTOfst(tgtAddr, ref.addend());<br>
+  case R_MIPS_PC19_S2:<br>
+    return relocPc19(relAddr, tgtAddr, ref.addend());<br>
   case R_MIPS_PC21_S2:<br>
     return relocPc21(relAddr, tgtAddr, ref.addend());<br>
+  case R_MIPS_PC26_S2:<br>
+    return relocPc26(relAddr, tgtAddr, ref.addend());<br>
   case R_MICROMIPS_PC7_S1:<br>
     return relocPc7(relAddr, tgtAddr, ref.addend());<br>
   case R_MICROMIPS_PC10_S1:<br>
<br>
Added: lld/trunk/test/elf/Mips/rel-<u></u>pc19-s2.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/rel-pc19-s2.test?rev=232755&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/test/elf/<u></u>Mips/rel-pc19-s2.test?rev=<u></u>232755&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/test/elf/Mips/rel-<u></u>pc19-s2.test (added)<br>
+++ lld/trunk/test/elf/Mips/rel-<u></u>pc19-s2.test Thu Mar 19 14:58:58 2015<br>
@@ -0,0 +1,54 @@<br>
+# Check handling of R_MIPS_PC19_S2 relocation.<br>
+<br>
+# RUN: yaml2obj -format=elf %s > %t.o<br>
+# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o<br>
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s<br>
+<br>
+# CHECK: Contents of section .text:<br>
+# CHECK-NEXT: 400110 01000000 00000000 00000000<br>
+#                    ^ V<br>
+#                    A = -1 << 2 = -4 =><br>
+#                    V = (T1 - 4 - T0) >> 2 =><br>
+#                    V => 4 >> 2 = 1<br>
+<br>
+# CHECK: SYMBOL TABLE:<br>
+# CHECK: 00400110 g  F .text  00000008 T0<br>
+# CHECK: 00400118 g  F .text  00000004 T1<br>
+<br>
+FileHeader:<br>
+  Class:   ELFCLASS32<br>
+  Data:    ELFDATA2LSB<br>
+  Type:    ET_REL<br>
+  Machine: EM_MIPS<br>
+  Flags:   [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]<br>
+<br>
+Sections:<br>
+- Name:         .text<br>
+  Type:         SHT_PROGBITS<br>
+  Content:      "ffff07000000000000000000"<br>
+#                                ^ T1<br>
+#                ^ T0 A := 0x7ffff == -1<br>
+  AddressAlign: 16<br>
+  Flags:        [ SHF_ALLOC, SHF_EXECINSTR ]<br>
+<br>
+- Name:         .rel.text<br>
+  Type:         SHT_REL<br>
+  Info:         .text<br>
+  AddressAlign: 4<br>
+  Relocations:<br>
+    - Offset: 0<br>
+      Symbol: T1<br>
+      Type:   R_MIPS_PC19_S2<br>
+<br>
+Symbols:<br>
+  Global:<br>
+    - Name:    T0<br>
+      Section: .text<br>
+      Type:    STT_FUNC<br>
+      Value:   0<br>
+      Size:    8<br>
+    - Name:    T1<br>
+      Section: .text<br>
+      Type:    STT_FUNC<br>
+      Value:   8<br>
+      Size:    4<br>
<br>
Added: lld/trunk/test/elf/Mips/rel-<u></u>pc26-s2.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Mips/rel-pc26-s2.test?rev=232755&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/lld/trunk/test/elf/<u></u>Mips/rel-pc26-s2.test?rev=<u></u>232755&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- lld/trunk/test/elf/Mips/rel-<u></u>pc26-s2.test (added)<br>
+++ lld/trunk/test/elf/Mips/rel-<u></u>pc26-s2.test Thu Mar 19 14:58:58 2015<br>
@@ -0,0 +1,54 @@<br>
+# Check handling of R_MIPS_PC26_S2 relocation.<br>
+<br>
+# RUN: yaml2obj -format=elf %s > %t.o<br>
+# RUN: lld -flavor gnu -target mipsel -e T0 -o %t.exe %t.o<br>
+# RUN: llvm-objdump -s -t %t.exe | FileCheck %s<br>
+<br>
+# CHECK: Contents of section .text:<br>
+# CHECK-NEXT: 400110 01000000 00000000 00000000<br>
+#                    ^ V<br>
+#                    A = -1 << 2 = -4 =><br>
+#                    V = (T1 - 4 - T0) >> 2 =><br>
+#                    V => 4 >> 2 = 1<br>
+<br>
+# CHECK: SYMBOL TABLE:<br>
+# CHECK: 00400110 g  F .text  00000008 T0<br>
+# CHECK: 00400118 g  F .text  00000004 T1<br>
+<br>
+FileHeader:<br>
+  Class:   ELFCLASS32<br>
+  Data:    ELFDATA2LSB<br>
+  Type:    ET_REL<br>
+  Machine: EM_MIPS<br>
+  Flags:   [EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32R6]<br>
+<br>
+Sections:<br>
+- Name:         .text<br>
+  Type:         SHT_PROGBITS<br>
+  Content:      "ffffff030000000000000000"<br>
+#                                ^ T1<br>
+#                ^ T0 A := 0x3ffffff == -1<br>
+  AddressAlign: 16<br>
+  Flags:        [ SHF_ALLOC, SHF_EXECINSTR ]<br>
+<br>
+- Name:         .rel.text<br>
+  Type:         SHT_REL<br>
+  Info:         .text<br>
+  AddressAlign: 4<br>
+  Relocations:<br>
+    - Offset: 0<br>
+      Symbol: T1<br>
+      Type:   R_MIPS_PC26_S2<br>
+<br>
+Symbols:<br>
+  Global:<br>
+    - Name:    T0<br>
+      Section: .text<br>
+      Type:    STT_FUNC<br>
+      Value:   0<br>
+      Size:    8<br>
+    - Name:    T1<br>
+      Section: .text<br>
+      Type:    STT_FUNC<br>
+      Value:   8<br>
+      Size:    4<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</blockquote></div>