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