PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : gcc/as - problem: relocation truncated bei .extern



RedEagle
01.12.2010, 08:15
Hi

Ich habe folgenden Code:
C-Code

// Globale Variablen
struct TASK tasks[MAXTASKS];
void *tastarray = &tasks;

ASM-Code

.data
.extern .word tastarray

wenn ich das nun linke:...

avr-gcc -mmcu=atmega128 -x assembler-with-cpp -Wa,-gdwarf2 -c -o asm.o asm.s
avr-gcc $INCLUDEDIR -mmcu=atmega128 -Wall -gdwarf-2 -O0 -c -o main.o main.c
avr-gcc -mmcu=atmega128 -s -m avr5 main.o asm.o $LIBDIR -lm -o bin.elf
... bekomme ich folgende Fehlermeldung:

asm.o: In function `__vector_12':
/home/redeagle/avr/ts/./asm.s:83: relocation truncated to fit: R_AVR_LDI against symbol `tastarray' defined in .data section in main.o
/home/redeagle/avr/ts/./asm.s:84: relocation truncated to fit: R_AVR_LDI against symbol `tastarray' defined in .data section in main.o


Hat jemand 'ne Idee was ich falsch gemacht habe?
----
OK, fehler gefunden :)
Wenn man weiß was der Linker mit relocation truncated meint ist es recht einfach - die Variable ist 16bit groß, der Compiler hat aber nur platz für eine 8 bit variable hinterlassen. Und da bekommt der Linker die Variable nicht rein.