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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.