forked from OSchip/llvm-project
[BOLT][DWARF] Fix high pc patching
The DW_FORM_addr form of highPC address is written in absolute addres, the data form is written in offset-from-low pc format. Due to the large test binary the test is prepared separately in https://github.com/rafaelauler/bolt-tests/pull/8 Vladislav Khmelevsky, Advanced Software Technology Lab, Huawei Reviewed By: ayermolo Differential Revision: https://reviews.llvm.org/D117217
This commit is contained in:
parent
650fc40b6d
commit
fb3b86fedc
|
@ -1502,11 +1502,15 @@ void DWARFRewriter::patchLowHigh(DWARFDie DIE, DebugAddressRange Range,
|
||||||
TempDebugPatcher->addLE64Patch(LowPCOffset, Range.LowPC);
|
TempDebugPatcher->addLE64Patch(LowPCOffset, Range.LowPC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t HighPC = Range.HighPC;
|
||||||
|
// The DW_FORM_data* is delta between high and low pc
|
||||||
|
if (HighPCVal->V.getForm() != dwarf::Form::DW_FORM_addr)
|
||||||
|
HighPC -= Range.LowPC;
|
||||||
|
|
||||||
if (isHighPcFormEightBytes(HighPCVal->V.getForm()))
|
if (isHighPcFormEightBytes(HighPCVal->V.getForm()))
|
||||||
TempDebugPatcher->addLE64Patch(HighPCOffset, Range.HighPC - Range.LowPC);
|
TempDebugPatcher->addLE64Patch(HighPCOffset, HighPC);
|
||||||
else
|
else
|
||||||
TempDebugPatcher->addLE32Patch(HighPCOffset, Range.HighPC - Range.LowPC,
|
TempDebugPatcher->addLE32Patch(HighPCOffset, HighPC);
|
||||||
HighPCVal->Size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DWARFRewriter::convertToRangesPatchAbbrev(
|
void DWARFRewriter::convertToRangesPatchAbbrev(
|
||||||
|
|
Loading…
Reference in New Issue