| ## Test that llvm-objdump can dump dynamic symbols. |
| # RUN: yaml2obj --docnum=1 %s -o %t1 |
| # RUN: llvm-objdump --dynamic-syms %t1 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=DYNSYM |
| # RUN: llvm-objdump -T %t1 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=DYNSYM |
| |
| # DYNSYM:{{.*}}file format elf64-x86-64 |
| # DYNSYM-EMPTY: |
| # DYNSYM-NEXT:DYNAMIC SYMBOL TABLE: |
| # DYNSYM-NEXT:0000000000000000 l DO .data 0000000000000000 localsym |
| # DYNSYM-NEXT:0000000000000000 g DO .data 0000000000000000 globalsym |
| # DYNSYM-NEXT:0000000000000000 u DO .data 0000000000000000 uniqueglobalsym |
| # DYNSYM-NEXT:0000000000000000 w DO .data 0000000000000000 weaksym |
| # DYNSYM-NEXT:0000000000000000 g Df .data 0000000000000000 filesym |
| # DYNSYM-NEXT:0000000000000000 g DF .data 0000000000000000 funcsym |
| # DYNSYM-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .data |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_WRITE ] |
| DynamicSymbols: |
| - Name: localsym |
| Type: STT_OBJECT |
| Section: .data |
| Binding: STB_LOCAL |
| - Name: globalsym |
| Type: STT_OBJECT |
| Section: .data |
| Binding: STB_GLOBAL |
| - Name: uniqueglobalsym |
| Type: STT_OBJECT |
| Section: .data |
| Binding: STB_GNU_UNIQUE |
| - Name: weaksym |
| Type: STT_OBJECT |
| Section: .data |
| Binding: STB_WEAK |
| - Name: filesym |
| Type: STT_FILE |
| Section: .data |
| Binding: STB_GLOBAL |
| - Name: funcsym |
| Type: STT_FUNC |
| Section: .data |
| Binding: STB_GLOBAL |
| |
| ## Test dumping ELF files with no .dynsym section. |
| # RUN: yaml2obj --docnum=2 %s -o %t2 |
| # RUN: llvm-objdump --dynamic-syms %t2 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=NODYNSYM |
| # RUN: llvm-objdump -T %t2 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=NODYNSYM |
| |
| # NODYNSYM:DYNAMIC SYMBOL TABLE: |
| # NODYNSYM-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| |
| ## Test dumping ELF files with logically empty .dynsym section (only has a 0-index NULL symbol). |
| # RUN: yaml2obj --docnum=3 %s -o %t3 |
| # RUN: llvm-objdump --dynamic-syms %t3 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=ONLY-NULL |
| # RUN: llvm-objdump -T %t3 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=ONLY-NULL |
| |
| # ONLY-NULL:DYNAMIC SYMBOL TABLE: |
| # ONLY-NULL-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| DynamicSymbols: [] |
| |
| ## Test dumping ELF files with truly empty .dynsym section (size of .dynsym section is 0). |
| # RUN: yaml2obj --docnum=4 %s -o %t4 |
| # RUN: llvm-objdump --dynamic-syms %t4 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=EMPTY |
| # RUN: llvm-objdump -T %t4 | \ |
| # RUN: FileCheck %s --match-full-lines --strict-whitespace --check-prefix=EMPTY |
| |
| # EMPTY:DYNAMIC SYMBOL TABLE: |
| # EMPTY-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .dynsym |
| Type: SHT_DYNSYM |
| Size: 0 |