Forum: Compiler & IDEs Linker generiert nicht-thumb Code für Divisionen


von Thomas P. (tpircher) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

: Bearbeitet durch User
von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Hilft wahrscheinlich nur mittelbar: gute Informationen für den Selbstbau 
einer ARM-Cross-Toolchain aus den Quellcodes finden sich im GIT von 
devkitPro auf sourceforge. Dort vor Allem die Scripte und Patch-Dateien 
im buildcripts-Verzeichnis.

von Thomas P. (tpircher) Benutzerseite


Lesenswert?

Hallo Martin,

devkitPro ist ein interessantes Projekt, ich kannte es nocht nicht. Ich 
hatte meine Konfiguration mit der von 
https://launchpad.net/gcc-arm-embedded verglichen, aber keine großen 
Unterschiede gefunden.

Sei's drum, mittlerweile habe ich mir insofern geholfen, dass ich den 
GCC nicht mehr generell für ARM + multilib kompiliere, sondern speziell 
für meine Target-Plattform (Cortex-M3) optimiere. Und soweit have ich 
keine Probleme mit diser Toolchain.

Thomas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.