- Демонстрация проблемы по ссылке. Дело не в линкере, а ещё в
компиляторе. При задании опций -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. fk0(690 знаков, 16.09.2020 12:50, ссылка, ссылка)
- Не понял что ты хочешь. Ты не знаешь по какому адресу в итоге будет
размещаться программа? Для этого существуют релокации и
позиционно-независимый код. И программу при размещении во flash
нужно либо релоцировать (поменять в ней все адреса), либо, если код
позиционно-независимый, то релоцировать только данные (где адреса
записаны) и запускать как есть. Последнее сильно проще, т.к. видов
релокаций вместо ~130 штук (офигеешь код писать) остаётся
практически одна (прибавить fk0(4395 знаков, 14.09.2020 19:30, ссылка, ссылка)
- Тебе нужна динамическая компоновка (функций ОС к прикладной программе). Фактически это то, чем занимается ОС при загрузке процесса. Поэтому идея взять готовую ОС не самая глупая. Но в принципе не обязательно. fk0(4118 знаков, 30.01.2020 02:23 - 11:47)