[PATCH] D44205: [ELF] Prevent crash when reporting error messages if debug line cannot be parsed
James Henderson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 7 06:26:26 PST 2018
jhenderson updated this revision to Diff 137379.
jhenderson added a comment.
Return early as suggested.
Repository:
rLLD LLVM Linker
https://reviews.llvm.org/D44205
Files:
ELF/InputFiles.cpp
test/ELF/Inputs/undef-bad-debug.s
test/ELF/undef.s
Index: test/ELF/undef.s
===================================================================
--- test/ELF/undef.s
+++ test/ELF/undef.s
@@ -2,9 +2,10 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/undef.s -o %t2.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/undef-debug.s -o %t3.o
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/undef-bad-debug.s -o %t4.o
# RUN: llvm-ar rc %t2.a %t2.o
-# RUN: not ld.lld %t.o %t2.a %t3.o -o %t.exe 2>&1 | FileCheck %s
-# RUN: not ld.lld -pie %t.o %t2.a %t3.o -o %t.exe 2>&1 | FileCheck %s
+# RUN: not ld.lld %t.o %t2.a %t3.o %t4.o -o %t.exe 2>&1 | FileCheck %s
+# RUN: not ld.lld -pie %t.o %t2.a %t3.o %t4.o -o %t.exe 2>&1 | FileCheck %s
# CHECK: error: undefined symbol: foo
# CHECK: >>> referenced by undef.s
@@ -33,6 +34,9 @@
# CHECK: >>> referenced by undef-debug.s:11 (dir{{/|\\}}undef-debug.s:11)
# CHECK: >>> {{.*}}.o:(.text.2+0x0)
+# CHECK: error: undefined symbol: zed6
+# CHECK: >>> referenced by {{.*}}tmp4.o:(.text+0x0)
+
# RUN: not ld.lld %t.o %t2.a -o %t.exe -no-demangle 2>&1 | \
# RUN: FileCheck -check-prefix=NO-DEMANGLE %s
# NO-DEMANGLE: error: undefined symbol: _Z3fooi
Index: test/ELF/Inputs/undef-bad-debug.s
===================================================================
--- test/ELF/Inputs/undef-bad-debug.s
+++ test/ELF/Inputs/undef-bad-debug.s
@@ -0,0 +1,44 @@
+.section .text,"ax"
+sym:
+ .quad zed6
+
+.section .debug_info,"", at progbits
+ .long .Lcu_end - .Lcu_start # Length of Unit
+.Lcu_start:
+ .short 4 # DWARF version number
+ .long .Lsection_abbrev # Offset Into Abbrev. Section
+ .byte 8 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x79 DW_TAG_compile_unit
+ .byte 2 # Abbrev [2] 0x2a:0x15 DW_TAG_variable
+ .long .Linfo_string # DW_AT_name
+ # DW_AT_external
+ .byte 1 # DW_AT_decl_file
+ .byte 3 # DW_AT_decl_line
+ .byte 0 # End Of Children Mark
+.Lcu_end:
+
+.section .debug_abbrev,"", at progbits
+.Lsection_abbrev:
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 1 # DW_CHILDREN_yes
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 2 # Abbreviation Code
+ .byte 52 # DW_TAG_variable
+ .byte 0 # DW_CHILDREN_no
+ .byte 3 # DW_AT_name
+ .byte 14 # DW_FORM_strp
+ .byte 63 # DW_AT_external
+ .byte 25 # DW_FORM_flag_present
+ .byte 58 # DW_AT_decl_file
+ .byte 11 # DW_FORM_data1
+ .byte 59 # DW_AT_decl_line
+ .byte 11 # DW_FORM_data1
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+
+.section .debug_str,"MS", at progbits,1
+.Linfo_string:
+ .asciz "sym"
Index: ELF/InputFiles.cpp
===================================================================
--- ELF/InputFiles.cpp
+++ ELF/InputFiles.cpp
@@ -126,6 +126,8 @@
// CU (object file), so offset is always 0.
const DWARFDebugLine::LineTable *LT =
DwarfLine->getOrParseLineTable(LineData, 0, Dwarf, nullptr);
+ if (!LT)
+ return;
// Return if there is no debug information about CU available.
if (!Dwarf.getNumCompileUnits())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D44205.137379.patch
Type: text/x-patch
Size: 3833 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180307/26292bb6/attachment.bin>
More information about the llvm-commits
mailing list