Como chegar GNU a emitir per-line informações de depuração ou GDB para linhas de etapa única em Assembly (AVR)?

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

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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top