-// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | elf-dump --dump-section-data | FileCheck %s
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -s -sr -t | FileCheck %s
-// Test that we produce a R_X86_64_32S or R_X86_64_32.
+// Test that we produce the correct relocation.
bar:
- movl $bar, %edx // R_X86_64_32
- movq $bar, %rdx // R_X86_64_32S
- movq $bar, bar(%rip) // R_X86_64_32S
- movl bar, %edx // R_X86_64_32S
- movq bar, %rdx // R_X86_64_32S
-.long bar // R_X86_64_32
-
-// CHECK: # Section 0x1
-// CHECK: (('sh_name', 0x1) # '.text'
-
-// CHECK: # Symbol 0x2
-// CHECK: (('st_name', 0x0) # ''
-// CHECK: ('st_bind', 0x0)
-// CHECK ('st_type', 0x3)
-// CHECK: ('st_other', 0x0)
-// CHECK: ('st_shndx', 0x1)
-
-// CHECK: # Relocation 0x0
-// CHECK-NEXT: (('r_offset', 0x1)
-// CHECK-NEXT: ('r_sym', 0x2)
-// CHECK-NEXT: ('r_type', 0xa)
-// CHECK-NEXT: ('r_addend',
-
-// CHECK: # Relocation 0x1
-// CHECK-NEXT: (('r_offset', 0x8)
-// CHECK-NEXT: ('r_sym', 0x2)
-// CHECK-NEXT: ('r_type', 0xb)
-// CHECK-NEXT: ('r_addend',
-
-// CHECK: # Relocation 0x2
-// CHECK-NEXT: (('r_offset', 0x13)
-// CHECK-NEXT: ('r_sym', 0x2)
-// CHECK-NEXT: ('r_type', 0xb)
-// CHECK-NEXT: ('r_addend',
-
-// CHECK: # Relocation 0x3
-// CHECK-NEXT: (('r_offset', 0x1a)
-// CHECK-NEXT: ('r_sym', 0x2)
-// CHECK-NEXT: ('r_type', 0xb)
-// CHECK-NEXT: ('r_addend',
-
-// CHECK: # Relocation 0x4
-// CHECK-NEXT: (('r_offset', 0x22)
-// CHECK-NEXT: ('r_sym', 0x2)
-// CHECK-NEXT: ('r_type', 0xb)
-// CHECK-NEXT: ('r_addend',
-
-// CHECK: # Relocation 0x5
-// CHECK-NEXT: (('r_offset', 0x26)
-// CHECK-NEXT: ('r_sym', 0x2)
-// CHECK-NEXT: ('r_type', 0xa)
-// CHECK-NEXT: ('r_addend',
+ movl $bar, %edx # R_X86_64_32
+ movq $bar, %rdx # R_X86_64_32S
+ movq $bar, bar(%rip) # R_X86_64_32S
+ movl bar, %edx # R_X86_64_32S
+ movq bar, %rdx # R_X86_64_32S
+.long bar # R_X86_64_32
+ leaq foo@GOTTPOFF(%rip), %rax # R_X86_64_GOTTPOFF
+ leaq foo@TLSGD(%rip), %rax # R_X86_64_TLSGD
+ leaq foo@TPOFF(%rax), %rax # R_X86_64_TPOFF32
+ leaq foo@TLSLD(%rip), %rdi # R_X86_64_TLSLD
+ leaq foo@dtpoff(%rax), %rcx # R_X86_64_DTPOFF32
+ pushq $bar
+ movq foo(%rip), %rdx
+ leaq foo-bar(%r14),%r14
+ addq $bar,%rax # R_X86_64_32S
+
+
+// CHECK: Section {
+// CHECK: Name: .rela.text
+// CHECK: Relocations [
+// CHECK-NEXT: 0x1 R_X86_64_32 .text
+// CHECK-NEXT: 0x8 R_X86_64_32S .text
+// CHECK-NEXT: 0x13 R_X86_64_32S .text
+// CHECK-NEXT: 0x1A R_X86_64_32S .text
+// CHECK-NEXT: 0x22 R_X86_64_32S .text
+// CHECK-NEXT: 0x26 R_X86_64_32 .text
+// CHECK-NEXT: 0x2D R_X86_64_GOTTPOFF foo 0xFFFFFFFFFFFFFFFC
+// CHECK-NEXT: 0x34 R_X86_64_TLSGD foo 0xFFFFFFFFFFFFFFFC
+// CHECK-NEXT: 0x3B R_X86_64_TPOFF32 foo 0x0
+// CHECK-NEXT: 0x42 R_X86_64_TLSLD foo 0xFFFFFFFFFFFFFFFC
+// CHECK-NEXT: 0x49 R_X86_64_DTPOFF32 foo 0x0
+// CHECK-NEXT: 0x4E R_X86_64_32S .text 0x0
+// CHECK-NEXT: 0x55 R_X86_64_PC32 foo 0xFFFFFFFFFFFFFFFC
+// CHECK-NEXT: 0x5C R_X86_64_PC32 foo 0x5C
+// CHECK-NEXT: 0x63 R_X86_64_32S .text 0x0
+// CHECK-NEXT: ]
+// CHECK-NEXT: }
+
+// CHECK: Symbol {
+// CHECK: Name: .text (0)
+// CHECK-NEXT: Value:
+// CHECK-NEXT: Size:
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: Section
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text (0x1)
+// CHECK-NEXT: }