forked from OSchip/llvm-project
457b7f14b9
Summary: When we see a compilation unit with continuous range on input, it has two attributes: DW_AT_low_pc and DW_AT_high_pc. We convert the range to a non-continuous one and change the attributes to DW_AT_ranges and DW_AT_producer. However, gdb seems to expect every compilation unit to have a base address specified via DW_AT_low_pc, even when its value is always 0. Otherwise gdb will not show proper debug info for such modules. With this diff we produce DW_AT_ranges followed by DW_AT_low_pc. The problem is that the first attribute takes DW_FORM_sec_offset which is exactly 4 bytes, and in many cases we are left with 12 bytes to fill in. We used to fill this space with DW_AT_producer, which took an arbitrary-length field. For DW_AT_low_pc we can use a trick of using DW_FORM_udata (unsigned ULEB128 encoded integer) which can take up to 12 bytes, even when the value is 0. (cherry picked from FBD5109798) |
||
---|---|---|
.. | ||
Passes | ||
merge-fdata | ||
BinaryBasicBlock.cpp | ||
BinaryBasicBlock.h | ||
BinaryContext.cpp | ||
BinaryContext.h | ||
BinaryFunction.cpp | ||
BinaryFunction.h | ||
BinaryLoop.h | ||
BinaryPassManager.cpp | ||
BinaryPassManager.h | ||
BinaryPasses.cpp | ||
BinaryPasses.h | ||
CMakeLists.txt | ||
DWARFRewriter.cpp | ||
DataReader.cpp | ||
DataReader.h | ||
DebugData.cpp | ||
DebugData.h | ||
Exceptions.cpp | ||
Exceptions.h | ||
LLVMBuild.txt | ||
README.md | ||
ReorderAlgorithm.cpp | ||
ReorderAlgorithm.h | ||
RewriteInstance.cpp | ||
RewriteInstance.h | ||
llvm-bolt.cpp |