ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 апреля
1037033 Топик полностью
Связанные сообщения
Dynamic LinkingДинамическое Связывание
Не надо прибивать адреса. Верней надо, но ровно один адрес одной функции. Нужно лишь сделать самодельный недо-COM. Где эта одна ...2020-09-16
Не понял что ты хочешь. Ты не знаешь по какому адресу в итоге будет размещаться программа? Для этого существуют релокации и пози...2020-09-14
Тебе нужна динамическая компоновка (функций ОС к прикладной программе). Фактически это то, чем занимается ОС при загрузке процес...2020-01-30
С отладкой некоторые сложности, потому, что имеем два ELF-файла и каждый со своим набором отладочной информации. Если отладчик н...2020-01-30
fk0, легенда (16.09.2020 12:50, просмотров: 641) ответил klen на где засада, в чем проблема? поподробнее. скрипт линкера не умеем писать, атрибуты кастомных секций данных не знаем?
Демонстрация проблемы по ссылке. Дело не в линкере, а ещё в компиляторе. При задании опций -mpic-register=r10 -msingle-pic-base -mno-pic-data-is-text-relative -fpic все обращения к данным идут относительно GOT. Без -mno-pic-data-is-text-relative локальные (static) данные адресуются относительно PC, а глобальные через GOT. С -pie всё адресуется через PC. 

Почему всё через GOT -- непонятно. Мог бы относительно начала GOT адресовать статические символы и через GOT глобальные (там таблица нужна, потому, что они неизвестно знает где могут оказаться из-за связи с другими модулями, а для локальных всё срелоцировать относительно самой GOT можно в момент линковки). Потенциально можно генерировать код в ассемблер и обрабатывать ассемблер скриптом, который выкрутасы вокруг GOT выкинет для локальных символов. Я видел в одном проекте так делали и весьма успешно (для уменьшения объёма кода).


В nuttx патчили код (https://cwiki.apache.org/confluence/display/NUTTX/NxFlat) но для другого (там .text в ОЗУ и data-text = const).


Ну и в целом позиционно-независимый код менее эффективен.


Демонстрация проблемы:

https://godbolt.org/z/YsY7Ej

[ZX]