Ich habe gerade eine Funktion in einem STM32 Projekt in den RAM
verschoben und dazu ein wenig das Linker Script verändert. In der .data
Section habe ich ein *(.bootldr) ergänzt und die entsprechende Funktion
mit __attribute__((section(".bootldr"))) markiert. Soweit funktioniert
auch alles, allerdings gibt mir arm-none-eabi-size jetzt eine völlig
falsche Größe für die .data Section:
1 | text data bss dec hex filename
|
2 | 43012 8 5720 48740 be64 cart_stm32.elf
|
Mit dem -A Flag erhalte ich dann folgende Ausgabe:
1 | cart_stm32.elf :
|
2 | section size addr
|
3 | .isr_vector 268 134217728
|
4 | .text 39992 134218000
|
5 | .rodata 1860 134257992
|
6 | .init_array 4 134259852
|
7 | .fini_array 4 134259856
|
8 | .data 892 536870912
|
9 | .bss 4184 536871808
|
10 | ._user_heap_stack 1536 536875992
|
11 | .ARM.attributes 41 0
|
12 | .comment 29 0
|
13 | .debug_frame 3132 0
|
14 | Total 51942
|
Hier passt die Größe der Sections. Wenn ich das richtig sehe, dann
ergeben sich bei der ersten Variante im Berkeley Format die Größen wie
folgt:
text = .isr_vector + .text + .rodata + .data.
data = .data
bss = .bss + ._user_heap_stack
So war es zumindest bevor ich die RAM Funktion hinzugefügt habe. Wieso
wird jetzt der völlig absurde Wert von 8 angezeigt?