ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
19 августа
1037033 Топик полностью
Связанные сообщения
Dynamic-LinkingДинамическое-Связывание
Не надо прибивать адреса. Верней надо, но ровно один адрес одной функции. Нужно лишь сделать самодельный недо-COM. Где эта одна ...2020-09-16
Не понял что ты хочешь. Ты не знаешь по какому адресу в итоге будет размещаться программа? Для этого существуют релокации и пози...2020-09-14
Тебе нужна динамическая компоновка (функций ОС к прикладной программе). Фактически это то, чем занимается ОС при загрузке процес...2020-01-30
С отладкой некоторые сложности, потому, что имеем два ELF-файла и каждый со своим набором отладочной информации. Если отладчик н...2020-01-30
fk0легенда (16.09.2020 12:50, просмотров: 814) ответил 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]