Kompilieren einer einfachen HelloWorld.c mit Clang/LLVM (Arm-None-Eabi-Ziel) erzeugt einen Umzug Abschnitt '. rel.ARM.exxidx aber nicht mit arm-gcc. Diese LLVM-erzeugten Abwickeltischeinträge werden korrekt als Canunwind markiert. Aber warum werden sie überhaupt produziert, weil sie nicht benötigt werden, und verursachen einfach Blähungen, wenn Sie für jede C-Funktion in Ihrem AXF einen Eintrag erhalten?LLVM (arm-none-eabi target) erstellt einen ARM.exidx-Abschnitt für C-basierten Code (?)
readelf edxidx from HelloWorld.o
Relocation section '.rel.ARM.exidx' at offset 0x580 contains 2 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000b2a R_ARM_PREL31 00000000 .text
00000008 00000b2a R_ARM_PREL31 00000000 .text
Unwind table index '.ARM.exidx' at offset 0xcc contains 2 entries:
0x0 <print_uart0>: 0x1 [cantunwind]
0x54 <c_entry>: 0x1 [cantunwind]
Im Test Clang Standardwerte: Wenn ich „-funwind-Tabellen“ auf Clang passieren Abwickeln zu zwingen, selbst für C-Funktionen, bekomme ich, was ich ich CPP-Funktionen geschrieben und „-fno-Abroller erwarten war -Tabellen "ergibt dasselbe wie oben.
Relocation section '.rel.ARM.exidx' at offset 0x5a4 contains 4 entries:
Offset Info Type Sym.Value Sym. Name
00000000 00000b2a R_ARM_PREL31 00000000 .text
00000000 00001600 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0
00000008 00000b2a R_ARM_PREL31 00000000 .text
00000008 00001600 R_ARM_NONE 00000000 __aeabi_unwind_cpp_pr0
Unwind table index '.ARM.exidx' at offset 0xcc contains 2 entries:
0x0 <print_uart0>: 0x8001b0b0
Compact model index: 0
0x01 vsp = vsp + 8
0xb0 finish
0xb0 finish
0x54 <c_entry>: 0x809b8480
Compact model index: 0
0x9b vsp = r11
0x84 0x80 pop {r11, r14}
1) Gibt es trotzdem den .ARM.exidx Abschnitt auszuschalten, wenn nur C-Funktionen verwenden, wie sie immer als „cantunwind“ gekennzeichnet werden.
2) Wie auch immer, um diesen Abschnitt während der Verknüpfung zu entfernen? (gc-Abschnitt wird natürlich nicht funktionieren, da diese Tabelleneinträge auf Funktionen verweisen)
3) Warum erstellt arm-gcc diesen Abschnitt nicht (gut, wenn Sie neue lib, nano usw. verwenden). . aber ich benutze und verbinde keine std libs)
Ich würde lieben, diesen auch zu quetschen - gepriesen! –
Es ist wie Grillen hier ... –