summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
diff options
context:
space:
mode:
authorStephane Sezer <sas@cd80.net>2018-08-17 00:35:47 +0000
committerStephane Sezer <sas@cd80.net>2018-08-17 00:35:47 +0000
commit9e2fe8be02214b419cc87d56ad9c341a0f296964 (patch)
tree62850629b054df0510bbb83e5ef2e4af26889b0a /lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
parent0094d31f5b51691994f38c5de85c4a962fb75b61 (diff)
downloadbcm5719-llvm-9e2fe8be02214b419cc87d56ad9c341a0f296964.tar.gz
bcm5719-llvm-9e2fe8be02214b419cc87d56ad9c341a0f296964.zip
Add a relocation for R_AARCH64_ABS32 in ObjectFileELF
Summary: .rela.debug_info relocations are being done via ObjectFileELF::ApplyRelocations for aarch64. Currently, the switch case that iterates over the relocation type is only implemented for a few different types and `assert(false)`es over the rest. Implement the relocation for R_AARCH64_ABS32 in ApplyRelocations Reviewers: sas, xiaobai, javed.absar, espindola Reviewed By: sas Subscribers: emaste, arichardson, kristof.beyls Differential Revision: https://reviews.llvm.org/D50369 Change by Nathan Lanza <lanza@fb.com> llvm-svn: 339974
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
index 6a81746ffe4..ace91593c2f 100644
--- a/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
+++ b/lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp
@@ -2697,15 +2697,20 @@ unsigned ObjectFileELF::ApplyRelocations(
break;
}
case R_X86_64_32:
- case R_X86_64_32S: {
+ case R_X86_64_32S:
+ case R_AARCH64_ABS32: {
symbol = symtab->FindSymbolByID(reloc_symbol(rel));
if (symbol) {
addr_t value = symbol->GetAddressRef().GetFileAddress();
value += ELFRelocation::RelocAddend32(rel);
- assert(
- (reloc_type(rel) == R_X86_64_32 && (value <= UINT32_MAX)) ||
+ if ((reloc_type(rel) == R_X86_64_32 && (value <= UINT32_MAX)) ||
(reloc_type(rel) == R_X86_64_32S &&
- ((int64_t)value <= INT32_MAX && (int64_t)value >= INT32_MIN)));
+ ((int64_t)value <= INT32_MAX && (int64_t)value >= INT32_MIN)) ||
+ (reloc_type(rel) == R_AARCH64_ABS32 && (value <= UINT32_MAX))) {
+ Log *log =
+ lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_MODULES);
+ log->Printf("Failed to apply debug info relocations");
+ }
uint32_t truncated_addr = (value & 0xFFFFFFFF);
DataBufferSP &data_buffer_sp = debug_data.GetSharedDataBuffer();
uint32_t *dst = reinterpret_cast<uint32_t *>(
OpenPOWER on IntegriCloud