Index: test/NaCl/X86/negative-addend.ll |
diff --git a/test/NaCl/X86/negative-addend.ll b/test/NaCl/X86/negative-addend.ll |
new file mode 100644 |
index 0000000000000000000000000000000000000000..47ecd108648805e3d3c3073f2c69d71ded8ef882 |
--- /dev/null |
+++ b/test/NaCl/X86/negative-addend.ll |
@@ -0,0 +1,27 @@ |
+; RUN: pnacl-llc -mtriple=i386-unknown-nacl -filetype=obj %s -o - \ |
+; RUN: | llvm-objdump -r - | FileCheck %s -check-prefix=X8632 |
+; RUN: pnacl-llc -mtriple=x86_64-unknown-nacl -filetype=obj %s -o - \ |
+; RUN: | llvm-objdump -r - | FileCheck %s -check-prefix=X8664 |
+ |
+; Check that "add" works for negative values when used as a |
+; ConstantExpr in a global variable initializer. |
+; See: https://code.google.com/p/nativeclient/issues/detail?id=3548 |
+ |
+ |
+; @spacer and @var end up in the BSS section. |
+; @spacer is at offset 0. @var is at offset 4096 = 0x1000. |
+ |
+@spacer = internal global [4096 x i8] zeroinitializer |
+@var = internal global i32 zeroinitializer |
+ |
+@negative_offset = internal global i32 add |
+ (i32 ptrtoint (i32* @var to i32), i32 -8) |
+ |
+; Note that the addend 4294971384 below equals 0x100000ff8, where |
+; 0xff8 comes from subtracting 8 from the offset of @var. |
+ |
+; X8632: RELOCATION RECORDS |
+; X8632-NEXT: 0 R_386_32 .bss |
+ |
+; X8664: RELOCATION RECORDS |
+; X8664-NEXT: 0 R_X86_64_32 .bss+4294971384 |