[PATCH] D82055: [DebugInfo] Explicitly permit addr_size = 0x02 when parsing DWARF data
Anatoly Trosinenko via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 18 00:30:50 PDT 2020
atrosinenko updated this revision to Diff 271594.
atrosinenko added a comment.
Unit test: fix backslash on Windows
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D82055/new/
https://reviews.llvm.org/D82055
Files:
llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h
llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
llvm/test/DebugInfo/Inputs/dwarfdump-16bit-addr.o
llvm/test/DebugInfo/dwarfdump-16bit-addr.test
Index: llvm/test/DebugInfo/dwarfdump-16bit-addr.test
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/dwarfdump-16bit-addr.test
@@ -0,0 +1,34 @@
+; Test that llvm-dwarfdump can handle DWARF32 v3 with addr_size = 0x02
+; Input object file was produced from source containing just "int x;" with
+; clang -target avr -gdwarf-3 -c dwarfdump-16bit-addr.c
+
+; REQUIRES: avr-registered-target
+; RUN: llvm-dwarfdump --debug-info %S/Inputs/dwarfdump-16bit-addr.o | FileCheck %s
+; RUN: llvm-dwarfdump --verify %S/Inputs/dwarfdump-16bit-addr.o
+
+; CHECK: Inputs/dwarfdump-16bit-addr.o: file format elf32-avr
+
+; CHECK: .debug_info contents:
+; CHECK: 0x00000000: Compile Unit: length = 0x00000032, format = DWARF32, version = 0x0003, abbr_offset = 0x0000, addr_size = 0x02 (next unit at 0x00000036)
+
+; CHECK: 0x0000000b: DW_TAG_compile_unit
+; CHECK: DW_AT_producer ("clang version 10.0.0-4ubuntu1 ")
+; CHECK: DW_AT_language (DW_LANG_C99)
+; CHECK: DW_AT_name ("dwarfdump-16bit-addr.c")
+; CHECK: DW_AT_stmt_list (0x00000000)
+; CHECK: DW_AT_comp_dir ("/tmp")
+
+; CHECK: 0x0000001e: DW_TAG_variable
+; CHECK: DW_AT_name ("x")
+; CHECK: DW_AT_type (0x0000002e "int")
+; CHECK: DW_AT_external (0x01)
+; CHECK: DW_AT_decl_file ("/tmp{{[/\\]}}dwarfdump-16bit-addr.c")
+; CHECK: DW_AT_decl_line (1)
+; CHECK: DW_AT_location (DW_OP_addr 0x0)
+
+; CHECK: 0x0000002e: DW_TAG_base_type
+; CHECK: DW_AT_name ("int")
+; CHECK: DW_AT_encoding (DW_ATE_signed)
+; CHECK: DW_AT_byte_size (0x02)
+
+; CHECK: 0x00000035: NULL
Index: llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp
@@ -133,7 +133,7 @@
ValidLength = DebugInfoData.isValidOffset(OffsetStart + Length + 3);
ValidVersion = DWARFContext::isSupportedVersion(Version);
- ValidAddrSize = AddrSize == 4 || AddrSize == 8;
+ ValidAddrSize = DWARFContext::isAddressSizeSupported(AddrSize);
if (!ValidLength || !ValidVersion || !ValidAddrSize || !ValidAbbrevOffset ||
!ValidType) {
Success = false;
Index: llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp
@@ -300,7 +300,7 @@
TypeOffset < getLength() + getUnitLengthFieldByteSize();
bool LengthOK = debug_info.isValidOffset(getNextUnitOffset() - 1);
bool VersionOK = DWARFContext::isSupportedVersion(getVersion());
- bool AddrSizeOK = getAddressByteSize() == 4 || getAddressByteSize() == 8;
+ bool AddrSizeOK = DWARFContext::isAddressSizeSupported(getAddressByteSize());
if (!LengthOK || !VersionOK || !AddrSizeOK || !TypeOffsetOK)
return false;
Index: llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h
===================================================================
--- llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h
+++ llvm/include/llvm/DebugInfo/DWARF/DWARFContext.h
@@ -362,6 +362,10 @@
return version == 2 || version == 3 || version == 4 || version == 5;
}
+ static bool isAddressSizeSupported(unsigned AddressSize) {
+ return AddressSize == 2 || AddressSize == 4 || AddressSize == 8;
+ }
+
std::shared_ptr<DWARFContext> getDWOContext(StringRef AbsolutePath);
const MCRegisterInfo *getRegisterInfo() const { return RegInfo.get(); }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D82055.271594.patch
Type: text/x-patch
Size: 3726 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200618/68f7d211/attachment.bin>
More information about the llvm-commits
mailing list