Ich versuche, ein Linker-Problem zu debuggen, das ich habe, wenn ich einen Kernel schreibe.Linker-Skripte: Strategien zum Debuggen?
Das Problem ist, dass ich eine Variable SCAN_CODE_MAPPING
habe, die ich nicht verwenden kann - es scheint leer zu sein oder so. Ich kann das beheben, indem ich die Art ändere, wie ich mein Programm verknüpfe, aber ich weiß nicht warum.
Wenn ich in die generierte Binärdatei mit objdump
schaue, sind die Daten für die Variable definitiv da, also ist nur etwas kaputt mit dem Verweis darauf.
Here's a gist mit den beiden Linker-Skripten und dem Teil der Symboltabelle, die zwischen den beiden Dateien unterscheidet.
Was mich verwirrt ist, dass beide Symboltabellen alle die gleichen Symbole haben, sie sind alle gleich lang, und sie scheinen die richtigen Daten zu enthalten. Der einzige Unterschied, den ich sehen kann, ist, dass sie nicht in der gleichen Reihenfolge sind.
Bisher habe ich versucht,
- die
SCAN_CODE_MAPPING
Speicherplatz Inspektion sicherstellen, dass es die Daten erwarte ich und wurde nicht auf Null gesetzt - Überprüfung, dass alle Symbole die gleichen
- die Überprüfung alle Symbol Inhalt die gleiche Länge
- bei
.data.rel.ro.local
suchen, um sicherzustellen, dass es die Adresse der Daten hat
Ein möglicher Hinweis ist diese Warnung:
warning: uninitialized space declared in non-BSS section `.text': zeroing
, die ich sowohl in den gebrochenen und dem richtigen Fall erhalten.
Was soll ich als nächstes versuchen?
Voting als Debug-Hilfe zu schließen. –