| # REQUIRES: x86 |
| ## The ELF spec says all symbols with STB_LOCAL binding precede the weak and |
| ## global symbols. If a local symbol is found in the non-local part of the |
| ## symbol table, make sure we have filled in all entries of InputFile::symbols. |
| ## Otherwise a null entry can lead to a null pointer dereference when iterating |
| ## over InputFile::symbols. |
| |
| # RUN: yaml2obj %s -o %t.o |
| # RUN: not ld.lld %t.o %t.o -o /dev/null 2>&1 | FileCheck %s |
| |
| # CHECK: error: {{.*}}.o: STB_LOCAL symbol (2) found at index >= .symtab's sh_info (1) |
| # CHECK-NEXT: error: {{.*}}.o: STB_LOCAL symbol (2) found at index >= .symtab's sh_info (1) |
| # CHECK-NEXT: error: duplicate symbol: _start |
| # CHECK-NEXT: >>> defined at {{.*}}.o:(.text+0x0) |
| # CHECK-NEXT: >>> defined at {{.*}}.o:(.text+0x0) |
| |
| # RUN: ld.lld --noinhibit-exec %t.o -o /dev/null 2>&1 | FileCheck %s --check-prefix=WARN |
| # WARN: warning: {{.*}}.o: STB_LOCAL symbol (2) found at index >= .symtab's sh_info (1) |
| |
| !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_X86_64 |
| Sections: |
| - Type: SHT_PROGBITS |
| Name: .text |
| Flags: [ SHF_ALLOC, SHF_EXECINSTR ] |
| Symbols: |
| - Name: _start |
| Section: .text |
| Binding: STB_GLOBAL |
| - Name: local |
| Section: .text |
| Binding: STB_LOCAL |