https://github.com/kusmour updated https://github.com/llvm/llvm-project/pull/79926
>From 9536c3990f83400d6ce1a8208ccd669dc38f4ebf Mon Sep 17 00:00:00 2001 From: Wanyi Ye <wa...@fb.com> Date: Mon, 29 Jan 2024 16:01:33 -0800 Subject: [PATCH] [llvm-gsymutil] Fix assert failure on FileEntry.Dir empty Summary: FileEntry.Dir can be empty if debug info only contains relative path. This caused an assertion failure when gsym segmentation is trying to copy a file entry with empty dir. As the fitst entry of StringTable is always empty (and is preserved), `StringOffsetMap` doesn't have key 0. Hence, `find(0)` returns `End` and `operator->()` fails the assertion Test Plan: ./bin/llvm-lit -sv llvm/test/tools/llvm-gsymutil/X86/elf-empty-dir.yaml --- llvm/lib/DebugInfo/GSYM/GsymCreator.cpp | 5 +- .../llvm-gsymutil/X86/elf-empty-dir.yaml | 108 ++++++++++++++++++ 2 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 llvm/test/tools/llvm-gsymutil/X86/elf-empty-dir.yaml diff --git a/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp b/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp index ee7b0efba5ea4..74138755090a4 100644 --- a/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp +++ b/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp @@ -55,7 +55,10 @@ uint32_t GsymCreator::copyFile(const GsymCreator &SrcGC, uint32_t FileIdx) { return 0; const FileEntry SrcFE = SrcGC.Files[FileIdx]; // Copy the strings for the file and then add the newly converted file entry. - uint32_t Dir = StrTab.add(SrcGC.StringOffsetMap.find(SrcFE.Dir)->second); + uint32_t Dir = + SrcFE.Dir == 0 + ? 0 + : StrTab.add(SrcGC.StringOffsetMap.find(SrcFE.Dir)->second); uint32_t Base = StrTab.add(SrcGC.StringOffsetMap.find(SrcFE.Base)->second); FileEntry DstFE(Dir, Base); return insertFileEntry(DstFE); diff --git a/llvm/test/tools/llvm-gsymutil/X86/elf-empty-dir.yaml b/llvm/test/tools/llvm-gsymutil/X86/elf-empty-dir.yaml new file mode 100644 index 0000000000000..6f6acf8800488 --- /dev/null +++ b/llvm/test/tools/llvm-gsymutil/X86/elf-empty-dir.yaml @@ -0,0 +1,108 @@ +## Test converting DWARF using relative path + +# RUN: yaml2obj %s -o %t +# RUN: llvm-gsymutil --convert %t -o %t.gsym --segment-size=100000 --num-threads=80 --quiet 2>&1 | FileCheck %s --check-prefix=CONVERT + +# CONVERT: Input file: {{.*\.yaml\.tmp}} +# CONVERT: Output file (x86_64): {{.*\.yaml\.tmp\.gsym}} +# CONVERT: Pruned 0 functions, ended with 1 total + +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_EXEC + Machine: EM_X86_64 +DWARF: + debug_str: + - '' + - main.cpp + - foo + debug_abbrev: + - ID: 0 + Table: + - Code: 0x1 + Tag: DW_TAG_compile_unit + Children: DW_CHILDREN_yes + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_language + Form: DW_FORM_udata + - Attribute: DW_AT_stmt_list + Form: DW_FORM_sec_offset + - Code: 0x2 + Tag: DW_TAG_subprogram + Children: DW_CHILDREN_no + Attributes: + - Attribute: DW_AT_name + Form: DW_FORM_strp + - Attribute: DW_AT_low_pc + Form: DW_FORM_addr + - Attribute: DW_AT_high_pc + Form: DW_FORM_addr + debug_info: + - Length: 0x27 + Version: 4 + AbbrevTableID: 0 + AbbrOffset: 0x0 + AddrSize: 8 + Entries: + - AbbrCode: 0x1 + Values: + - Value: 0x1 + - Value: 0x2 + - Value: 0x0 + - AbbrCode: 0x2 + Values: + - Value: 0xA + - Value: 0x1000 + - Value: 0x1050 + - AbbrCode: 0x0 + debug_line: + - Length: 66 + Version: 2 + PrologueLength: 31 + MinInstLength: 1 + DefaultIsStmt: 1 + LineBase: 251 + LineRange: 14 + OpcodeBase: 13 + StandardOpcodeLengths: [ 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1 ] + Files: + - Name: main.cpp + DirIdx: 0 + ModTime: 0 + Length: 0 + Opcodes: + - Opcode: DW_LNS_extended_op + ExtLen: 9 + SubOpcode: DW_LNE_set_address + Data: 4096 + - Opcode: DW_LNS_advance_line + SData: 9 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_advance_pc + Data: 16 + - Opcode: DW_LNS_advance_line + SData: 1 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_advance_line + SData: 1 + Data: 0 + - Opcode: DW_LNS_copy + Data: 0 + - Opcode: DW_LNS_advance_pc + Data: 64 + - Opcode: DW_LNS_advance_line + SData: 1 + Data: 0 + - Opcode: DW_LNS_extended_op + ExtLen: 1 + SubOpcode: DW_LNE_end_sequence + Data: 0 +... _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits