| ## Check we are able to handle SHT_GNU_verneed sections. |
| |
| # RUN: yaml2obj --docnum=1 %s -o %t1 |
| # RUN: llvm-readobj -V %t1 | FileCheck %s |
| |
| # CHECK: VersionRequirements [ |
| # CHECK-NEXT: Dependency { |
| # CHECK-NEXT: Version: 1 |
| # CHECK-NEXT: Count: 2 |
| # CHECK-NEXT: FileName: dso.so.0 |
| # CHECK-NEXT: Entries [ |
| # CHECK-NEXT: Entry { |
| # CHECK-NEXT: Hash: 1937 |
| # CHECK-NEXT: Flags [ (0xA) |
| # CHECK-NEXT: Weak (0x2) |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Index: 3 |
| # CHECK-NEXT: Name: v1 |
| # CHECK-NEXT: } |
| # CHECK-NEXT: Entry { |
| # CHECK-NEXT: Hash: 1938 |
| # CHECK-NEXT: Flags [ (0xB) |
| # CHECK-NEXT: Base (0x1) |
| # CHECK-NEXT: Weak (0x2) |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Index: 4 |
| # CHECK-NEXT: Name: v2 |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| # CHECK-NEXT: Dependency { |
| # CHECK-NEXT: Version: 1 |
| # CHECK-NEXT: Count: 1 |
| # CHECK-NEXT: FileName: dso.so.1 |
| # CHECK-NEXT: Entries [ |
| # CHECK-NEXT: Entry { |
| # CHECK-NEXT: Hash: 1939 |
| # CHECK-NEXT: Flags [ (0xC) |
| # CHECK-NEXT: Info (0x4) |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: Index: 2 |
| # CHECK-NEXT: Name: v3 |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ] |
| # CHECK-NEXT: } |
| # CHECK-NEXT: ] |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Entry: 0x0000000000201000 |
| Sections: |
| - Name: .gnu.version_r |
| Type: SHT_GNU_verneed |
| Flags: [ SHF_ALLOC ] |
| Address: 0x0000000000200250 |
| Link: .dynstr |
| AddressAlign: 0x0000000000000004 |
| Info: 0x0000000000000002 |
| Dependencies: |
| - Version: 1 |
| File: dso.so.0 |
| Entries: |
| - Name: v1 |
| Hash: 1937 |
| Flags: 10 |
| Other: 3 |
| - Name: v2 |
| Hash: 1938 |
| Flags: 11 |
| Other: 4 |
| - Version: 1 |
| File: dso.so.1 |
| Entries: |
| - Name: v3 |
| Hash: 1939 |
| Flags: 12 |
| Other: 2 |
| DynamicSymbols: |
| - Name: f1 |
| Binding: STB_GLOBAL |
| |
| ## Check we can use "Content" to describe the content. |
| |
| # RUN: yaml2obj --docnum=2 %s -o %t2 |
| # RUN: llvm-readobj --sections --section-data %t2 | FileCheck %s --check-prefix=CONTENT |
| |
| # CONTENT: Name: .gnu.version_r |
| # CONTENT-NEXT: Type: SHT_GNU_verneed |
| # CONTENT-NEXT: Flags [ (0x2) |
| # CONTENT-NEXT: SHF_ALLOC (0x2) |
| # CONTENT-NEXT: ] |
| # CONTENT-NEXT: Address: 0x0 |
| # CONTENT-NEXT: Offset: 0x40 |
| # CONTENT-NEXT: Size: 3 |
| # CONTENT-NEXT: Link: 0 |
| # CONTENT-NEXT: Info: 1 |
| # CONTENT-NEXT: AddressAlignment: 0 |
| # CONTENT-NEXT: EntrySize: 0 |
| # CONTENT-NEXT: SectionData ( |
| # CONTENT-NEXT: 0000: 112233 |
| # CONTENT-NEXT: ) |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .gnu.version_r |
| Type: SHT_GNU_verneed |
| Flags: [ SHF_ALLOC ] |
| Info: 0x1 |
| Content: "112233" |
| |
| ## Check we can omit "Content" and "Dependencies" fields to produce an empty SHT_GNU_verneed section. |
| |
| # RUN: yaml2obj --docnum=3 %s -o %t3 |
| # RUN: llvm-readelf --sections %t3 | FileCheck %s --check-prefix=NO-PROPS |
| |
| # NO-PROPS: [Nr] Name Type Address Off Size |
| # NO-PROPS: [ 1] .gnu.version_r VERNEED 0000000000000000 000040 000000 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .gnu.version_r |
| Type: SHT_GNU_verneed |
| Flags: [ SHF_ALLOC ] |
| Info: 0x0 |
| |
| ## Check we can't use both "Dependencies" and "Content" together. |
| |
| # RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=BOTH |
| |
| # BOTH: error: SHT_GNU_verneed: "Dependencies" and "Content" can't be used together |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .gnu.version_r |
| Type: SHT_GNU_verneed |
| Flags: [ SHF_ALLOC ] |
| Info: 0x0 |
| Content: "" |
| Dependencies: [] |