Index: test/tools/llvm-nm/format-sysv-section.test =================================================================== --- test/tools/llvm-nm/format-sysv-section.test +++ test/tools/llvm-nm/format-sysv-section.test @@ -1,7 +1,7 @@ -# RUN: yaml2obj %s > %t.o -# RUN: llvm-nm %t.o --format=sysv | FileCheck %s +# RUN: yaml2obj --docnum=1 %s > %t1.o +# RUN: llvm-nm %t1.o --format=sysv | FileCheck %s -!ELF +--- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB @@ -33,3 +33,27 @@ # CHECK-NEXT: symbol_absolute {{.*}}| |*ABS* # CHECK-NEXT: symbol_common {{.*}}| |*COM* # CHECK-NEXT: symbol_undefined {{.*}}| |*UND* + +## Here we have a symbol that belongs to a section with a broken name +## (sh_name offset goes past the end of the sections name string table). +## We test that we can still print a reasonable output and don't crash/assert. + +# RUN: yaml2obj --docnum=2 %s > %t2.o +# RUN: llvm-nm %t2.o --format=sysv | FileCheck %s --check-prefix=ERR + +# ERR: foo |0000000000000000| ? | NOTYPE|0000000000000000| | + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .broken + Type: SHT_PROGBITS + Flags: [ SHF_ALLOC, SHF_EXECINSTR ] + ShName: 0xffff +Symbols: + - Name: foo + Section: .broken