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