Как разместить переменную в конце раздела (с помощью GCC)

Я хочу поместить определенную переменную в конец ее раздела памяти.

Так что если у меня есть:

file1.cpp:

__attribute__((section(".mysection"))) char var1[] = "var1";

и в другом файле2.cpp:

__attribute__((section(".mysection"))) char var2[] = "var2";

Как я могу заставить var2 быть в конце mysection?

2

Решение

Ну, в итоге я выбрал совершенно другой подход, но я хотел бы поделиться своим окончательным выводом здесь:
Я основываю это на Как получить конечный адрес моего кода

В коде вы должны добавить внешний ссылка на переменную:

extern char var2[];

Сценарий компоновщика должен быть написан следующим образом:

SECTIONS
{
.mysection : {
*(.mysection);
var2 = .;
}
}
INSERT AFTER .mysection

Добавьте скрипт компоновщика во время связывания (например, ld -T <PATH_TO_MY_LINKER_SCRIPT>)
INSERT AFTER часть используется, поэтому мой скрипт компоновщика будет добавлен в скрипт компоновщика по умолчанию.

Мне пришлось использовать «золото», чтобы связать мой файл эльфа, и, очевидно, версия, которую я использовал, не поддерживает синтаксис «ВСТАВИТЬ ПОСЛЕ». Таким образом, реальное решение должно состоять в том, чтобы скопировать скрипт компоновщика по умолчанию и просто добавить в него информацию моего скрипта.

Я не проверял это хотя, но я все еще надеюсь, что это может кому-то помочь.

3

Другие решения

Вам нужно будет создать свой собственный раздел в командном файле компоновщика и разместить его соответствующим образом в разделе переменных в командном файле компоновщика.

С большинством компоновщиков вы не можете определить порядок точных переменных. Более простое решение — создать один раздел для каждой переменной и сообщить компоновщику, как вы хотите упорядочить разделы.

Посмотрите точный синтаксис для командного файла компоновщика коллекции компиляторов GNU.

0

По вопросам рекламы [email protected]