2017-01-05 6 views
0

Я строю небольшую ОС exectuable, и у меня проблемы с процессом связывания с использованием NASM, GCC и GNU Binutils.
Я связывание нескольких типов объектных файлов:Отсутствует информация об отладке от NASM и GCC

  • ELF32 объектных файлов с карликовой отладочной информацией от NASM
  • ELF32 объектных файлов с карликовой отладочной информацией из GCC

Когда я соединяю toghether этих файлов с помощью специального скрипта компоновщика, а затем перечитайте информацию о дебабе, я нахожу только информацию об отладке из первого связанного объектного файла (упорядоченного по эффективному адресу).

Для справочных целей, я выложу пару строк, которые я использую для компиляции:

nasm -g -felf32 -F dwarf entry.asm -o "build/entry.o" 
gcc -c main.c -o "build/main.o" -m32 -mtune=i386 -gdwarf 

И ссылка:.

ld -Tlinker.ld -m elf_i386 --nmagic -nostdlib -static -o "build/bootload.elf" -M -g > "build/map.txt" 

Пользуюсь GCC V 6.2, Binutils v. 2.27 и NASM v. 2.12
Я при необходимости отправлю бит сценария компоновщика. Пожалуйста, помогите, отладка без информации о линии очень раздражает.

+0

Вы пробовали без скрипта компоновщика, чтобы убедиться, что это причина? – Jester

+0

Мне нужен скрипт компоновщика, потому что мне нужно поместить определенные фрагменты кода по определенным адресам. – JPSgfx

+0

Я понимаю, что, тем не менее, было бы полезно узнать, вызвало ли это проблему или нет. – Jester

ответ

0

Исправлено.
Проблема, предложенная @Jester (спасибо), была в сценарии компоновщика.
Я помещал каждый объектный файл в раздел .text финального файла ELF. Я отправлю код, чтобы объяснить, старое и новое, исправленное поведение:

OLD:

.text : AT(0x800) { 
    test.o(*); 
} 

NEW:

.text : AT(0x800) { 
    test.o(.text); 
    test.o(.data); 
    test.o(.bss); 
} 

весь этот код для сценария линкера ,