Такая методика широко известна, для тех кто сталкивался с 8-битными
игрушками прибитыми к полу. Но так же известно, что она
малоприменима на практике. Ещё доисторический M80 в CP/M умел
генерировать таблицу релокаций, причём лучше (чем вот так)...
Вообще я не совсем понимаю, как ты сможешь разделить .text и .data,
в смысле избавиться от фиксированного смещения между ними.
Допустим, ты по адресу понял, что относится к .text, что к .data и
при загрузке каждый сегмент релоцировал по-своему, да? А теперь, внимание, слон в комнате: в сегменте .data могут запросто оказаться указатели на функции, а в сегменте .text отсылки к данным в .data. И как это будет работать???
Хотел тебе дать почитать:
https://github.com/riscv/riscv-elf-psabi-doc/issues/128
https://s3.amazonaws.com/connect.linaro.org/sfo15/Presentations/09-24-Thursday/SFO15-406-%20ARM%20FDPIC%20Toolchains.pdf (см. про указатели на функции).
Реально даже с теми опциями gcc что я давал достаточно печально: без указателей на функции в явном виде. В неявном можно: через ассемблер и оффсет от текущей операции вычислять адрес искомой функции -- смещения внутри объектника допустимы и не ведут к релокациям.