# 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