Kérkel segíts, hogy ne maradjon hibás információ az oldalon!
Ha szerinted valami nem fedi a valóságot, kérlek írd meg, hogy javítani tudjam. Ha kérdésed van, fordulj hozzám bizalommal!

2008. október 31., péntek

Az AVR-GCC 3.3.6 fordítási hiba elhárítása

Már vagy egy éve nem sikerül lefordítani az AVR gcc-t. Mindig assembler hibával lépett ki, jelezve, hogy nincs egy-két parancs. A gentoohoz ajánlott
# crossdev -t avr
parancsot használtam mindeddig. Sajnos, sehol nem találtam megoldást a problémára. Volt, ahol azt ajánlották valakinek, hogy frissítse a host gcc-t. Uccu neki, én is nekiláttam, de szerencsére az is hibával kilépett a fordításból. Általában itt szokott lenni az a pont, ahol eddig feladtam. De most még hozzátettem egy picit, és a kicsomagolt forrás könyvtárából kezdtem el a fordítást.
Még így sem volt jó sokáig szerencsém, hiába néztem a bug trackereket és google-t.

A hiba:
../../gcc/config/avr/libgcc.S: Assembler messages:
../../gcc/config/avr/libgcc.S:72: Error: suffix or operands invalid for `clr'
../../gcc/config/avr/libgcc.S:72: Error: no such instruction: `clear result'
../../gcc/config/avr/libgcc.S:74: Error: no such instruction: `sbrc r24,0'
../../gcc/config/avr/libgcc.S:75: Error: too many memory references for `add'
../../gcc/config/avr/libgcc.S:76: Error: too many memory references for `add'
../../gcc/config/avr/libgcc.S:76: Error: no such instruction: `shift multiplicand'
../../gcc/config/avr/libgcc.S:77: Error: no such instruction: `breq __mulqi3_exit'
../../gcc/config/avr/libgcc.S:77: Error: no such instruction: `while multiplicand!=0'
../../gcc/config/avr/libgcc.S:78: Error: no such instruction: `lsr r24'
../../gcc/config/avr/libgcc.S:79: Error: no such instruction: `brne __mulqi3_loop'
../../gcc/config/avr/libgcc.S:79: Error: no such instruction: `exit if multiplier=0'
../../gcc/config/avr/libgcc.S:81: Error: too many memory references for `mov'
../../gcc/config/avr/libgcc.S:81: Error: no such instruction: `result to return register'


Az út a megoldáshoz:

Betartottam az install leírásokban láthatókat, annyi a különbség, hogy a crossdev csomagolta ki a forrást és így patchelte is.

# cd [a forrás könyvtárához]
# mkdir obj-avr
# ../configure --prefix=/usr --bindir=/usr/i686-pc-linux-gnu/avr/gcc-bin/3.3.6 --includedir=/usr/lib/gcc-lib/avr/3.3.6/include --datadir=/usr/share/gcc-data/avr/3.3.6 --mandir=/usr/share/gcc-data/avr/3.3.6/man --infodir=/usr/share/gcc-data/avr/3.3.6/info --with-gxx-include-dir=/usr/lib/gcc-lib/avr/3.3.6/include/g++-v3 --host=i686-pc-linux-gnu --target=avr --build=i686-pc-linux-gnu --disable-altivec --enable-nls --without-included-gettext --with-system-zlib --disable-checking --disable-werror --enable-secureplt --disable-libgcj --enable-languages=c --enable-shared --disable-threads --disable-libunwind-exceptions
&& make clean && make all

A configure bemenete egy-az egyben a crossdev logból van. A path-hoz hozzáadtam az avr-binutils bin könyvátrát:
# export PATH=/usr/i686-pc-linux-gnu/avr/binutils-bin/2.16.1:$PATH

Ekkor megszűnik a fenti hibaüzenet és jön helyette egy másik :D

Ez a 14149-es bugban leírt hibaüzenet, amire tényleg megoldás a válaszban található patch
ami azt teszi, hogy a forrás könyvtárban állva a
# joe gcc/config/avr/avr.h
a szerkesztő használatával a
#define BASE_REG_CLASS POINTER_REGS
sort kicseréljük a
#define BASE_REG_CLASS (reload_completed ? BASE_POINTER_REGS : POINTER_REGS)
sorra.

És máris boldogan lefordul a gcc-nk! :D
A telepítéshet:
# make install

Nincsenek megjegyzések: