aboutsummaryrefslogtreecommitdiff
path: root/test/MC
diff options
context:
space:
mode:
authorSimon Atanasyan <simon@atanasyan.com>2017-09-21 14:04:53 +0000
committerSimon Atanasyan <simon@atanasyan.com>2017-09-21 14:04:53 +0000
commitcff5a9f329b7914580d9599a917db1ddcd562f73 (patch)
tree8b6be0b0c388a38ef683a581f0b3fa31fdd84fc1 /test/MC
parentfdc1645b20c6235bb359b686d8a5917a62fe9212 (diff)
downloadllvm-cff5a9f329b7914580d9599a917db1ddcd562f73.tar.gz
[mips] Implement generation of relocations "chains" used by N32 ABI
In case of using a "nested" relocation expressions like this `%hi(%neg(%gp_rel()))`, N32 ABI requires generation of three consecutive relocations. That differs from the N64 ABI case where all relocations are packed into the single relocation record. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313879 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r--test/MC/Mips/elf-N32.s22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/MC/Mips/elf-N32.s b/test/MC/Mips/elf-N32.s
new file mode 100644
index 00000000000..34a0cd0f8be
--- /dev/null
+++ b/test/MC/Mips/elf-N32.s
@@ -0,0 +1,22 @@
+// Check generation of N32 ABI relocations.
+
+// RUN: llvm-mc -filetype=obj -triple=mips64-linux-gnu -mcpu=mips3 \
+// RUN: -target-abi=n32 %s -o - | llvm-readobj -r | FileCheck %s
+
+// CHECK: Relocations [
+// CHECK-NEXT: Section (3) .rela.text {
+// CHECK-NEXT: 0x0 R_MIPS_GPREL16 foo 0x4
+// CHECK-NEXT: 0x0 R_MIPS_SUB - 0x0
+// CHECK-NEXT: 0x0 R_MIPS_HI16 - 0x0
+// CHECK-NEXT: 0x4 R_MIPS_GPREL16 foo 0x4
+// CHECK-NEXT: 0x4 R_MIPS_SUB - 0x0
+// CHECK-NEXT: 0x4 R_MIPS_LO16 - 0x0
+// CHECK-NEXT: }
+
+ .globl foo
+ .ent foo
+foo:
+ lui $gp, %hi(%neg(%gp_rel(foo+4)))
+ addiu $gp, $gp, %lo(%neg(%gp_rel(foo+4)))
+ daddu $gp, $gp, $25
+ .end foo