summaryrefslogtreecommitdiffstats
path: root/lldb/test/Shell/SymbolFile
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2019-11-29 13:28:25 +0200
committerMartin Storsjö <martin@martin.st>2019-12-02 22:42:00 +0200
commit7d019d1a3be252a885e8db1ee7af11c90b450d38 (patch)
tree42724473f8feba2e6af38b6d60a57bfa0563663c /lldb/test/Shell/SymbolFile
parentafd5d912812e6f2ea99c8890676d47a01bbcfbb1 (diff)
downloadbcm5719-llvm-7d019d1a3be252a885e8db1ee7af11c90b450d38.tar.gz
bcm5719-llvm-7d019d1a3be252a885e8db1ee7af11c90b450d38.zip
[LLDB] Set the right address size on output DataExtractors from ObjectFile
If filling in a DataExtractor from an ObjectFile, e.g. via the ReadSectionData method, the output DataExtractor gets the address size from the m_data member. ObjectFile's m_data member is initialized without knowledge about the address size (so the address size is set based on the host's sizeof(void*), and at that point within ObjectFile's constructor, virtual methods implemented in subclasses (like GetAddressByteSize()) can't be called, therefore fix it up when filling in external DataExtractors. This makes sure that line tables from executables with a different address size are parsed properly; previously this tripped up DWARFDebugLine::LineTable::parse for 32 bit executables on a 64 bit host, as the address size in the line table (4) didn't match the one set in the DWARFDataExtractor. Differential Revision: https://reviews.llvm.org/D70848
Diffstat (limited to 'lldb/test/Shell/SymbolFile')
-rw-r--r--lldb/test/Shell/SymbolFile/DWARF/win-i386-line-table.s55
1 files changed, 55 insertions, 0 deletions
diff --git a/lldb/test/Shell/SymbolFile/DWARF/win-i386-line-table.s b/lldb/test/Shell/SymbolFile/DWARF/win-i386-line-table.s
new file mode 100644
index 00000000000..f8c500a39f4
--- /dev/null
+++ b/lldb/test/Shell/SymbolFile/DWARF/win-i386-line-table.s
@@ -0,0 +1,55 @@
+# Test that lldb can read a line table for an architecture with a different
+# address size than the one that of the host.
+
+# REQUIRES: lld, x86
+
+# RUN: llvm-mc -triple i686-windows-gnu %s -filetype=obj > %t.o
+# RUN: lld-link %t.o -out:%t.exe -debug:dwarf -entry:entry -subsystem:console -lldmingw
+# RUN: %lldb %t.exe -o "image dump line-table -v win-i386-line-table.c" -b | FileCheck %s
+
+# CHECK: Line table for win-i386-line-table.c in `win-i386-line-table.s.tmp.exe
+# CHECK: 0x00401000: /path/to/src/win-i386-line-table.c:2:1
+# CHECK: 0x00401001: /path/to/src/win-i386-line-table.c:2:1
+
+ .text
+ .file "win-i386-line-table.c"
+ .globl _entry # -- Begin function entry
+_entry: # @entry
+ .file 1 "/path/to/src" "win-i386-line-table.c"
+ .loc 1 1 0 # win-i386-line-table.c:1:0
+ .cfi_sections .debug_frame
+ .cfi_startproc
+ .loc 1 2 1 prologue_end # win-i386-line-table.c:2:1
+ retl
+ .cfi_endproc
+ # -- End function
+ .section .debug_str,"dr"
+Linfo_string1:
+ .asciz "win-i386-line-table.c"
+ .section .debug_abbrev,"dr"
+Lsection_abbrev:
+ .byte 1 # Abbreviation Code
+ .byte 17 # DW_TAG_compile_unit
+ .byte 1 # DW_CHILDREN_yes
+ .byte 3 # DW_AT_name
+ .byte 14 # DW_FORM_strp
+ .byte 16 # DW_AT_stmt_list
+ .byte 23 # DW_FORM_sec_offset
+ .byte 0 # EOM(1)
+ .byte 0 # EOM(2)
+ .byte 0 # EOM(3)
+ .section .debug_info,"dr"
+Lsection_info:
+Lcu_begin0:
+ .long Ldebug_info_end0-Ldebug_info_start0 # Length of Unit
+Ldebug_info_start0:
+ .short 4 # DWARF version number
+ .secrel32 Lsection_abbrev # Offset Into Abbrev. Section
+ .byte 4 # Address Size (in bytes)
+ .byte 1 # Abbrev [1] 0xb:0x2d DW_TAG_compile_unit
+ .secrel32 Linfo_string1 # DW_AT_name
+ .secrel32 Lline_table_start0 # DW_AT_stmt_list
+ .byte 0 # End Of Children Mark
+Ldebug_info_end0:
+ .section .debug_line,"dr"
+Lline_table_start0:
OpenPOWER on IntegriCloud