Como chegar GNU a emitir per-line informações de depuração ou GDB para linhas de etapa única em Assembly (AVR)?
Pergunta
Eu não consigo descobrir como obter gás para emitir número da linha informações de depuração para o GDB na montagem. Note que estou usando o compilador cruzado avr-gcc, mas duvido que seja relevante.
Eu estou usando as seguintes opções de linha de comando para montar: avr-gcc -g -ggdb -Os -mmcu = atmega644 -ffunction-secções -fsigned-char -Winvalid-PCH -Parede -Wno-longo longo -x montador-com-CPP -Wa, -ggdb -c -o z813 .o z813.s
Quando eu uso um conjunto quase idêntica de argumentos para compilar o código C, eu posso ver o número da linha e arquivo de origem o aumento do uso de 'objdump -l -d'.
No entanto, os objetos de montagem não têm nenhum. ie
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>
Quando em avr-gdb (via simulavr conexão gdb remoto), eu não posso começar o depurador a única etapa através do meu código de montar, embora não reconhecer os nomes e informações de símbolos. Presumo que isto está relacionado.
Eu coloquei em bom esforço tentando encontrar isso em info / man / google e permutando as bandeiras prováveis. Qualquer ajuda apreciada!
Solução
Quando você "compilação" código fonte assembler, invocando o compilador C é um pouco exagero. O compilador irá reconhecer que a entrada é um arquivo C, e ignorar quaisquer opções que você passá-lo que afetam a compilação C, como -g e -Os. Passar "-v" para a linha de compilador para ver as opções que são realmente passados ??para a montador.
Quando eu montar com
avr-as --gstabs -mmcu=atmega644 a.s -o a.o
então eu recebo de aparência agradável informações linha de origem no arquivo objeto. Minha versão do AVR-as (2.18.0) não suporta uma opção -ggdb em tudo, ele só tem -g, --gstabs, --gstabs +, --gdwarf-2. Com golpes, objdump é capaz de exibir as linhas. Com dwarf-2, não é - Eu não tenho certeza se isso é um bug no objdump ou como
.Se você absolutamente insistem em chamar o assembler como "gcc", você deve passar -Wa, -. Gstabs