Hallo,
ich bin dabei mich in Cortex-M3 einzuarbeiten und habe mir mit
crosstool-ng einen ARM GCC gebaut. Wenn ich nun damit ein einfaches
Programm übersetze dann habe ich habe ein ähnliches Problem wie in den
Beiträgen:
- Beitrag "LPC1788 - startup / .ld-script"
- https://embdev.net/topic/129784
Wenn ich eine long-long-Division im Code habe, dann generiert der Linker
anscheinend 32-bit Code:
1 | 15c: f000 e804 blx 168 <__aeabi_uldivmod>
|
Die Lösung in obigen Threads war die MCU beim Linken anzugeben, aber
mein Linker-Befehl verwendet schon die -mthumb -mcpu=cortex-m3 Optionen:
1 | arm-none-eabi-gcc -mthumb -mcpu=cortex-m3 -nostartfiles \
|
2 | -Wl,--build-id=none,-Map=test.map,--cref,--gc-sections \
|
3 | -Tlpc17xx.ld -o test.elf libtest.a
|
Im Map-File kann ich erkennen dass die korrekte Multilib für die
Division verwendet wurde (4.8.3/thumb/libgcc.a).
Ich habe das selbe Programm mit dem GCC von LPCXpresso übersetzt (mit
exakt demselben Makefile, nur der Pfad zum GCC war anders) und im
Kompilat vom LPCXpresso-gcc wird nun ein thumb-branch verwendet:
1 | 15c: f000 f804 bl 168 <__aeabi_uldivmod>
|
Nun denke ich dass mein selbstgebauter GCC falsch konfiguriert ist. Ich
habe Multilib aktiviert, aber sonst die meisten Einstellungen nicht
verändert; MCU Architektur gebe ich bei der Kompilation und beim Linken
an. Beim Vergleichen von der Konfiguration der beiden GCC kann ich den
Schuldigen nicht finden. Die Konfiguration von meinem GCC und dem von
LPCXpresso, sowie ein kleines Beispielprogramm sind angehängt.
Kann mir jemand helfen wie ich in mein Programm 100% thumb-code bekomme?
Vielen Dank,
Thomas