Как заставить GNU AS выдавать построчную информацию об отладке или GDB в одношаговые строки в сборке (AVR)?

StackOverflow https://stackoverflow.com/questions/1275944

Вопрос

Я не могу понять, как заставить 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top