[PATCH] D79061: [ELF] --gdb-index: support .debug_loclists
Fangrui Song via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 28 19:59:06 PDT 2020
MaskRay created this revision.
MaskRay added reviewers: dblaikie, grimar.
Herald added subscribers: llvm-commits, arphaman, arichardson, aprantl, emaste.
Herald added a reviewer: espindola.
Herald added a project: LLVM.
--gdb-index currently crashes when reading a translation unit with
DWARF v5 .debug_loclists . Call stack:
lld/ELF/DWARF.cpp LLDDwarfObj<ELFT>::find (sec.sec is nullptr)
DWARFDataExtractor.cpp DWARFDataExtractor::getRelocatedValue
...
SyntheticSections.cpp readAddressAreas
This patch adds support for .debug_loclists
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D79061
Files:
lld/ELF/DWARF.cpp
lld/ELF/DWARF.h
lld/test/ELF/gdb-index-loclists.s
Index: lld/test/ELF/gdb-index-loclists.s
===================================================================
--- /dev/null
+++ lld/test/ELF/gdb-index-loclists.s
@@ -0,0 +1,37 @@
+# REQUIRES: x86
+## Test that we support DWARF v5 .debug_loclists
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64 %s -o %t.o
+# RUN: ld.lld --gdb-index %t.o -o /dev/null
+
+.section .debug_abbrev,"", at progbits
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 0 # DW_CHILDREN_no
+ .ascii "\214\001" # DW_AT_loclists_base
+ .byte 23 # DW_FORM_sec_offset
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0
+
+.section .debug_info,"", at progbits
+.Lcu_begin0:
+ .long .Lcu_end0-.Lcu_begin0-4 # Length of Unit
+ .short 5 # DWARF version number
+ .byte 1 # DWARF Unit Type
+ .byte 8 # Address Size
+ .long 0 # Offset Into Abbrev. Section
+ .byte 1 # Abbrev [1] DW_TAG_compile_unit
+ .long .Lloclists_table_base0 # DW_AT_loclists_base
+.Lcu_end0:
+
+.section .debug_loclists,"", at progbits
+ .long .Ldebug_loclist_table_end0-.Ldebug_loclist_table_start0 # Length
+.Ldebug_loclist_table_start0:
+ .short 5 # Version
+ .byte 8 # Address size
+ .byte 0 # Segment selector size
+ .long 0 # Offset entry count
+.Lloclists_table_base0:
+ .byte 0 # DW_LLE_end_of_list
+.Ldebug_loclist_table_end0:
Index: lld/ELF/DWARF.h
===================================================================
--- lld/ELF/DWARF.h
+++ lld/ELF/DWARF.h
@@ -32,6 +32,10 @@
f(infoSection);
}
+ const llvm::DWARFSection &getLoclistsSection() const override {
+ return loclistsSection;
+ }
+
const llvm::DWARFSection &getRangesSection() const override {
return rangesSection;
}
@@ -81,6 +85,7 @@
LLDDWARFSection gnuPubnamesSection;
LLDDWARFSection gnuPubtypesSection;
LLDDWARFSection infoSection;
+ LLDDWARFSection loclistsSection;
LLDDWARFSection rangesSection;
LLDDWARFSection rnglistsSection;
LLDDWARFSection strOffsetsSection;
Index: lld/ELF/DWARF.cpp
===================================================================
--- lld/ELF/DWARF.cpp
+++ lld/ELF/DWARF.cpp
@@ -36,6 +36,7 @@
.Case(".debug_gnu_pubnames", &gnuPubnamesSection)
.Case(".debug_gnu_pubtypes", &gnuPubtypesSection)
.Case(".debug_info", &infoSection)
+ .Case(".debug_loclists", &loclistsSection)
.Case(".debug_ranges", &rangesSection)
.Case(".debug_rnglists", &rnglistsSection)
.Case(".debug_str_offsets", &strOffsetsSection)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D79061.260822.patch
Type: text/x-patch
Size: 2789 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200429/5d49e357/attachment.bin>
More information about the llvm-commits
mailing list