MSP430 GCC4.9 linker

#3706076
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
#3706128
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren