Come arrivare GNU da emettere per-linea di informazioni o GDB alle linee step singoli (AVR) Assembly di debug?
Domanda
Non riesco a capire come ottenere il gas di emettere numero di riga informazioni di debug per gdb in assemblea. Si noti che sto usando il compilatore gcc croce AVR-, ma dubbio che è rilevante.
Sto usando le seguenti opzioni della riga di comando per l'assemblaggio: avr-gcc -g -ggdb -Os -mmcu = atmega644 -ffunction sezioni-char -fsigned -Winvalid-PCH--Wall -Wno lungo lungo -x assemblatore-con-cpp -Wa, -ggdb -c -o z813 .o z813.s
Quando uso un insieme quasi identico di argomenti di compilare il codice C, posso vedere il numero di riga e sorgente aumento file usando 'objdump -l -d'.
Tuttavia gli oggetti di montaggio non ne hanno. vale a dire
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 nel AVR-gdb (tramite collegamento simulavr gdb remoto), non riesco a ottenere il debugger per singolo passo attraverso il mio codice montare, anche se lo fa riconoscere i nomi e le informazioni di simboli. Presumo che ciò è correlato.
ho messo in buon sforzo cercando di trovare questo nelle informazioni / uomo / google e permutando le probabili bandiere. Qualsiasi aiuto apprezzato!
Soluzione
Quando si "compila" codice sorgente assembler, invocando il compilatore C è un po 'eccessivo. Il compilatore riconoscerà che l'ingresso è un file C, e ignorare tutte le opzioni che si passa che influenzano la compilazione C, come -g e -Os. Pass "-v" alla linea del compilatore per vedere le opzioni che vengono effettivamente passati alla assembler.
Quando ho montare con
avr-as --gstabs -mmcu=atmega644 a.s -o a.o
tanto sono informazioni di bell'aspetto riga di origine nel file oggetto. La mia versione di avr-as (2.18.0) non supporta l'opzione -ggdb a tutti, ha solo -g, --gstabs, --gstabs +, --gdwarf-2. Con coltellate, objdump è in grado di visualizzare le linee. Con nano-2, non è - non sono sicuro che sia un bug in objdump o come
.Se proprio insisti a invocare l'assemblatore come "gcc", si dovrebbe passare -Wa, -. Gstabs