Я пытаюсь отладить возникшую у меня проблему компоновщика при написании ядра.
Проблема в том, что у меня есть переменная SCAN_CODE_MAPPING
, которую я не могу использовать - она кажется пустой или что-то в этом роде. Я могу исправить это, изменив способ связывания программы, но не знаю почему.
Когда я заглядываю внутрь сгенерированного двоичного файла с помощью objdump
, данные для переменной определенно там, так что что-то сломано со ссылкой на нее.
Вот суть обоих сценариев компоновщика и той части таблицы символов, которая различается в двух файлах.
Что меня смущает, так это то, что в обеих таблицах символов есть все одинаковые символы, все они одинаковой длины и, похоже, содержат правильные данные. Единственное различие, которое я вижу, это то, что они находятся в разном порядке.
Пока я пробовал
- проверка
SCAN_CODE_MAPPING
области памяти, чтобы убедиться, что в ней есть данные, которые я ожидаю, и что они не были обнулены - проверка того, что все символы совпадают
- проверка того, что все содержимое символа имеет одинаковую длину
- глядя на
.data.rel.ro.local
, чтобы убедиться, что в нем есть адрес данных
Одна из возможных подсказок - это предупреждение:
warning: uninitialized space declared in non-BSS section `.text': zeroing
которые я получаю как в сломанном, так и в правильном корпусе.
Что мне попробовать дальше?