Forum: Compiler & IDEs Probleme beim Bau einer Toolchain mit gcc-3.3.3


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von J. K. (jkraemer)


Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,
seit geraumer Zeit versuche ich verzweifelt eine vorgegebene Toolchain 
(u.a. mit gcc-3.3.3) ans Laufen zu bekommen. Es handelt sich hierbei um 
einen Cross-Compiler für einen PowerPC (Motorola MPC8250).
Das Entwicklungssystem ist ein schickes Debian Squeeze: kernel 2.6.32-5, 
gcc-4.4.5 und einem etwas älteren gcc-3.4.

Beim Kompilieren bricht er an einer Stelle ab und bringt jede Menge 
Fehlermeldungen:
verzeichnis/gcc-3.3.3/gcc/cp/decl.c -o cp/decl.o
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘push_binding_level’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:727: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘pop_binding_level’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:783: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘suspend_binding_level’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:800: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:819: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘resume_binding_level’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:832: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘pushdecl_with_scope’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:4559: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:4561: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘cxx_init_decl_processing’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:6964: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘grokdeclarator’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:10816: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:10819: error: lvalue required as left operand of assignment
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c: In function ‘start_function’:
/verzeichnis/gcc-3.3.3/gcc/cp/decl.c:14465: error: lvalue required as left operand of assignment
In file included from /verzeichnis/gcc-3.3.3/gcc/cp/decl.c:15472:
./gtype-cp.h: In function ‘gt_ggc_mx_lang_decl’:
./gtype-cp.h:354: warning: case label value exceeds maximum value for type
./gtype-cp.h: In function ‘gt_ggc_mx_lang_type’:
./gtype-cp.h:396: warning: case label value exceeds maximum value for type
make[2]: *** [cp/decl.o] Fehler 1
make[2]: Leaving directory `/verzeichnis/gcc-3.3-final/gcc'
make[1]: *** [all-gcc] Fehler 2
make[1]: Leaving directory `/verzeichnis/gcc-3.3-final'
make: *** [/verzeichnis/gcc-3.3-final/.compiled] Fehler 2

Jetzt habe ich mich in der besagten Datei decl.c ein wenig umgeschaut.
Um Zeile 680 herum wird current_binding_level definiert:
#define current_binding_level      \
  (cfun && cp_function_chain->bindings    \
   ? cp_function_chain->bindings    \
   : scope_chain->bindings)
In allen Zeilen, die die Fehlermeldungen verursachen, wird in 
current_binding_level irgendetwas reingeschrieben. Jetzt wird in 
current_binding_level natürlich selbst nichts reingeschrieben, sondern 
in eine der beiden Strukturen, die im #define erwähnt werden. Das 
scheint aber irgendwie nicht zu funktionieren...

Hat jemand eine Idee woran es liegt? Es kann doch nicht sein, dass ein 
frisch heruntergeladenes gcc-3.3.3 sich nicht kompilieren lässt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
J. Krämer schrieb:
> Es kann doch nicht sein, dass ein
> frisch heruntergeladenes gcc-3.3.3 sich nicht kompilieren lässt.

Doch, offenbar schon. ;-)  Da war wohl der Parser in älteren
Versionen etwas laxer in dem, was er an nicht standardgemäßer
Syntax noch durchgehen lassen hat.

Entweder beschaffst du dir einen hinreichend alten Hostcompiler
dafür (vermutlich wird jede 3.x-Version noch gehen), oder du
dröselst diese Bugs wirklich auf, indem du aus jeder der
angemoserten Zuweisungen eine if-Anweisung machst.  Das lässt
sich eventuell ja trotzdem noch über ein #define vereinfachen,
so in der Art
#define set_current_binding_level(lev) \
  do { \
    if (cfun && cp_function_chain->bindings)    \
       cp_function_chain->bindings = (lev);   \
    else \
       scope_chain->bindings = (lev); \
  } while(0)

und dann alle Statements der Art

current_binding_level = \(.*\);

durch

set_current_binding_level(\1);

ersetzen.  Den alten Makro current_binding_level wirst du sicher
trotzdem noch lassen müssen, denn ich vermute ganz stark, dass der
auch auf der rechten Seite in Ausdrücken benutzt wird.

von Olaf D. (Firma: O.D.I.S.) (dreyero)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

stell mal sicher, dass Du den X-Compiler mit dem gcc-3.x.x übersetzt:
probier mal "gcc --version"

Gruß

Olaf

von J. K. (jkraemer)


Bewertung
0 lesenswert
nicht lesenswert
Ich habe den "Fehler" vermutlich beheben können.
In der initialen Makefile hatte ich gcc-3.4 angegeben, aber es werden 
anscheinend weitere aufgerufen, die einfach nur gcc verwenden.
Daraufhin habe ich in /usr/bin den Softlink gcc geändert. Jetzt zeigt 
gcc nicht mehr auf gcc-4.4, sondern auf gcc-3.4 und es läuft momentan 
sehr gut durch.
Nun heißt's abwarten und Tee trinken :-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
env CC=gcc-3.4 ../configure

sollte da eigentlich helfen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.