summaryrefslogtreecommitdiff
path: root/test/MC
diff options
context:
space:
mode:
authorJim Grosbach <grosbach@apple.com>2012-09-26 21:27:45 +0000
committerJim Grosbach <grosbach@apple.com>2012-09-26 21:27:45 +0000
commitb7abea08409d4f15063b25e025f160a5469efd54 (patch)
tree6577a96f00807c9e4b8f0ca319ba823a3a8894ad /test/MC
parent2c79ecbd704c656178ffa43d5a58ebe3ca188b40 (diff)
downloadllvm-b7abea08409d4f15063b25e025f160a5469efd54.tar.gz
llvm-b7abea08409d4f15063b25e025f160a5469efd54.tar.bz2
llvm-b7abea08409d4f15063b25e025f160a5469efd54.tar.xz
X86_32: Large Symbol+Offset relocations.
If the offset is more than 24-bits, it won't fit in a scattered relocation offset field, so we fall back to using a non-scattered relocation. rdar://12358909 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164724 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/MC')
-rw-r--r--test/MC/MachO/i386-large-relocations.s36
1 files changed, 36 insertions, 0 deletions
diff --git a/test/MC/MachO/i386-large-relocations.s b/test/MC/MachO/i386-large-relocations.s
new file mode 100644
index 0000000000..e5a1cfb2c5
--- /dev/null
+++ b/test/MC/MachO/i386-large-relocations.s
@@ -0,0 +1,36 @@
+// RUN: llvm-mc -triple i386-apple-darwin10 %s -filetype=obj -o - | macho-dump | FileCheck %s
+
+.space 0x1ed280
+ .section __DATA,__const
+ .align 4
+.space 0x5181020
+_foo:
+ .long _bar
+ .long 0
+ .long _bar+8
+ .long _bar+24
+ .long 0
+ .long _bar+16
+
+.zerofill __DATA,__bss,__dummy,0x5d780
+.zerofill __DATA,__bss,_bar,48,4
+
+// Normally scattered relocations are used for sym+offset expressions. When
+// the value exceeds 24-bits, however, it's outside what MachO can encode,
+// so the assembler falls back to non-scattered relocations.
+// rdar://12358909
+
+// CHECK: ('_relocations', [
+// CHECK: # Relocation 0
+// CHECK: (('word-0', 0x5181034),
+// CHECK: ('word-1', 0x4000003)),
+// CHECK: # Relocation 1
+// CHECK: (('word-0', 0x518102c),
+// CHECK: ('word-1', 0x4000003)),
+// CHECK: # Relocation 2
+// CHECK: (('word-0', 0x5181028),
+// CHECK: ('word-1', 0x4000003)),
+// CHECK: # Relocation 3
+// CHECK: (('word-0', 0x5181020),
+// CHECK: ('word-1', 0x4000003)),
+// CHECK: ])