Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
software:gdb:start [2016-02-17 12:26] abajricsoftware:gdb:start [2016-02-17 13:34] abajric
Zeile 135: Zeile 135:
  
  
 +==== Assembler Code mit STABS ====
 +
 +Der Assembler-Code (test.S) mit den Debug-Informationen sieht wie folgt aus:
 +
 +<code>
 +.include "stabs.include"
 +
 +.stabs "void:t1=1",N_LSYM,0,0,0
 +.stabs "int:t2=r2;-2147483648;2147483647;",N_LSYM,0,0,0
 +
 +.data
 +.org 0x100000
 +.stabs "targetCommand:G2",N_GSYM,0,0,0
 +.global targetCommand
 +targetCommand:
 +.int 0
 +
 +.org 0x400100
 +.stabs "/home/abajric/ntb/deep/ws/runtime-library/",N_SO,0,0,Ltext0
 +.stabs "src/ch/ntb/inf/deep/runtime/mpc555/Reset.java",N_SO,0,0,Ltext0
 +.text
 +Ltext0:
 +
 +reset:
 +.stabn N_SLINE, 0, 38, LM1
 +LM1:
 + li r2, 16388
 + lwz r4, 0(r2)
 + addi r2, r4, 16384
 + addi r3, r2, 4
 + lwz r5, 0(r3)
 + addi r2, r4, 16384
 + addi r3, r2, 8
 + lwz r4, 0(r3)
 + add r2, r5, r4
 + addi r3, r2, -4
 +.stabn N_SLINE, 0, 41, LM5
 +LM6:
 + mr r1, r3
 + li r2, 16396
 + lwz r4, 0(r2)
 + mr r0, r4
 + mtspr SRR0, r0
 + li r2, 14338
 + mr r0, r2
 + mtspr SRR1, r0
 +.stabn N_SLINE, 0, 47, LM4
 +LM4:
 + li r2, 4
 +.stabs "x:r2;-2147483648;2147483647;",N_RSYM,0,4,2
 +.stabn N_SLINE, 0, 48, LM5
 +LM5:
 + xori r3, r2, 0x55
 +.stabs "x:r2;-2147483648;2147483647;",N_RSYM,0,4,3
 + xoris r3, r3, 0x0
 +.stabn N_SLINE, 0, 50, LM2
 +LM2:
 + mr r27, r2
 +.stabs "x:r2;-2147483648;2147483647;",N_RSYM,0,4,27
 +.stabn N_SLINE, 0, 51, LM3
 +LM3:
 + b 0
 +
 +.stabs "ch::ntb::inf::deep::runtime::mpc555::Reset::reset:F1",N_FUN,0,0,reset
 +.stabn N_SLINE, 0, 37, reset
 +.stabn N_LBRAC, 0, 0, LM1
 +.stabn N_RBRAC, 0, 0, LM3
 +</code>
 +
 +Im File //stabs.include// stehen Definitionen der STABS Symboltypen:
 +
 +<code>
 +# non-stab symbol types
 +.set N_UNDF, 0x0
 +.set N_EXT, 0x1
 +.set N_ABS, 0x2
 +.set N_TEXT, 0x4
 +.set N_DATA, 0x6
 +.set N_BSS, 0x8
 +.set N_FN_SEQ, 0x0c
 +.set N_INDR, 0x0a
 +.set N_COMM, 0x12
 +.set N_SETA, 0x14
 +.set N_SETT, 0x16
 +.set N_SETD, 0x18
 +.set N_SETB, 0x1a
 +.set N_SETV, 0x1c
 +.set N_WARNING, 0x1e
 +.set N_FN, 0x1f
 +
 +# stab symbol types
 +.set N_GSYM, 0x20
 +.set N_FNAME, 0x22
 +.set N_FUN, 0x24
 +.set N_STSYM, 0x26
 +.set N_LCSYM, 0x28
 +.set N_MAIN, 0x2a
 +.set N_ROSYM, 0x2c
 +.set N_PC, 0x30
 +.set N_NSYMS, 0x32
 +.set N_NOMAP, 0x34
 +.set N_MAC_DEFINE, 0x36
 +.set N_OBJ, 0x38
 +.set N_MAC_UNDEF, 0x3a
 +.set N_OPT, 0x3c
 +.set N_RSYM, 0x40
 +.set N_M2C, 0x42
 +.set N_SLINE, 0x44
 +.set N_DSLINE, 0x46
 +.set N_BSLINE, 0x48
 +.set N_BROWS, 0x48
 +.set N_DEFD, 0x4a
 +.set N_FLINE, 0x4c
 +.set N_EHDECL, 0x50
 +.set N_MOD2, 0x50
 +.set N_CATCH, 0x54
 +.set N_SSYM, 0x60
 +.set N_ENDM, 0x62
 +.set N_SO, 0x64
 +.set N_LSYM, 0x80
 +.set N_BINCL, 0x82
 +.set N_SOL, 0x84
 +.set N_PSYM, 0xa0
 +.set N_EINCL, 0xa2
 +.set N_ENTRY, 0xa4
 +.set N_LBRAC, 0xc0
 +.set N_EXCL, 0xc2
 +.set N_SCOPE, 0xc4
 +.set N_RBRAC, 0xe0
 +.set N_BCOMM, 0xe2
 +.set N_ECOMM, 0xe4
 +.set N_ECOML, 0xe8
 +.set N_WITH, 0xea
 +.set N_NBTEXT, 0xf0
 +.set N_NBDATA, 0xf2
 +.set N_NBBSS, 0xf4
 +.set N_NBSTS, 0xf6
 +.set N_NBLCS, 0xf8
 +</code>
 +
 +
 +==== Beschreibung der STABS ====
 +
 +Online Doku von GDB:
 +  * [[https://sourceware.org/gdb/current/onlinedocs/gdb/| GDB User Manual]]
 +  * [[https://www.sourceware.org/gdb/onlinedocs/stabs.html| STABS Doku]]
 +  * [[https://sourceware.org/gdb/onlinedocs/stabs/Stab-Symbol-Types.html#Stab-Symbol-Types| STABS Symboltypen]]
 +
 +=== Definition von Typen ===
 +([[https://www.sourceware.org/gdb/onlinedocs/stabs.html#String-Field|String-Field]])
 +Type 1 = void und Type 2 = int.
 +
 +<code>
 +.stabs "void:t1=1",N_LSYM,0,0,0
 +.stabs "int:t2=r2;-2147483648;2147483647;",N_LSYM,0,0,0
 +</code>
 +
 +=== Definition von globalen Variablen ===
 +
 +([[https://www.sourceware.org/gdb/onlinedocs/stabs.html#Global-Variables|Global Variables]])
 +Variable targetCommand an Adresse 0x100000 vom Type 2 = int.
 +
 +<code>
 +.data
 +.org 0x100000
 +.stabs "targetCommand:G2",N_GSYM,0,0,0
 +.global targetCommand
 +targetCommand:
 +.int 0
 +</code>
 +
 +=== Definition vom Java-Sourcecode ===
 +
 +([[https://www.sourceware.org/gdb/onlinedocs/stabs.html#Source-Files|Source Files]])
 +Der erste STABS mit N_SO ist der Build-Ordner. Der Zweite ist der relative Pfad zum Source-File.
 +
 +<code>
 +.org 0x400100
 +.stabs "/home/abajric/ntb/deep/ws/runtime-library/",N_SO,0,0,Ltext0
 +.stabs "src/ch/ntb/inf/deep/runtime/mpc555/Reset.java",N_SO,0,0,Ltext0
 +.text
 +Ltext0:
 +</code>
 +
 +=== Definition von Zeilennummern ===
 +
 +([[https://www.sourceware.org/gdb/onlinedocs/stabs.html#Line-Numbers|Line Numbers]])
 +
 +<code>
 +reset:
 +.stabn N_SLINE, 0, 38, LM1
 +LM1:
 +
 +...
 +
 +.stabn N_SLINE, 0, 41, LM5
 +LM6:
 +
 +...
 +
 +.stabn N_SLINE, 0, 47, LM4
 +LM4:
 +</code>
 +
 +
 +
 +=== Definition von Registervariablen ===
 +([[https://www.sourceware.org/gdb/onlinedocs/stabs.html#Register-Variables|Register Variables]])
 +Registervariablen müssen immer im gleichen Register bleiben. ("r2" => Registervariable vom Type 2 und nicht Register R2, Registernummer ist der letzte Parameter!)
 +
 +<code>
 +.stabs "x:r2;-2147483648;2147483647;",N_RSYM,0,4,2
 +</code>
 +
 +
 +=== Definition von Funktionen ===
 +
 +([[https://www.sourceware.org/gdb/onlinedocs/stabs.html#Procedures|Procedures]]) N_LBRAC und N_RBRAC ist die Position der öffnenden/schliessenden geschweiften Klammern der Funktion.
 +
 +<code>
 +.stabs "ch::ntb::inf::deep::runtime::mpc555::Reset::reset:F1",N_FUN,0,0,reset
 +.stabn N_SLINE, 0, 37, reset
 +.stabn N_LBRAC, 0, 0, LM1
 +.stabn N_RBRAC, 0, 0, LM3
 +</code>
 +
 +==== Debuggen mit GDB ====
 +
 +Damit ein PowerPC Target debugged werden kann muss GDB mit PowerPC Support installiert werden:
 +
 +<code>
 +$ sudo apt-get install gdb-multiarch
 +</code>
 +
 +Bevor GDB gestarted wird, muss das Image-File auf den MPC5200 geladen werden:
 +
 +<code>
 +$ telnet bdi3000inf01
 +pcm5200io> load 0x400000 pub/abajric/test.bin bin
 +pcm5200io> rm pc 0x400100
 +</code>
 +
 +GDB starten:
 +<code>
 +$ gdb-multiarch
 +</code>
 +
 +PowerPC Architektur auswählen:
 +
 +<code>
 +(gdb) set arch powerpc:common
 +</code>
 +
 +ELF-File mit Debug-Informationen auswählen:
 +
 +<code>
 +(gdb) file ./a.out
 +</code>
 +
 +GDB mit Abatron BDI3000 verbinden:
 +
 +<code>
 +(gdb) target remote bdi3000inf01:2001
 +</code>
 +
 +GDB TUI aktivieren und Layout umstellen:
 +
 +<code>
 +(gdb) layout split
 +(gdb) focus cmd
 +</code>
 +
 +Alternativ kann ein File (gdb.cmd) mit diesen GDB-Kommandos erstellt werden:
 +
 +<code>
 +set arch powerpc:common
 +file ./a.out
 +target remote bdi3000inf01:2001
 +layout split
 +focus cmd
 +</code>
 +
 +Beim Ausführen von GDB muss dieses File angegeben werden, damit alle Kommandos im File ausgeführt werden:
 +
 +<code>
 +$ gdb-multiarch -x ./gdb.cmd
 +</code>
 +
 +Mit dem folgenden Befehl kann der Java-Sourcecode angezeigt werden:
 +
 +<code>
 +(gdb) list
 +</code>
 +
 +Mit dem folgenden Befehl wird eine Assembler-Instruktion ausgeführt:
 +
 +<code>
 +(gdb) stepi
 +</code>
 +
 +Mit dem folgenden Befehl wird Code ausgeführt, bis eine neue Source-Zeile erreicht wurde:
 +
 +<code>
 +(gdb) next
 +</code>
 +
 +Mit dem folgenden Befehl wird eine definierte Variable ausgegeben:
 +
 +<code>
 +(gdb) print x
 +</code>
 +
 +Mit dem folgenden Befehl wird eine definierte Variable geändert:
 +
 +<code>
 +(gdb) set var x = 12345
 +</code>
 +
 +Mit dem folgenden Befehl kann im Memory geschrieben werden:
 +
 +<code>
 +(gdb) set var *0x100000 = 12345
 +</code>