| // REQUIRES: x86 |
| // RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t |
| // RUN: ld.lld %t -o %t2 |
| // RUN: llvm-readobj -symbols -sections %t2 | FileCheck %s |
| |
| .type _start, @function |
| .globl _start |
| _start: |
| |
| .type foo, @object |
| .weak foo |
| foo: |
| |
| .type bar, @object |
| .weak bar |
| .long bar |
| |
| .section foobar,"a",@nobits,unique,1 |
| .globl zed |
| zed: |
| .long 0 |
| .globl zed2 |
| zed2: |
| .long 0 |
| |
| .section foobar,"a",@nobits,unique,2 |
| .globl zed3 |
| .size zed3, 4 |
| zed3: |
| |
| .globl abs |
| abs = 0x123 |
| |
| .comm common,4,4 |
| |
| .global protected |
| .protected protected |
| protected: |
| |
| .global hidden |
| .hidden hidden |
| hidden: |
| |
| .global internal |
| .internal internal |
| internal: |
| |
| // CHECK: Name: foobar |
| // CHECK-NEXT: Type: SHT_NOBITS |
| // CHECK-NEXT: Flags [ |
| // CHECK-NEXT: SHF_ALLOC |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Address: 0x200158 |
| |
| // CHECK: Name: .text |
| // CHECK-NEXT: Type: SHT_PROGBITS |
| // CHECK-NEXT: Flags [ |
| // CHECK-NEXT: SHF_ALLOC |
| // CHECK-NEXT: SHF_EXECINSTR |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Address: 0x201000 |
| |
| // CHECK: Name: .bss |
| // CHECK-NEXT: Type: SHT_NOBITS |
| // CHECK-NEXT: Flags [ |
| // CHECK-NEXT: SHF_ALLOC |
| // CHECK-NEXT: SHF_WRITE |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Address: 0x202000 |
| // CHECK-NEXT: Offset: |
| // CHECK-NEXT: Size: 4 |
| |
| // CHECK: Symbols [ |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: (0) |
| // CHECK-NEXT: Value: 0x0 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Local (0x0) |
| // CHECK-NEXT: Type: None (0x0) |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: Undefined (0x0) |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: hidden |
| // CHECK-NEXT: Value: 0x200160 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Local |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other [ (0x2) |
| // CHECK-NEXT: STV_HIDDEN |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Section: foobar |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: internal |
| // CHECK-NEXT: Value: 0x200160 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Local |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other [ (0x1) |
| // CHECK-NEXT: STV_INTERNAL |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Section: foobar |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: _start |
| // CHECK-NEXT: Value: 0x201000 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Global (0x1) |
| // CHECK-NEXT: Type: Function |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: .text |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: abs |
| // CHECK-NEXT: Value: 0x123 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Global |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: Absolute |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: bar |
| // CHECK-NEXT: Value: 0x0 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Weak (0x2) |
| // CHECK-NEXT: Type: Object (0x1) |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: Undefined (0x0) |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: common |
| // CHECK-NEXT: Value: 0x202000 |
| // CHECK-NEXT: Size: 4 |
| // CHECK-NEXT: Binding: Global |
| // CHECK-NEXT: Type: Object |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: .bss |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: foo |
| // CHECK-NEXT: Value: 0x201000 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Weak (0x2) |
| // CHECK-NEXT: Type: Object |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: .text |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: protected |
| // CHECK-NEXT: Value: 0x200160 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Global |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other [ (0x3) |
| // CHECK-NEXT: STV_PROTECTED |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: Section: foobar |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: zed |
| // CHECK-NEXT: Value: 0x200158 |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Global (0x1) |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: foobar |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: zed2 |
| // CHECK-NEXT: Value: 0x20015C |
| // CHECK-NEXT: Size: 0 |
| // CHECK-NEXT: Binding: Global |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: foobar |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Symbol { |
| // CHECK-NEXT: Name: zed3 |
| // CHECK-NEXT: Value: 0x200160 |
| // CHECK-NEXT: Size: 4 |
| // CHECK-NEXT: Binding: Global |
| // CHECK-NEXT: Type: None |
| // CHECK-NEXT: Other: 0 |
| // CHECK-NEXT: Section: foobar |
| // CHECK-NEXT: } |
| // CHECK-NEXT: ] |