Es gibt ein Manual zu nm, aber das hilft Dir sicher auch nicht
viel weiter.
Eine Kurzhilfe bekommst Du mit avr-nm -?, aber auch diese wird
Dir sicher nicht so viel weiterhelfen, da sie nur die Optionen
erklärt.
Vielleicht sollte ich mal die folgende Erklärung irgendwo in
der avr-libc Doku mit aufnehmen.
Die Buchstaben bezeichnen die section, zu der das Symbol gehört.
d ist .data, t ist .text, b ist .bss. a wäre ein absolutes
Symbol (ein Registername zum Beispiel, hier weniger interessant),
w ein `weak' Symbol. (Die memory sections selbst sind in der
avr-libc Doku beschrieben.)
Großbuchstaben beschreiben globale Symbole (die also in mehreren
Quelldateien zugreifbar sind), Kleinbuchstaben sind modul-lokale
Symbole (in C also Dinge, die auf globaler Ebene mit dem Wort
`static' markiert worden sind). `weak' nennt man ein globales
Symbol, das in einer Bibliothek definiert ist, aber von der
Applikation überschrieben werden kann, indem sie selbst eins
definiert. Nicht `weak' globale Symbole würden in solch einem
Falle einen `duplicate defined' Fehler bringen.
Da, wie schon geschrieben, .data und .bss einen Offset von
0x800000 haben, stehen sie bei avr-nm -n hintendran.
Du kannst in C eigene sections festlegen, siehe Doku. Aber
ich weiß nicht, warum Du das willst -- Dein Problem wird das
gewiß nicht lösen. Du mußt vielmehr analysieren, welche
Deiner Variablen so viel Platz brauchen.
Irgendwo gibt's noch ein Tool namens avr-sizex, das soll wohl
auch die Größe der Objekte mit ausgeben können. Die Größe
kann man aus der Differenz zum nächsten Objekt selbst ausrechnen.
Alternativ schau Dir mal an, wie das mit avr-nm --size-sort
aussieht, das macht die Berechnung für Dich.