tccelf.c: On arm64, use read64le, and use uint64_t to check range.
This commit is contained in:
5
tccelf.c
5
tccelf.c
@ -1961,9 +1961,8 @@ ST_FUNC void relocate_plt(TCCState *s1)
|
|||||||
p += 32;
|
p += 32;
|
||||||
while (p < p_end) {
|
while (p < p_end) {
|
||||||
uint64_t pc = plt + (p - s1->plt->data);
|
uint64_t pc = plt + (p - s1->plt->data);
|
||||||
uint64_t addr = got +
|
uint64_t addr = got + read64le(p);
|
||||||
(read32le(p) | (uint64_t)read32le(p + 4) << 32);
|
uint64_t off = (addr >> 12) - (pc >> 12);
|
||||||
uint32_t off = (addr >> 12) - (pc >> 12);
|
|
||||||
if ((off + ((uint32_t)1 << 20)) >> 21)
|
if ((off + ((uint32_t)1 << 20)) >> 21)
|
||||||
tcc_error("Failed relocating PLT (off=0x%lx, addr=0x%lx, pc=0x%lx)", off, addr, pc);
|
tcc_error("Failed relocating PLT (off=0x%lx, addr=0x%lx, pc=0x%lx)", off, addr, pc);
|
||||||
write32le(p, (0x90000010 | // adrp x16,...
|
write32le(p, (0x90000010 | // adrp x16,...
|
||||||
|
|||||||
Reference in New Issue
Block a user