Forum: Mikrocontroller und Digitale Elektronik ARM-Cortex-calling convention info aus objectfile bekommen


von Jojo S. (Gast)


Lesenswert?

Ich habe ein LPC4088QSB von EA und darauf eine Beispiel App mit mbed und 
der freien Segger emWin Grafiklib laufen. Das Ganze mit dem mbed Online 
Compiler funktioniert auch nach einer Anleitung auf der mbed site. Dazu 
muss man die emWin lib von lpcware.com runterladen die nur als 
kompiliertes Archiv in der kostenlosen Version verfügbar ist. Die Lib 
ist mit hardware floating point Unterstützung kompiliert, aber da gibt 
es ja auch noch die Varianten abi-hard und abi-soft. Wenn ich zum 
Debuggen das Projekt nun für LPCXpresso exportiere meckert der Linker 
weil die 'floating point usage' nicht passen: 'my program uses VFP 
registers, libemWin_m4pf does not'.
Der Linker weiss also wie die calling convention aussieht, und meine 
Frage ist nun: wie komme ich an diese Info wenn ich eine Lib oder ein 
objectfile habe? Ich habe schon die tools wie ar und objdump auf die Lib 
losgelassen, finde da aber keine Option die mir Infos liefert wie die 
Quellen compiliert wurden.

von holger (Gast)


Lesenswert?

>Ich habe schon die tools wie ar und objdump auf die Lib
>losgelassen,

Wozu?

>Varianten abi-hard und abi-soft.

Stell nacheinander beide mal ein. Bei einer wirds schon
klappen. Muss man da so einen Film von drehen?

von Jojo S. (Gast)


Lesenswert?

Die soft Variante funktioniert, aber erst nachdem ich die mbed quellen 
runtergeladen habe und die mbed lib auch mit der soft variante erstellt 
hatte. Und merkwürdigerweise schluckt der mbed Online Compiler die emWin 
lib obwohl der eigentlich mit der hard Variante arbeitet.
Da bin ich neugierig und möchte wissen warum das so ist.
Richtig rund lief das auch erst mit -O2 Compiler Option, ohne gab es 
hard faults in printf oder einfachen FP Operationen.

von Dr. Sommer (Gast)


Lesenswert?

Probier mal
1
arm-none-eabi-readelf -A datei.o
Die Zeile mit "Tag_ABI_VFP_args:" gibt Aufschluss.

von Jojo S. (Gast)


Lesenswert?

danke, das geht doch schon mal in die richtige Richtung. Die VFP_Args 
werden allerdings nicht gelistet, dann wird es irgendein default sein?
1
Attribute Section: aeabi
2
File Attributes
3
  Tag_CPU_name: "Cortex-M4"
4
  Tag_CPU_arch: v7E-M
5
  Tag_CPU_arch_profile: Microcontroller
6
  Tag_THUMB_ISA_use: Thumb-2
7
  Tag_ABI_PCS_wchar_t: 4
8
  Tag_ABI_FP_denormal: Needed
9
  Tag_ABI_FP_exceptions: Needed
10
  Tag_ABI_FP_number_model: IEEE 754
11
  Tag_ABI_align_needed: 8-byte
12
  Tag_ABI_align_preserved: 8-byte, except leaf SP
13
  Tag_ABI_enum_size: small
14
  Tag_ABI_optimization_goals: Aggressive Size
15
  Tag_CPU_unaligned_access: v6

von Dr. Sommer (Gast)


Lesenswert?

Jojo S. schrieb:
> Die VFP_Args
> werden allerdings nicht gelistet, dann wird es irgendein default sein?
Dann ists vermutlich soft, also Übergabe nicht über die FPU-Register, 
weil das würde angezeigt.

von Jojo S. (Gast)


Lesenswert?

ja, das kann ich jetzt nachvollziehen: der vorherige elf-output wurde 
mit den Compiler Optionen "-mfpu=fpv4-sp-d16" und "-mfloat-abi=soft" 
generiert.

mit "-mfpu=fpv4-sp-d16" und "-mfloat-abi=hard" kommen die VFP Tags 
hinzu:
1
  Tag_ABI_HardFP_use: SP and DP
2
  Tag_ABI_VFP_args: VFP registers

Der mbed Online Compiler kommt trotzdem mit der soft-lib klar, d.h. die 
linken gegen eine soft-mbed lib oder kann der Linker stubs zur 
Konvertierung einfügen? In den LPCXpresso Einstellungen habe ich soetwas 
jedenfalls nicht gefunden.

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.