Forum: Compiler & IDEs MSP430 GCC4.9 linker


von Lukas K. (carrotindustries)


Lesenswert?

Mittlerweile ist der GCC4.9 fertig und unterstützt auch die MSP430. 
Gebaut bekommen habe ich ihn: PKGBUILD des Archlinux-Paketes für 
arm-none-eabi und eigentlich nur arm-none-eabi durch msp430-elf ersetzt. 
Allerdings musste ich die binutils ausm git nehmen, da der gcc4.9 
assembler-direktiven auswirft, die der Assembler von binutils 2.4 nicht 
versteht...

Header und Linkerscripte gibt's von TI: 
http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPGCC/latest/exports/GCC_RH_20140508.zip 
(von denen gibt's auch nen vorkompilierten GCC, allerdings 4.8)

Wenn ich meine Objektdateien zur (fast) fertigen executable 
zusammenlinken will fehlen allerdings immer der reset-vektor. Dieser 
muss in der section .resetvec liegen, damit in der Linker mit dem 
linkerscript in die richtige Stelle im Speicher werfen kann. Wenn ich 
ganz normal linke mit  msp430-elf-ld main.o  -dT msp430g2452.ld 
-L/usr/msp430-elf/lib/430  -lcrt  -lc  -o main.elf fehlt in der main.elf 
die .resetvec section. Ist auch nicht sehr verwunderlich, da weder in 
der libcrt.a noch in der libc.a eine .resetvec section drin ist. Wenn 
ich dem Linker allerdings die crt0.o direkt mitgebe, dann ist die 
section drin (weil sie in der crt0.o enthalten ist)

Mit dem vorkompilierten GCC von TI verhält sich's genau so.

Mache ich irgendwas grundsätzlich falsch oder einfach nur 'here be 
dragons'?

Lukas

von Andreas B. (andreas_b77)


Lesenswert?

Lukas K. schrieb:
> Allerdings musste ich die binutils ausm git nehmen, da der gcc4.9
> assembler-direktiven auswirft, die der Assembler von binutils 2.4 nicht
> versteht...

Sicher meinst du die 2.24…

> Wenn ich meine Objektdateien zur (fast) fertigen executable
> zusammenlinken will fehlen allerdings immer der reset-vektor. Dieser
> muss in der section .resetvec liegen, damit in der Linker mit dem
> linkerscript in die richtige Stelle im Speicher werfen kann. Wenn ich
> ganz normal linke mit  msp430-elf-ld main.o  -dT msp430g2452.ld
> -L/usr/msp430-elf/lib/430  -lcrt  -lc  -o main.elf fehlt in der main.elf
> die .resetvec section.

Normalerweise linkt man mit dem gcc. Wenn man direkt mit ld linkt, muss 
man eben auch solche Dinge von Hand einfügen.

von Lukas K. (carrotindustries)


Lesenswert?

Andreas B. schrieb:
> Sicher meinst du die 2.24…
ups…

Andreas B. schrieb:
> Normalerweise linkt man mit dem gcc. Wenn man direkt mit ld linkt, muss
> man eben auch solche Dinge von Hand einfügen.

Der GCC linkt so wie im ersten Beispiel mit -lcrt und -lc. Irgedwas muss 
also schon da kaputt sein.

von Andreas B. (andreas_b77)


Lesenswert?

Mit dem MSP430 Fall kenne ich mich jetzt nicht aus. Sachen wie "crt0.o 
fehlt" ist halt typisch für das direkte Verwenden des Linkers, linkt man 
mit gcc kümmert sich der halt um solche grundlegenden Dinge.

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.