Как заставить GNU AS выдавать построчную информацию об отладке или GDB в одношаговые строки в сборке (AVR)?
Вопрос
Я не могу понять, как заставить GAS выдавать отладочную информацию о номере строки для GDB в сборке.Обратите внимание, что я использую кросс-компилятор avr-gcc, но сомневаюсь, что это актуально.
Для сборки я использую следующие параметры командной строки:avr-gcc -g -ggdb -Os -mmcu=atmega644 -ffunction-sections -fsigned-char -Winvalid-pch -Wall -Wno-long-long -x assembler-with-cpp -Wa,-ggdb -c -o z813 .о z813.s
Когда я использую почти идентичный набор аргументов для компиляции кода C, я могу видеть номер строки и увеличение исходного файла, используя «objdump -l -d».
Однако у объектов сборки их нет.т.е.
000000d4 <run_timetable>:
d4: 0e 94 57 00 call 0xae ; 0xae <run_timetable_row>
d8: 0e 94 b4 00 call 0x168 ; 0x168 <delay>
vs
00000f9c :
main():
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:68
f9c: 0e 94 ae 07 call 0xf5c ; 0xf5c <init>
/home/braddock/work/tviki/tviki/scratch/z813-vid.c:70
fa0: 0e 94 6a 00 call 0xd4 ; 0xd4 <run_timetable>
Находясь в avr-gdb (через удаленное соединение simulavr с GDB), я не могу заставить отладчик выполнить один шаг моего ассемблерного кода, хотя он распознает имена символов и информацию.Я предполагаю, что это связано.
Я приложил немало усилий, пытаясь найти это в info/man/google и переставив вероятные флаги.Любая помощь приветствуется!
Решение
Когда вы «компилируете» исходный код ассемблера, вызывать компилятор C несколько излишне.Компилятор распознает, что входные данные представляют собой файл C, и игнорирует любые передаваемые вами параметры, влияющие на компиляцию C, такие как -g и -Os.Передайте «-v» в строку компилятора, чтобы увидеть параметры, которые фактически передаются ассемблеру.
Когда я собираю с
avr-as --gstabs -mmcu=atmega644 a.s -o a.o
затем я получаю красивую информацию об исходной строке в объектном файле.Моя версия avr-as (2.18.0) вообще не поддерживает опцию -ggdb, есть только -g, --gstabs, --gstabs+, --gdwarf-2.С помощью stabs objdump может отображать строки.С dwarf-2 такого нет - не уверен, это баг в objdump или в as.
Если вы абсолютно настаиваете на вызове ассемблера как «gcc», вам следует передать -Wa,-gstabs.