Forum: Compiler & IDEs Crosscompiling avr-gcc


von Daniel (root) (Gast)


Lesenswert?

-c ../../../../libgcc/../gcc/config/avr/libgcc.S
../../../../libgcc/../gcc/config/avr/libgcc.S: Assembler messages:
../../../../libgcc/../gcc/config/avr/libgcc.S:876: Error: illegal opcode 
elpm for mcu avr5
../../../../libgcc/../gcc/config/avr/libgcc.S:877: Error: illegal opcode 
elpm for mcu avr5
make[4]: *** [_tablejump_elpm.o] Error 1

Meine Compiler:
source von gcc-core 4.4.1
gcc (GCC) 4.1.3 20080704 (prerelease) (Debian 4.1.2-25)

Hat jemand eine Ahnung wie man das Problem beseitigen kann?

Grüsse

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Ist elpm for core avr5 erlaubt?

Falls ja, ist es ein Fehler in den avr-binutils.
Falls nein, ist es ein Fehler in avr-gcc (resp. libgcc).

Ergo: Andere Version(en) verwenden oder Quelle patchen ;-)

Johann

von Daniel (root) (Gast)


Lesenswert?

Danke Johann. Ich bin jetzt auf gcc-4.3.3 umgestiegen und es klappt.
Ich hab den Compiler und die binutils intstalliert.
Mir bleibt nur noch die libc zu kompilieren.
Ich nehme an, dass dieser Schritt sowohl den neuen Compiler
sowie die binutils benötigt. (da ja die lib mit dem avr compiler
bearbeitet wird und nicht mit dem für x86-64)

Ich habe aber auf dem System noch einen avr-gcc sowie die
entsprechende binutils (avr-nm, avr-objcopy, etc).
Wenn ich configure --help anschaue, werde ich nicht schlau,
wie ich den Skript auf den neuen Compiler/binutils ansetzen kann.

Von der Regel Gebrauch machen, dass in PATH zuerst vorkommende
Programme zuerst benutzt werden? Scheint mir irgendwie unsauber.
Den Compilerpfad kann ich wahrscheinlich mit ./configure 
CC=/neuerpfad/gcc
festlegen.

Grüsse, Daniel

von Daniel (root) (Gast)


Lesenswert?

1
Configured with: ../configure --prefix=/opt/avr/gcc --target=avr --enable-languages=c --disable-nls --disable-libssp
2
Thread model: single
3
gcc version 4.3.3 (GCC) 
4
configure:3124: $? = 0
5
configure:3131: avr-gcc -V >&5
6
avr-gcc: '-V' option must have argument
7
configure:3135: $? = 1
8
configure:3158: avr-gcc -o conftest   /opt/avr/gcc/lib conftest.c  >&5
9
/tmp/ccEXN5ec.s: Assembler messages:
10
/tmp/ccEXN5ec.s:15: Error: too many memory references for `in'
11
/tmp/ccEXN5ec.s:16: Error: too many memory references for `in'
12
/tmp/ccEXN5ec.s:19: Error: no such instruction: `ldi r24,lo8(0)'
13
/tmp/ccEXN5ec.s:20: Error: no such instruction: `ldi r25,hi8(0)'
14
configure:3162: $? = 1
15
configure:3361: checking whether we are cross compiling
16
configure:3363: result: yes
17
configure:3367: checking for suffix of object files
18
configure:3393: avr-gcc -c   conftest.c >&5
19
/tmp/cczPenSg.s: Assembler messages:
20
/tmp/cczPenSg.s:15: Error: too many memory references for `in'
21
/tmp/cczPenSg.s:16: Error: too many memory references for `in'
22
/tmp/cczPenSg.s:19: Error: no such instruction: `ldi r24,lo8(0)'
23
/tmp/cczPenSg.s:20: Error: no such instruction: `ldi r25,hi8(0)'
24
configure:3397: $? = 1
25
configure: failed program was:
26
| /* confdefs.h.  */
27
| #define PACKAGE_NAME "avr-libc"
28
| #define PACKAGE_TARNAME "avr-libc"
29
| #define PACKAGE_VERSION "1.6.7"
30
| #define PACKAGE_STRING "avr-libc 1.6.7"
31
| #define PACKAGE_BUGREPORT "avr-libc-dev@nongnu.org"
32
| #define PACKAGE "avr-libc"
33
| #define VERSION "1.6.7"
34
| /* end confdefs.h.  */
35
| 
36
| int
37
| main ()
38
| {
39
| 
40
|   ;
41
|   return 0;
42
| }
43
configure:3412: error: cannot compute suffix of object files: cannot compile
44
See `config.log' for more details.


Was kann das Problem sein?
Probiert man ein minimales Program zu kompilieren, kommt auch ...

Error: too many memory references for `in'
Error: too many memory references for `in'
Error: no such instruction: `ldi r24,lo8(0)'
Error: no such instruction: `ldi r25,hi8(0)'

scheint als wäre der Compiler nicht in der Lage object Datei
zu erzeugen.

Natürlich klappt es nicht mit libc :-/

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sieht aus als würde der falsche Assembler genommen (as?).

Hast du avr-gcc und binutils im gleichen Pfad installiert? gcc geht 
teilweise von dem Standard-Layout aus und wenn er nix findet wird eben 
der normale as genommen. as gibts ja auch in $INSTALL/avr/bin, und wenn 
der net gefunden wird, wird's nen anderer as.

Bei meinem 'privaten' gcc (nicht für AVR) mache ich den build für die 
newlib genauso wie gmp und mpfr auch: Einfach nen Softlink in die 
Toplevel GCC-Quelle als "newlib". Das GCC-configure erkennt das und baut 
ne korrekte Target-Newlib.

Ich weiß net wie Jörg die avr-libc aufgezogen hat und ob ein 
In-Tree-Build funktioniert. Wär jedenfalls ein Versuch wert und ist 
deutlich einfacher wenn's geht, vor allem wenn du ein Cross-Build machen 
willst (zB unter Linux einen avr-gcc für MinGW bauen willst).

Johann

von Daniel (root) (Gast)


Lesenswert?

>Ich weiß net wie Jörg die avr-libc aufgezogen hat und ob ein
>In-Tree-Build funktioniert. Wär jedenfalls ein Versuch wert und ist
>deutlich einfacher wenn's geht, vor allem wenn du ein Cross-Build machen
>willst (zB unter Linux einen avr-gcc für MinGW bauen willst).

ich hab mich doof angestellt ;)

in-tree-build hat funktioniert. Als --prefix= habe ich denselben
Ordner angebenen, in dem schon binutils und gcc drin sind.

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.