Software > Software (16-/32-Bit)
NetSurf GEM Alpha
HelmutK:
addr2line scheint ja bei m68k nicht zu funktionieren. Ich hab früher mal ein script gemacht, das mit nm die Adressen ermittelt, und die anhand von TEXT in die Laufzeit-Werte umrechnet. Dann sucht es darin nach dem Wert, der bei PC angegeben ist. So findet man wenigstens die Funktion wo es passiert ist. Wenn Du das brauchst, kannst Du Dich ja melden. Oder geht addr2line vielleicht doch?
mfro:
--- Zitat von: m0n0 am Do 09.01.2014, 23:18:32 ---Kannst Du ohne großen Aufwand herausfinden was für eine Anweisung an der stelle liegt? Und an welcher physikalischen Adresse in der Exe? Dann könnte ich evtl. herausfinden in welchem Modul und dann wahrscheinlich auch ob es sich um ein Modul handelt das eigentlich richtig kompiliert sein muesste....
--- Ende Zitat ---
Wenn Du beim Linken eine Crossreferenztabelle mitschreiben läßt (-Wl,-map,mapfile, Adressen sind relativ zur Basepageadresse + 0x100, also dem Anfang des Textsegments), sollte sich damit gemeinsam mit den MiNT Crashausgaben, die ich mitgeschickt habe, doch eigentlich die Absturzstelle genau ermitteln lassen?
Gruß,
Markus
mfro:
--- Zitat von: HelmutK am Do 09.01.2014, 23:56:45 ---addr2line scheint ja bei m68k nicht zu funktionieren. Ich hab früher mal ein script gemacht, das mit nm die Adressen ermittelt, und die anhand von TEXT in die Laufzeit-Werte umrechnet. Dann sucht es darin nach dem Wert, der bei PC angegeben ist. So findet man wenigstens die Funktion wo es passiert ist. Wenn Du das brauchst, kannst Du Dich ja melden. Oder geht addr2line vielleicht doch?
--- Ende Zitat ---
Addr2line funzt (zumindest für mich) prima:
--- Code: --- m68k-atari-mint-addr2line -e mcdcook.prg -af -ba.out-mintprg 0x388
0x00000388
_main
/Users/mfro/Documents/workspace/mcdcook/sources/mcdcook.c:99
--- Ende Code ---
Natürlich nur, wenn der Code durchgehend mit -g übersetzt und nicht gestrippt ist. Die Umrechnung relativ zur Basepageadresse (s. Ausgabe des MiNT Crash-Reports) mußt Du halt selber erledigen.
Vielleicht eine gute Gelegenheit für einen Verbesserungsvorschlag? Statt:
--- Code: ----> ILLEGAL INSTRUCTION: User PC=201E318 (basepage=1B0A000, text=1B0A100, data=2054D08,bss=2066E6C)
--- Ende Code ---
--- Code: ----> ILLEGAL INSTRUCTION: User PC=1B0A000 + 100 + 514218 = 201E318 (basepage=1B0A000, text=1B0A100, data=2054D08,bss=2066E6C)
--- Ende Code ---
Dann müsste ich bei meinen Crashes nicht immer selber rechnen ;)
m0n0:
danke für die informationen, ich werde an dem Thema dran bleiben - wird aber etwas dauern bis ich dazu komme. Trotzdem danke nochmal, die Infos sind schon sehr Hilfreich - galube ich :)
HelmutK:
--- Zitat von: mfro am Fr 10.01.2014, 09:09:37 ---Vielleicht eine gute Gelegenheit für einen Verbesserungsvorschlag? Statt:
--- Code: ----> ILLEGAL INSTRUCTION: User PC=201E318 (basepage=1B0A000, text=1B0A100, data=2054D08,bss=2066E6C)
--- Ende Code ---
--- Code: ----> ILLEGAL INSTRUCTION: User PC=1B0A000 + 100 + 514218 = 201E318 (basepage=1B0A000, text=1B0A100, data=2054D08,bss=2066E6C)
--- Ende Code ---
Dann müsste ich bei meinen Crashes nicht immer selber rechnen ;)
--- Ende Zitat ---
Wieso so kompliziert? Man kann doch einfach TEXT nehmen, das ist BASEPAGE+0x100, aber nicht immer, meine ich, also ist TEXT besser als BASEPAGE+0x100.
Ich mach das jetzt so (unter anderem):
--- Code: ---...
addr=$(printf "%x" $((0x$1-0x$2)))
${prefix}addr2line -e $3 $addr
...
--- Ende Code ---
Der kernel könnte dann ja schreiben:
--- Code: ---ILLEGAL INSTRUCTION: User PC=201E318(514218)( (basepage=1B0A000, text=1B0A100, data=2054D08,bss=2066E6C)
--- Ende Code ---
sofern TEXT<= PC <= (TEXT+TEXTLEN).
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln