[PATCH] D16885: [mips] Extend MipsAsmParser class to handle %got(sym + const) expressions

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 4 07:17:31 PST 2016


atanasyan created this revision.
atanasyan added a reviewer: dsanders.
atanasyan added a subscriber: llvm-commits.
atanasyan set the repository for this revision to rL LLVM.
Herald added a reviewer: vkalintiris.
Herald added a subscriber: dsanders.

Now the parser supports `%got(sym)` expressions only but `%got(sym + const)` variant is also valid and accepted by GAS.

Repository:
  rL LLVM

http://reviews.llvm.org/D16885

Files:
  lib/Target/Mips/AsmParser/MipsAsmParser.cpp
  test/MC/Mips/got-rel-expr.s

Index: test/MC/Mips/got-rel-expr.s
===================================================================
--- /dev/null
+++ test/MC/Mips/got-rel-expr.s
@@ -0,0 +1,20 @@
+# Check that llvm-mc accepts arithmetic expression
+# as an argument of the %got relocation.
+
+# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s \
+# RUN:   | llvm-objdump -d -r - | FileCheck %s
+
+  .text
+foo:
+  lw      $t0,%got($loc+0x10004)($gp)
+# CHECK: 0:       8f 88 00 01     lw      $8, 1($gp)
+# CHECK:                  00000000:  R_MIPS_GOT16 $loc
+  addi    $t0,$t0,%lo($loc+0x10004)
+# CHECK: 4:       21 08 00 04     addi    $8, $8, 4
+# CHECK:                  00000004:  R_MIPS_LO16  $loc
+
+  .data
+$loc:
+  .word 0
+  .space 0x10000
+  .word 0
Index: lib/Target/Mips/AsmParser/MipsAsmParser.cpp
===================================================================
--- lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -4018,6 +4018,7 @@
       Val = MCE->getValue() & 0xffff;
       break;
     case MCSymbolRefExpr::VK_Mips_ABS_HI:
+    case MCSymbolRefExpr::VK_Mips_GOT:
       // Get the 2nd 16-bits. Also add 1 if bit 15 is 1, to compensate for low
       // 16 bits being negative.
       Val = ((MCE->getValue() + 0x8000) >> 16) & 0xffff;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16885.46914.patch
Type: text/x-patch
Size: 1287 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160204/42ab737c/attachment.bin>


More information about the llvm-commits mailing list