-
- Да, с глобальными и статическими переменными засада в гцц. Andreas(141 знак., 15.09.2020 23:26, ссылка)
- где засада, в чем проблема? поподробнее. скрипт линкера не умеем
писать, атрибуты кастомных секций данных не знаем? - klen(15.09.2020 23:32)
- Демонстрация проблемы по ссылке. Дело не в линкере, а ещё в компиляторе. При задании опций -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, ссылка, ссылка)
- знаем! только если задать прибитую область даже для рамы, линкер говорит идите нах, либо крестик снять, либо трусы одеть! либо все релок либо все с прибитыми адресами - Aleksey_75(16.09.2020 00:01)
- где засада, в чем проблема? поподробнее. скрипт линкера не умеем
писать, атрибуты кастомных секций данных не знаем? - klen(15.09.2020 23:32)
- Тебе ж LightElf давал ссылку на загрузчик ELF'ов. Кто у кого
скопипастил я не разобрался, сам разбирайся. Там что-то кода много
накручено, можно проще. В конечном счёте нужно записать в нужное
место flash секцию .text, скопировать .data в ОЗУ (и каждый раз при
старте), занулить .bss, потом пробежаться по таблице релокаций и
пофиксить релокации в .data, потом пробежаться по таблице символов
и зарезолвить неизвестные символы (что модуль вызывает из твоей
программы). Заодно fk0(651 знак., 15.09.2020 22:41, ссылка, ссылка)
- по моему elf тащить в прошу потом парсить занятие неблагодарное,
для фалов (ниже) которые весят 408 байт, а elf весит 2кб! - Aleksey_75(15.09.2020 22:49)
- А как, интересно, такие файлы что-то умудряются делать, ну основное
что им нужно, подумалось -- это же C-библиотека. Какой-нибудь там
strlen() вдруг понадобился. Или хуже того, malloc. Получается тебе
её нужно в основной программе, бутлоадере, иметь, и предоставлять
из неё все возможные функции (а не только нужные самой основной
программе). - fk0(16.09.2020 12:05)
- нет никаких strlen и прочих malloc. Модуль умеет делать только то что даст ему основная логика. Обычные автоматы, основная логика получает указатель на функцию в модуле вызывает её с необходимыми параметрами получает результат. Количество возможных функций основной логики вызываемых из модуля крайне ограничено, сейчас их всего 10 и врятли увеличится - Aleksey_75(16.09.2020 13:23)
- хотя! кто мешает на уровне make парсить elf и прилепить к проше
свою структуру чего куда пихать, даже макросы можно влупить.. Хм!
завтра если не
побежупобеждуразломаю , то займусь этим вариком))) - Aleksey_75(16.09.2020 00:06)- Нечто подобное сделано в u-boot. Бинарник U-Boot грузится по фиксированному адресу, но дальше переносит сам себя в самый конец памяти (и релоцируется естественно). Кроме того, линуксовый кернел в формате uImage/zImage тоже является саморелоцирующимся. Возможно там найдутся готовые тулзы и скрипты. - LightElf(16.09.2020 14:07)
- А как, интересно, такие файлы что-то умудряются делать, ну основное
что им нужно, подумалось -- это же C-библиотека. Какой-нибудь там
strlen() вдруг понадобился. Или хуже того, malloc. Получается тебе
её нужно в основной программе, бутлоадере, иметь, и предоставлять
из неё все возможные функции (а не только нужные самой основной
программе). - fk0(16.09.2020 12:05)
- по моему elf тащить в прошу потом парсить занятие неблагодарное,
для фалов (ниже) которые весят 408 байт, а elf весит 2кб! - Aleksey_75(15.09.2020 22:49)
- Да, с глобальными и статическими переменными засада в гцц. Andreas(141 знак., 15.09.2020 23:26, ссылка)