|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
ac6df7fc |
| 08-Jul-2022 |
Pedro Alves <[email protected]> |
llvm-dwarfdump: Don't crash if DW_AT_{decl,call}_{file,line} uses signed form
The DWARF spec says:
Any debugging information entry representing the declaration of an object, module, subprogram or
llvm-dwarfdump: Don't crash if DW_AT_{decl,call}_{file,line} uses signed form
The DWARF spec says:
Any debugging information entry representing the declaration of an object, module, subprogram or type may have DW_AT_decl_file, DW_AT_decl_line and DW_AT_decl_column attributes, each of whose value is an unsigned integer ^^^^^^^^ constant.
If however, a producer happens to emit DW_AT_decl_file / DW_AT_decl_line using a signed integer form, llvm-dwarfdump crashes, like so:
(... snip ...) 0x000000b4: DW_TAG_structure_type DW_AT_name ("test_struct") DW_AT_byte_size (136) DW_AT_decl_file (llvm-dwarfdump: (... snip ...)/llvm/include/llvm/ADT/Optional.h:197: T& llvm::optional_detail::OptionalStorage<T, true>::getValue() & [with T = long unsigned int]: Assertion `hasVal' failed. PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace. Stack dump: 0. Program arguments: /opt/rocm/llvm/bin/llvm-dwarfdump ./testsuite/outputs/gdb.rocm/lane-pc-vega20/lane-pc-vega20-kernel.so #0 0x000055cc8e78315f PrintStackTraceSignalHandler(void*) Signals.cpp:0:0 #1 0x000055cc8e780d3d SignalHandler(int) Signals.cpp:0:0 #2 0x00007f8f2cae8420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420) #3 0x00007f8f2c58d00b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1 #4 0x00007f8f2c56c859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7 #5 0x00007f8f2c56c729 get_sysdep_segment_value /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:509:8 #6 0x00007f8f2c56c729 _nl_load_domain /build/glibc-SzIz7B/glibc-2.31/intl/loadmsgcat.c:970:34 #7 0x00007f8f2c57dfd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6) #8 0x000055cc8e58ceb9 llvm::DWARFDie::dump(llvm::raw_ostream&, unsigned int, llvm::DIDumpOptions) const (/opt/rocm/llvm/bin/llvm-dwarfdump+0x2e0eb9) #9 0x000055cc8e58bec3 llvm::DWARFDie::dump(llvm::raw_ostream&, unsigned int, llvm::DIDumpOptions) const (/opt/rocm/llvm/bin/llvm-dwarfdump+0x2dfec3) #10 0x000055cc8e5b28a3 llvm::DWARFCompileUnit::dump(llvm::raw_ostream&, llvm::DIDumpOptions) (.part.21) DWARFCompileUnit.cpp:0:0
Likewise with DW_AT_call_file / DW_AT_call_line.
The problem is that the code in llvm/lib/DebugInfo/DWARF/DWARFDie.cpp dumping these attributes assumes that FormValue.getAsUnsignedConstant() returns an armed optional. If in debug mode, we get an assertion line the above. If in release mode, and asserts are compiled out, then we proceed as if the optional had a value, running into undefined behavior, printing whatever random value.
Fix this by checking whether the optional returned by FormValue.getAsUnsignedConstant() has a value, like done in other places.
In addition, DWARFVerifier.cpp is validating DW_AT_call_file / DW_AT_decl_file, but not AT_call_line / DW_AT_decl_line. This commit fixes that too.
The llvm-dwarfdump/X86/verify_file_encoding.yaml testcase is extended to cover these cases. Current llvm-dwarfdump crashes running the newly-extended test.
"make check-llvm-tools-llvm-dwarfdump" shows no regressions, on x86-64 GNU/Linux.
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D129392
show more ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5 |
|
| #
23bb550e |
| 25-May-2022 |
Krzysztof Parzyszek <[email protected]> |
DWARFVerifier: Change vector of IntervalMap to vector of unique_ptrs
This is a workaround for compilation issue on FreeBSD. See comments in https://reviews.llvm.org/rG0d8cb8b399ad for more informati
DWARFVerifier: Change vector of IntervalMap to vector of unique_ptrs
This is a workaround for compilation issue on FreeBSD. See comments in https://reviews.llvm.org/rG0d8cb8b399ad for more information.
This fixes https://github.com/llvm/llvm-project/issues/55414.
Differential Revision: https://reviews.llvm.org/D125611
show more ...
|
|
Revision tags: llvmorg-14.0.4 |
|
| #
0d8cb8b3 |
| 05-May-2022 |
David Blaikie <[email protected]> |
DWARFVerifier: Verify CU/TU index overlap issues
Discovered in a large object that would need a 64 bit index (but the cu/tu index format doesn't include a 64 bit offset/length mode in DWARF64 - a sp
DWARFVerifier: Verify CU/TU index overlap issues
Discovered in a large object that would need a 64 bit index (but the cu/tu index format doesn't include a 64 bit offset/length mode in DWARF64 - a spec bug) but instead binutils dwp overflowed the offsets causing overlapping regions.
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2, llvmorg-14.0.1, llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
| #
290e4823 |
| 14-Feb-2022 |
serge-sans-paille <[email protected]> |
Cleanup LLVMDWARFDebugInfo
As usual with that header cleanup series, some implicit dependencies now need to be explicit:
llvm/DebugInfo/DWARF/DWARFContext.h no longer includes: - "llvm/DebugInfo/DW
Cleanup LLVMDWARFDebugInfo
As usual with that header cleanup series, some implicit dependencies now need to be explicit:
llvm/DebugInfo/DWARF/DWARFContext.h no longer includes: - "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h" - "llvm/DebugInfo/DWARF/DWARFCompileUnit.h" - "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h" - "llvm/DebugInfo/DWARF/DWARFDebugAranges.h" - "llvm/DebugInfo/DWARF/DWARFDebugFrame.h" - "llvm/DebugInfo/DWARF/DWARFDebugLoc.h" - "llvm/DebugInfo/DWARF/DWARFDebugMacro.h" - "llvm/DebugInfo/DWARF/DWARFGdbIndex.h" - "llvm/DebugInfo/DWARF/DWARFSection.h" - "llvm/DebugInfo/DWARF/DWARFTypeUnit.h" - "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
Plus llvm/Support/Errc.h not included by a bunch of llvm/DebugInfo/DWARF/DWARF*.h files
Preprocessed lines to build llvm on my setup: after: 1065629059 before: 1066621848
Which is a great diff!
Discourse thread: https://discourse.llvm.org/t/include-what-you-use-include-cleanup Differential Revision: https://reviews.llvm.org/D119723
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
2aed0813 |
| 07-Jan-2022 |
Kazu Hirata <[email protected]> |
[llvm] Use true/false instead of 1/0 (NFC)
Identified with modernize-use-bool-literals.
|
| #
9e45f2c3 |
| 30-Dec-2021 |
David Blaikie <[email protected]> |
Couple of post-commit tweaks on 4d58d1d5af31 based on maskray's feedback
|
| #
09f43c10 |
| 29-Dec-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: fix remaining tests and compact/rephrase the output
|
| #
4d58d1d5 |
| 29-Dec-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Print the CU name and CU count to help visualize progress
|
| #
3b5572a1 |
| 17-Dec-2021 |
Simon Pilgrim <[email protected]> |
Fix MSVC shadow variable warning. NFC.
|
| #
4f60a428 |
| 17-Dec-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Skip resolution failures for locations in dwo files
When reading location lists in dwo files the addresses cannot be resolved, but that's not a problem.
Long term this probably shoul
DWARFVerifier: Skip resolution failures for locations in dwo files
When reading location lists in dwo files the addresses cannot be resolved, but that's not a problem.
Long term this probably should be fixed with a different API that exposes location expressions without the need to resolve the address ranges, since that's all the verifier (in its current state) requires. (though the verifier should probably also eventually verify the address ranges in location lists are a subset of the enclosing scope's address range)
show more ...
|
| #
8f6d52c8 |
| 17-Dec-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Don't error on missing ranges in Split DWARF
When verifying dwo files address ranges won't be able to be resolved due to missing debug_addr (or missing debug_ranges in the case of DWA
DWARFVerifier: Don't error on missing ranges in Split DWARF
When verifying dwo files address ranges won't be able to be resolved due to missing debug_addr (or missing debug_ranges in the case of DWARFv4 Split DWARF).
show more ...
|
| #
ae6961d4 |
| 16-Dec-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Don't try to resolve decl_file in split CUs
Since they refer to the debug_line in the skeleton unit, they can't be resolved from the dwo CU.
But they can be resolved for split TUs, s
DWARFVerifier: Don't try to resolve decl_file in split CUs
Since they refer to the debug_line in the skeleton unit, they can't be resolved from the dwo CU.
But they can be resolved for split TUs, since those refer to .debug_line.dwo, which is available in the dwo file.
show more ...
|
| #
eb12e613 |
| 16-Dec-2021 |
David Blaikie <[email protected]> |
DebugInfoVerifier: Verify dwo units
Initial pass - follow-up patches to address various limitations (debug ranges, location lists... )
|
| #
92f2d02b |
| 14-Dec-2021 |
David Blaikie <[email protected]> |
DebugInfo: Sink string form validation down from verifier to form parsing
Avoid duplicating the string decoding - improve the error messages down in form parsing (& produce an Expected<const char*>
DebugInfo: Sink string form validation down from verifier to form parsing
Avoid duplicating the string decoding - improve the error messages down in form parsing (& produce an Expected<const char*> instead of Optional<const char*> to communicate the extra error details)
show more ...
|
| #
cd93ab89 |
| 24-Nov-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Don't parse all units twice
Introduced/discussed in https://reviews.llvm.org/D38719
The header validation logic was also explicitly building the DWARFUnits to validate. But then othe
DWARFVerifier: Don't parse all units twice
Introduced/discussed in https://reviews.llvm.org/D38719
The header validation logic was also explicitly building the DWARFUnits to validate. But then other calls, like "Units.getUnitForOffset" creates the DWARFUnits again in the DWARFContext proper - so, let's avoid creating the DWARFUnits twice by walking the DWARFContext's units rather than building a new list explicitly.
This does reduce some verifier power - it means that any unit with a header parsing failure won't get further validation, whereas the verifier-created units were getting some further validation despite invalid headers. I don't think this is a great loss/seems "right" in some ways to me that if the header's invalid we should stop there.
Exposing the raw DWARFUnitVectors from DWARFContext feels a bit sub-optimal, but gave simple access to the getUnitForOffset to keep the rest of the code fairly similar.
show more ...
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
3f3680df |
| 19-Nov-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Simplify name lookups
No need to use the dynamic fallback query when the name type is known statically at the call site.
|
| #
fd601807 |
| 16-Nov-2021 |
Duncan P. N. Exon Smith <[email protected]> |
DebugInfo: Make DWARFExpression::iterator a const iterator
3d1d8c767be5537eb5510ee0522e2f3475fe7c04 made DWARFExpression::iterator's Operation member `mutable`. After a few prep commits, the iterato
DebugInfo: Make DWARFExpression::iterator a const iterator
3d1d8c767be5537eb5510ee0522e2f3475fe7c04 made DWARFExpression::iterator's Operation member `mutable`. After a few prep commits, the iterator can instead be made a `const` iterator since no caller can change the Operation.
Differential Revision: https://reviews.llvm.org/D113958
show more ...
|
| #
3ac709b6 |
| 26-Oct-2021 |
David Blaikie <[email protected]> |
llvm-dwarfdump --verify: Exit non-zero on simplified template name rebuilding failures
|
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4 |
|
| #
9911af4b |
| 20-Sep-2021 |
David Blaikie <[email protected]> |
WIP: Verify -gsimple-template-names=mangled values
Clang will encode names that should be able to be simplified as "_STNname|<template, args>" (eg: "_STNt1|<int>") - this verification mode will dete
WIP: Verify -gsimple-template-names=mangled values
Clang will encode names that should be able to be simplified as "_STNname|<template, args>" (eg: "_STNt1|<int>") - this verification mode will detect these names, decode them, create the original name ("t1<int>") and the simple name ("t1") - letting the simple name run through the usual rebuilding logic - then compare the two sources of the full name - the rebuilt and the _STN encoding.
This helps ensure that -gsimple-template-names is lossless.
show more ...
|
| #
72e57862 |
| 17-Sep-2021 |
Simon Pilgrim <[email protected]> |
[DebugInfo] DWARF - Use const-ref iterator in for-range loop. NFCI.
Avoid unnecessary copies, reported by MSVC static analyzer.
|
|
Revision tags: llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2 |
|
| #
07d44cc0 |
| 04-Aug-2021 |
Alexey Lapshin <[email protected]> |
[DWARF][Verifier] Do not add child DieRangeInfo with empty address range to the parent.
verifyDieRanges function checks for the intersected address ranges. It adds child DieRangeInfo into parent Die
[DWARF][Verifier] Do not add child DieRangeInfo with empty address range to the parent.
verifyDieRanges function checks for the intersected address ranges. It adds child DieRangeInfo into parent DieRangeInfo to check whether children have overlapping address ranges. It is safe to not add DieRangeInfo with empty address range into parent's children list. This decreases the number of children which should be navigated and as a result decreases execution time(parents having a lot of children with empty ranges spend much time navigating them). For this command: "llvm-dwarfdump --verify clang-repl" execution time decreased from 220 sec till 75 sec.
Differential Revision: https://reviews.llvm.org/D107554
show more ...
|
| #
ab9d506b |
| 19-Aug-2021 |
Alexey Lapshin <[email protected]> |
[DWARF][Verifier][NFC] Use reference to DWARFAddressRangesVector to avoid copying.
Avoid copying while access to RangesOrError.get().
|
| #
62a4c2c1 |
| 14-Aug-2021 |
David Blaikie <[email protected]> |
DWARFVerifier: Check section-relative references at the end of the section
This ensures that debug_types references aren't looked for in debug_info section.
Behavior is still going to be questionab
DWARFVerifier: Check section-relative references at the end of the section
This ensures that debug_types references aren't looked for in debug_info section.
Behavior is still going to be questionable in an unlinked object file - since cross-cu references could refer to symbols in another .debug_info (or, in theory, .debug_types) chunk - but if a producer only uses ref_addr to refer to things within the same .debug_info chunk in an object file (eg: whole program optimization/LTO - producing two CUs into a single .debug_info section in an object file - the ref_addrs there could be resolved relative to that .debug_info chunk, not needing to consider comdat (DWARFv5 type units or other creatures) chunks of .debug_info, etc)
show more ...
|
|
Revision tags: llvmorg-13.0.0-rc1, llvmorg-14-init, llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2, llvmorg-11.0.1-rc1, llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4 |
|
| #
e1ef7183 |
| 24-Sep-2020 |
Jonas Devlieghere <[email protected]> |
[dwarfdump] Warn for tags with DW_CHILDREN_yes but no children.
Flag DIEs that have DW_CHILDREN_yes set in their abbreviation but don't actually have any children.
rdar://59809554
Differential rev
[dwarfdump] Warn for tags with DW_CHILDREN_yes but no children.
Flag DIEs that have DW_CHILDREN_yes set in their abbreviation but don't actually have any children.
rdar://59809554
Differential revision: https://reviews.llvm.org/D88048
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc3, llvmorg-11.0.0-rc2 |
|
| #
e1de85f9 |
| 29-Jul-2020 |
Greg Clayton <[email protected]> |
Add verification for DW_AT_decl_file and DW_AT_call_file.
LTO builds have been creating invalid DWARF and one of the errors was a file index that was out of bounds. "llvm-dwarfdump --verify" will ch
Add verification for DW_AT_decl_file and DW_AT_call_file.
LTO builds have been creating invalid DWARF and one of the errors was a file index that was out of bounds. "llvm-dwarfdump --verify" will check all file indexes for line tables already, but there are no checks for the validity of file indexes in attributes.
The verification will verify if there is a DW_AT_decl_file/DW_AT_call_file that: - there is a line table for the compile unit - the file index is valid - the encoding is appropriate
Tests are added that test all of the above conditions.
Differential Revision: https://reviews.llvm.org/D84817
show more ...
|