diff options
author | Stephane Sezer <sas@cd80.net> | 2018-08-17 00:35:47 +0000 |
---|---|---|
committer | Stephane Sezer <sas@cd80.net> | 2018-08-17 00:35:47 +0000 |
commit | 9e2fe8be02214b419cc87d56ad9c341a0f296964 (patch) | |
tree | 62850629b054df0510bbb83e5ef2e4af26889b0a /lldb/source/Plugins/ObjectFile/ELF/ObjectFileELF.cpp | |
parent | 0094d31f5b51691994f38c5de85c4a962fb75b61 (diff) | |
download | bcm5719-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.cpp | 13 |
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 *>( |