Связывание с использованием файла карты без объектных файлов - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу создать операционную систему для встроенного устройства с очень ограниченными ресурсами (ESP8266), которая может загружать ELF файлы в качестве программы или общего объекта (общий объект является вторым по важности).

Я хочу чтобы узнать, возможно ли связать любую программу для этой ОС с map file ОС?

, например, я внедряю memcpy в ОС и создаю файл заголовка, который объявляет его как extern, компилирует ОС и создать файл карты. затем, когда я хочу написать программу, включите заголовок для успешной компиляции и сделайте компоновщик для просмотра адреса memcpy из файла карты ОС.

ОС не является независимой, и ее функции всегда по фиксированному адресу, но программы размещают независимые файлы ELF. нет необходимости программировать загружаемость для разных сборок ОС.

1 Ответ

1 голос
/ 27 апреля 2020

Это ни в коем случае не полное решение проблемы запуска ELF на встроенной цели, но для конкретной проблемы c предоставления известных адресов во время процесса связывания GNU LD позволяет вам предоставлять адреса для символов в определенном коде как extern путем добавления оператора PROVIDE или простого присваивания сценарию компоновщика. LD не будет напрямую читать файл карты, но вы можете проанализировать файл карты, найти соответствующие адреса, сгенерировать скрипт компоновщика, который имеет соответствующие символы, и использовать этот скрипт компоновщика при компиляции ELF. Документацию по функциям обеспечения и назначения можно найти по адресу https://sourceware.org/binutils/docs/ld/Assignments.html

...