| # RUN: yaml2obj --docnum=1 %s -o %t1 |
| # RUN: llvm-symbolizer --obj=%t1 0 1 2 | FileCheck %s |
| |
| ## The local symbol has no preceding STT_FILE. Its filename is unavailable. |
| # CHECK: local |
| # CHECK-NEXT: ??:0:0 |
| # CHECK-EMPTY: |
| |
| ## All local symbols precede all non-local symbols. When there are multiple |
| ## STT_FILE symbols, we cannot tell which file defines the non-local symbol in |
| ## question. We could tell if there is only one STT_FILE but in reality there |
| ## are always more than one file, so implementing the special case is not useful. |
| # CHECK-NEXT: global |
| # CHECK-NEXT: ??:0:0 |
| # CHECK-EMPTY: |
| # CHECK-NEXT: weak |
| # CHECK-NEXT: ??:0:0 |
| # CHECK-EMPTY: |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| Size: 3 |
| Symbols: |
| - Name: local |
| Section: .text |
| Value: 0 |
| - Name: 1.c |
| Type: STT_FILE |
| Index: SHN_ABS |
| - Name: global |
| Binding: STB_GLOBAL |
| Section: .text |
| Value: 1 |
| - Name: weak |
| Binding: STB_WEAK |
| Section: .text |
| Value: 2 |
| |
| ## If st_name of the STT_FILE symbols is invalid, the symbol name is lost as well. |
| ## TODO Keep the symbol name. |
| # RUN: yaml2obj --docnum=2 %s -o %t2 |
| # RUN: llvm-symbolizer --obj=%t2 0 0 2>&1 | FileCheck %s --check-prefix=CHECK2 |
| |
| # CHECK2: error reading file: st_name (0xffff) is past the end of the string table of size |
| # CHECK2-NEXT: ?? |
| # CHECK2-NEXT: ??:0:0 |
| # CHECK2-EMPTY: |
| # CHECK2-NEXT: ?? |
| # CHECK2-NEXT: ??:0:0 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| Size: 1 |
| Symbols: |
| - StName: 0xffff |
| Type: STT_FILE |
| Index: SHN_ABS |
| - Name: local |
| Section: .text |