[PATCH] D26401: [mips][ias] N32/N64 must not sort the relocation table.

Simon Dardis via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 5 05:05:37 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL288666: [mips][ias] N32/N64 must not sort the relocation table. (authored by sdardis).

Changed prior to commit:
  https://reviews.llvm.org/D26401?vs=77195&id=80252#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D26401

Files:
  llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
  llvm/trunk/test/MC/Mips/reloc-directive.s


Index: llvm/trunk/test/MC/Mips/reloc-directive.s
===================================================================
--- llvm/trunk/test/MC/Mips/reloc-directive.s
+++ llvm/trunk/test/MC/Mips/reloc-directive.s
@@ -43,16 +43,24 @@
 # OBJ-N32:       0000: 00000000 00000000 00000000
 # OBJ-N32-LABEL: }
 # OBJ-N32-LABEL: Relocations [
-# OBJ-N32:       0x0 R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE .text 0x4
+
 # OBJ-N32:       0x4 R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE .text 0x0
+# OBJ-N32:       0x0 R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE .text 0x4
 # OBJ-N32:       0x8 R_MIPS_32/R_MIPS_NONE/R_MIPS_NONE .text 0x8
 # OBJ-N32:       0xC R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE -   0x0
 
+# FIXME:This is the correct output for reference.
+
+# OBJ-N32-FIXME:       0x4 R_MIPS_NONE .text 0x0
+# OBJ-N32-FIXME:       0x0 R_MIPS_NONE .text 0x4
+# OBJ-N32-FIXME:       0x8 R_MIPS_32   .text 0x8
+# OBJ-N32-FIXME:       0xC R_MIPS_NONE -     0x0
+
 # OBJ-N64-LABEL: Name: .text
 # OBJ-N64:       0000: 00000000 00000000 00000000
 # OBJ-N64-LABEL: }
 # OBJ-N64-LABEL: Relocations [
-# OBJ-N64:       0x0 R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE .text 0x4
 # OBJ-N64:       0x4 R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE .text 0x0
+# OBJ-N64:       0x0 R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE .text 0x4
 # OBJ-N64:       0x8 R_MIPS_32/R_MIPS_NONE/R_MIPS_NONE .text 0x8
 # OBJ-N64:       0xC R_MIPS_NONE/R_MIPS_NONE/R_MIPS_NONE -   0x0
Index: llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
===================================================================
--- llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
+++ llvm/trunk/lib/Target/Mips/MCTargetDesc/MipsELFObjectWriter.cpp
@@ -419,6 +419,13 @@
 /// always match using the expressions from the source.
 void MipsELFObjectWriter::sortRelocs(const MCAssembler &Asm,
                                      std::vector<ELFRelocationEntry> &Relocs) {
+
+  // We do not need to sort the relocation table for RELA relocations which
+  // N32/N64 uses as the relocation addend contains the value we require,
+  // rather than it being split across a pair of relocations.
+  if (hasRelocationAddend())
+    return;
+
   if (Relocs.size() < 2)
     return;
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26401.80252.patch
Type: text/x-patch
Size: 2195 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161205/ffc0d15a/attachment.bin>


More information about the llvm-commits mailing list