Создание списка, похожего на .ctors, из нескольких объектных файлов - PullRequest
0 голосов
/ 26 июня 2010

Сейчас я нахожусь в точке, где мне нужно связать несколько модулей (в основном объектных файлов ELF) с моим основным исполняемым файлом из-за ограничения нашей цели (фон: ядро, нацеливание на архитектуру ARM).В других целях (в частности, в x86) эти объектные файлы будут загружаться во время выполнения, и в них будет вызываться определенная функция.При выключении будет вызвана другая функция.Обе эти функции представлены ядру в виде символов, и все это прекрасно работает.

Когда объектные файлы статически связаны, тем не менее, ядро ​​не может «обнаружить» их присутствие, так сказать, и поэтомуМне нужен способ сообщить ядру о наличии функций init / fini без жесткого кодирования их присутствия в ядре - он должен быть расширяемым.Я подумал, что решение этой проблемы может заключаться в том, чтобы поместить все указатели на функции init / fini в их собственный раздел - во многом таким же образом, как вы ожидаете от .ctors и .dtors, - и вызывать их в соответствующее время.

Обратите внимание, что на самом деле они не могут войти в .ctors, так как им требуется, чтобы к моменту их вызова работала определенная поддержка (в частности, управление потоками и памятью, если вам интересно).

Как лучше всего поместить несколько произвольных указателей на функции в определенный раздел?Еще лучше - возможно ли ввести произвольные данные в раздел, чтобы я мог также хранить такие вещи, как имя модуля (структура, а не указатель на функцию, в основном).Использование GCC, нацеленного на армию эльфов.

1 Ответ

0 голосов
/ 27 июня 2010

Атрибуты GCC могут использоваться для указания раздела:

__attribute__((section("foobar")))
...