mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-10 21:04:56 +00:00
Sign extend a value before passing it to the Target.
This is what InputSectionBase<ELFT>::relocate does and we need to be consistent. The other option would be to be more explicit about which relocations are signed and which are not, and sign extend only when appropriated. That would require extending the target interface. llvm-svn: 280366
This commit is contained in:
parent
0f298a2655
commit
3a9eef1670
@ -100,7 +100,8 @@ public:
|
||||
|
||||
// ARM Target Thunks
|
||||
template <class ELFT> static uint64_t getARMThunkDestVA(const SymbolBody &S) {
|
||||
return S.isInPlt() ? S.getPltVA<ELFT>() : S.getVA<ELFT>();
|
||||
uint64_t V = S.isInPlt() ? S.getPltVA<ELFT>() : S.getVA<ELFT>();
|
||||
return SignExtend64<32>(V);
|
||||
}
|
||||
|
||||
template <class ELFT>
|
||||
|
14
lld/test/ELF/arm-thumb-interwork-thunk-range.s
Normal file
14
lld/test/ELF/arm-thumb-interwork-thunk-range.s
Normal file
@ -0,0 +1,14 @@
|
||||
// RUN: llvm-mc -filetype=obj -triple=armv7a-none-linux-gnueabi %s -o %t.o
|
||||
// RUN: ld.lld %t.o -o %t -image-base=0x80000000
|
||||
|
||||
// Test that when the thunk is at a high address we don't get confused with it
|
||||
// being out of range.
|
||||
|
||||
.thumb
|
||||
.global _start
|
||||
_start:
|
||||
b.w foo
|
||||
|
||||
.arm
|
||||
.weak foo
|
||||
foo:
|
Loading…
Reference in New Issue
Block a user