| // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -t -r --expand-relocs | FileCheck %s |
| |
| // Local symbol overriding section. |
| .section x1,"a",@progbits |
| .local x1 |
| .comm x1,4,4 |
| .long x1 // reloc: .bss + 0 |
| |
| // Section declared after local. Local symbol wins. |
| .local x2 |
| .comm x2,4,4 |
| .section x2,"a",@progbits |
| .long x2 // reloc: .bss + 4 |
| |
| // No overriding symbol. |
| .section x3,"a",@progbits |
| .long x3 // reloc: x3(section) + 0 |
| |
| // Global vs section. |
| .section x4,"a",@progbits |
| .long 0 |
| .globl x4 |
| .section foo, "a", @progbits |
| x4: |
| .long 0 |
| .long x4 // reloc: x4(global) + 0 |
| |
| // Global vs implicit section |
| .globl .data |
| .data: |
| .long 42 |
| .long .data // reloc: .data(global) + 0 |
| |
| // CHECK: Relocations [ |
| // CHECK: Section (4) .relax1 { |
| // CHECK: Relocation { |
| // CHECK: Offset: 0x0 |
| // CHECK: Type: R_X86_64_32 (10) |
| // CHECK: Symbol: .bss (3) |
| // CHECK: Addend: 0x0 |
| // CHECK: } |
| // CHECK: } |
| // CHECK: Section (7) .relax2 { |
| // CHECK: Relocation { |
| // CHECK: Offset: 0x0 |
| // CHECK: Type: R_X86_64_32 (10) |
| // CHECK: Symbol: .bss (3) |
| // CHECK: Addend: 0x4 |
| // CHECK: } |
| // CHECK: } |
| // CHECK: Section (9) .relax3 { |
| // CHECK: Relocation { |
| // CHECK: Offset: 0x0 |
| // CHECK: Type: R_X86_64_32 (10) |
| // CHECK: Symbol: x3 (4) |
| // CHECK: Addend: 0x0 |
| // CHECK: } |
| // CHECK: } |
| // CHECK: Section (12) .relafoo { |
| // CHECK: Relocation { |
| // CHECK: Offset: 0x4 |
| // CHECK: Type: R_X86_64_32 (10) |
| // CHECK: Symbol: x4 (6) |
| // CHECK: Addend: 0x0 |
| // CHECK: } |
| // CHECK: Relocation { |
| // CHECK: Offset: 0xC |
| // CHECK: Type: R_X86_64_32 (10) |
| // CHECK: Symbol: .data (5) |
| // CHECK: Addend: 0x0 |
| // CHECK: } |
| // CHECK: } |
| // CHECK: ] |
| // CHECK: Symbols [ |
| // CHECK: Symbol { |
| // CHECK: Name: (0) |
| // CHECK: Value: 0x0 |
| // CHECK: Size: 0 |
| // CHECK: Binding: Local (0x0) |
| // CHECK: Type: None (0x0) |
| // CHECK: Other: 0 |
| // CHECK: Section: Undefined (0x0) |
| // CHECK: } |
| // CHECK: Symbol { |
| // CHECK: Name: x1 (67) |
| // CHECK: Value: 0x0 |
| // CHECK: Size: 4 |
| // CHECK: Binding: Local (0x0) |
| // CHECK: Type: Object (0x1) |
| // CHECK: Other: 0 |
| // CHECK: Section: .bss (0x5) |
| // CHECK: } |
| // CHECK: Symbol { |
| // CHECK: Name: x2 (59) |
| // CHECK: Value: 0x4 |
| // CHECK: Size: 4 |
| // CHECK: Binding: Local (0x0) |
| // CHECK: Type: Object (0x1) |
| // CHECK: Other: 0 |
| // CHECK: Section: .bss (0x5) |
| // CHECK: } |
| // CHECK: Symbol { |
| // CHECK: Name: (0) |
| // CHECK: Value: 0x0 |
| // CHECK: Size: 0 |
| // CHECK: Binding: Local (0x0) |
| // CHECK: Type: Section (0x3) |
| // CHECK: Other: 0 |
| // CHECK: Section: .bss (0x5) |
| // CHECK: } |
| // CHECK: Symbol { |
| // CHECK: Name: (0) |
| // CHECK: Value: 0x0 |
| // CHECK: Size: 0 |
| // CHECK: Binding: Local (0x0) |
| // CHECK: Type: Section (0x3) |
| // CHECK: Other: 0 |
| // CHECK: Section: x3 (0x8) |
| // CHECK: } |
| // CHECK: Symbol { |
| // CHECK: Name: .data (37) |
| // CHECK: Value: 0x8 |
| // CHECK: Size: 0 |
| // CHECK: Binding: Global (0x1) |
| // CHECK: Type: None (0x0) |
| // CHECK: Other: 0 |
| // CHECK: Section: foo (0xB) |
| // CHECK: } |
| // CHECK: Symbol { |
| // CHECK: Name: x4 (43) |
| // CHECK: Value: 0x0 |
| // CHECK: Size: 0 |
| // CHECK: Binding: Global (0x1) |
| // CHECK: Type: None (0x0) |
| // CHECK: Other: 0 |
| // CHECK: Section: foo (0xB) |
| // CHECK: } |
| // CHECK: ] |