Переезд вне зоны досягаемости;R_AARCH64_ADR_PREL_PG_HI21;Переменная через скрипт компоновщика; - PullRequest
0 голосов
/ 19 марта 2019

Я получил ошибку перемещения компоновщика

relocation R_AARCH64_ADR_PREL_PG_HI21 out of range: 8556371968 is not in [-4294967296, 4294967295]



Существует код, который использует этот перемещенный символ (упрощенный, не фактический, но достаточно, чтобы понять)

extern "C" extern void* memOffset; 

void* getAddress(const void* addr)
{
  return (void*)((uintptr_t)addr + (uintptr_t)&memOffset);
}

memOffset предоставляется через скрипт компоновщика и рассчитывается как: memOffset = addr1 - addr2;

Хорошо, когда разница адресов превышает 32b, возникает ошибка перемещения.

Есть ли способ предоставить эту полноразмерную переменную 'offset' 64b, как символ сценария компоновщика?


Спасибо



PS: Мне интересно сохранить в коде один символ 'offset', а не обходной путь, подобный передаче адресов (addr1 & addr2), и вычислить смещение адресов во время выполнения.

...