Переопределить символы компоновщика GCC в коде c, используя слабое объявление - PullRequest
0 голосов
/ 23 ноября 2018

Я строю цель для эльфов.У меня есть скрипт компоновщика, в который я ввожу некоторые из расположений символов, таких как (эти символы определены в разных местах, таких как ПЗУ, адрес которых указан ниже),

A = 0x12345678;
B = 0x1234567c;
D = 0x1234568c;

В коде C я могу использовать эти переменныеА и Б без объявления их, что ожидается.Я хочу знать, могу ли я переопределить символ D, т. Е. Мой текущий исполняемый файл может иметь свое собственное объявление D. В этом случае компоновщик должен игнорировать D. Есть ли способ объявить символы в скрипте компоновщика как «слабые»?так что компоновщик может использовать «входные символы», только если он не объявлен ни в одном из связанных объектов.

1 Ответ

0 голосов
/ 23 ноября 2018

Использование PROVIDE директивы

PROVIDE(D = 0x1234568c);

Из ld документации

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...