Гугление по данной ошибке ничего не нашлось, но поиск grep'ом показал, что toplev.c:999 использует yydebug = 1, но нигде в проекте она не инициализируется, только (extern int yydebug).
В /usr/local/share/bison.simple есть такой код
#ifdef YYDEBUG
int yydebug = 0; /* nonzero means print parse trace */
#endif
пробуем собрать с опцией YYDEBUG
myname# make CFLAGS=' -g -I. -DYYDEBUG'
cc -c -g -I. -DYYDEBUG gcc.c
cc -g -I. -DYYDEBUG -c obstack.c
ld -o gcc /lib/crt0.o gcc.o -lg obstack.o -lc
cc -g -I. -DYYDEBUG -c toplev.c
bison -v parse.y
parse.y contains 12 shift/reduce conflicts.
cc -g -I. -DYYDEBUG -c parse.tab.c
cc -g -I. -DYYDEBUG -c tree.c
cc -g -I. -DYYDEBUG -c print-tree.c
cc -g -I. -DYYDEBUG -c decl.c
cc -g -I. -DYYDEBUG -c typecheck.c
cc -g -I. -DYYDEBUG -c stor-layout.c
cc -g -I. -DYYDEBUG -c fold-const.c
cc -g -I. -DYYDEBUG -c varasm.c
cc -g -I. -DYYDEBUG -c rtl.c
cc -c -g -I. -DYYDEBUG genflags.c
cc -o genflags -g genflags.o rtl.o obstack.o
genflags md > insn-flags.h
cc -c -g -I. -DYYDEBUG gencodes.c
cc -o gencodes -g gencodes.o rtl.o obstack.o
gencodes md > insn-codes.h
cc -g -I. -DYYDEBUG -c expr.c
cc -g -I. -DYYDEBUG -c stmt.c
cc -g -I. -DYYDEBUG -c expmed.c
cc -g -I. -DYYDEBUG -c explow.c
cc -c -g -I. -DYYDEBUG genconfig.c
cc -o genconfig -g genconfig.o rtl.o obstack.o
genconfig md > insn-config.h
cc -g -I. -DYYDEBUG -c optabs.c
cc -g -I. -DYYDEBUG -c symout.c
cc -g -I. -DYYDEBUG -c dbxout.c
cc -g -I. -DYYDEBUG -c emit-rtl.c
cc -c -g -I. -DYYDEBUG genemit.c
cc -o genemit -g genemit.o rtl.o obstack.o
genemit md > insn-emit.c
cc -c -g -I. -DYYDEBUG insn-emit.c
cc -g -I. -DYYDEBUG -c jump.c
cc -g -I. -DYYDEBUG -c cse.c
cc -g -I. -DYYDEBUG -c loop.c
cc -g -I. -DYYDEBUG -c flow.c
cc -g -I. -DYYDEBUG -c stupid.c
cc -g -I. -DYYDEBUG -c combine.c
cc -g -I. -DYYDEBUG -c regclass.c
cc -g -I. -DYYDEBUG -c local-alloc.c
cc -g -I. -DYYDEBUG -c global-alloc.c
cc -g -I. -DYYDEBUG -c reload.c
cc -g -I. -DYYDEBUG -c reload1.c
cc -g -I. -DYYDEBUG -c final.c
cc -g -I. -DYYDEBUG -c recog.c
cc -c -g -I. -DYYDEBUG genrecog.c
cc -o genrecog -g genrecog.o rtl.o obstack.o
genrecog md > insn-recog.c
cc -c -g -I. -DYYDEBUG insn-recog.c
cc -c -g -I. -DYYDEBUG genextract.c
cc -o genextract -g genextract.o rtl.o obstack.o
genextract md > insn-extract.c
cc -c -g -I. -DYYDEBUG insn-extract.c
cc -c -g -I. -DYYDEBUG genoutput.c
cc -o genoutput -g genoutput.o rtl.o obstack.o
genoutput md > insn-output.c
cc -c -g -I. -DYYDEBUG insn-output.c
ld -o cc1 /lib/crt0.o toplev.o parse.tab.o tree.o print-tree.o decl.o typecheck.o stor-layout.o fold-const.o varasm.o rtl.o expr.o stmt.o expmed.o explow.o optabs.o symout.o dbxout.o emit-rtl.o insn-emit.o jump.o cse.o loop.o flow.o stupid.o combine.o regclass.o local-alloc.o global-alloc.o reload.o reload1.o final.o recog.o insn-recog.o insn-extract.o insn-output.o -lg obstack.o -lc
cc -g -I. -DYYDEBUG -c cccp.c
echo expect 40 shift/reduce conflicts
expect 40 shift/reduce conflicts
yacc cexp.y
conflicts: 40 shift/reduce
cc -g -I. -DYYDEBUG -c y.tab.c
cc -o cccp -g cccp.o y.tab.o
rm -f cpp
ln cccp cpp
myname#
Ура! В этот раз компиляция проходит успешно.
Попробуем компилятор в действии, напишем классический helloworld
myname# vi hello.c
#include <stdio.h>
int main() {
printf("Hello from gcc v0.9\n");
return 0;
}
myname# ./gcc -v -o hello hello.c
cpp -Dvax hello.c /tmp/cc000137.cpp
cc1 /tmp/cc000137.cpp -quiet -dumpbase hello.c -noreg -o /tmp/cc000137.s
as -o hello.o /tmp/cc000137.s
ld -o hello /lib/crt0.o hello.o -lc
_end: ld:user attempt to redfine loader-defined symbol
_main: hello.o: multiply defined
myname# ls -all /usr/tmp/gcc-0.9/hello
-rwxrwxr-x 1 root 8192 Feb 18 06:32 /usr/tmp/gcc-0.9/hello
myname# ./hello
Hello from gcc v0.9
myname#
Работает!
Идем дальше...
Далее по мануалу, необходимо удалить все объектные файлы и указать в качестве компилятора самого себя. Но...
myname# rm -f *.o
myname# make CC=./gcc CFLAGS="-g -O -I."
./gcc -c -g -O -I. gcc.c
Assembler:
"/tmp/cc001960.s", line 698: "jaoblss" is not followed by a ':' for a label definition
"/tmp/cc001960.s", line 794: "jaoblss" is not followed by a ':' for a label definition
"/tmp/cc001960.s", line 1187: "jaoblss" is not followed by a ':' for a label definition
"/tmp/cc001960.s", line 1399: "jaoblss" is not followed by a ':' for a label definition
"/tmp/cc001960.s", line 1429: "jaoblss" is not followed by a ':' for a label definition
"/tmp/cc001960.s", line 1691: "jaoblss" is not followed by a ':' for a label definition
./gcc -g -O -I. -c obstack.c
/usr/include/obstack.h: No such file or directory
In function _obstack_begin:
obstack.c:105: parse error
obstack.c:106: variable chunk used but not declared
obstack.c:106: undefined struct tag obstack
obstack.c:106: request for member chunk in something not a structure or union
obstack.c:107: parse error
obstack.c:107: undefined struct tag obstack
obstack.c:107: request for member chunk_size in something not a structure or union
obstack.c:108: undefined struct tag obstack
obstack.c:108: request for member next_free in something not a structure or union
obstack.c:108: undefined struct tag obstack
obstack.c:108: request for member object_base in something not a structure or union
obstack.c:108: variable chunk used but not declared
obstack.c:109: undefined struct tag obstack
obstack.c:109: request for member chunk_limit in something not a structure or union
obstack.c:109: variable chunk used but not declared
obstack.c:110: variable chunk used but not declared
obstack.c:110: undefined struct tag obstack
obstack.c:110: request for member chunk_size in something not a structure or union
obstack.c:111: variable chunk used but not declared
In function _obstack_newchunk:
obstack.c:126: parse error
obstack.c:127: redeclaration of _Ll
obstack.c:127: parse error
obstack.c:129: undefined struct tag obstack
obstack.c:129: request for member next_free in something not a structure or union
obstack.c:129: undefined struct tag obstack
obstack.c:129: request for member object_base in something not a structure or union
obstack.c:133: undefined struct tag obstack
obstack.c:133: request for member chunk_size in something not a structure or union
obstack.c:134: undefined struct tag obstack
obstack.c:134: request for member chunk_size in something not a structure or union
obstack.c:137: variable new_chunk used but not declared
obstack.c:137: undefined struct tag obstack
obstack.c:137: request for member chunk in something not a structure or union
obstack.c:137: parse error
obstack.c:138: variable new_chunk used but not declared
obstack.c:138: variable old_chunk used but not declared
obstack.c:139: variable new_chunk used but not declared
obstack.c:139: undefined struct tag obstack
obstack.c:139: request for member chunk_limit in something not a structure or union
obstack.c:139: variable new_chunk used but not declared
obstack.c:142: undefined struct tag obstack
obstack.c:142: request for member object_base in something not a structure or union
obstack.c:142: variable new_chunk used but not declared
obstack.c:143: undefined struct tag obstack
obstack.c:143: request for member object_base in something not a structure or union
obstack.c:143: variable new_chunk used but not declared
obstack.c:144: undefined struct tag obstack
obstack.c:144: request for member next_free in something not a structure or union
obstack.c:144: undefined struct tag obstack
obstack.c:144: request for member object_base in something not a structure or union
In function _obstack_free:
obstack.c:153: parse error
obstack.c:154: redeclaration of _Ll
obstack.c:154: parse error
obstack.c:156: variable lp used but not declared
obstack.c:156: undefined struct tag obstack
obstack.c:156: request for member chunk in something not a structure or union
obstack.c:157: variable lp used but not declared
obstack.c:157: variable lp used but not declared
obstack.c:157: variable lp used but not declared
obstack.c:159: variable plp used but not declared
obstack.c:159: variable lp used but not declared
obstack.c:160: variable lp used but not declared
obstack.c:161: variable lp used but not declared
obstack.c:161: variable plp used but not declared
obstack.c:163: variable lp used but not declared
obstack.c:165: undefined struct tag obstack
obstack.c:165: request for member object_base in something not a structure or union
obstack.c:165: undefined struct tag obstack
obstack.c:165: request for member next_free in something not a structure or union
obstack.c:166: undefined struct tag obstack
obstack.c:166: request for member chunk_limit in something not a structure or union
obstack.c:166: variable lp used but not declared
obstack.c:167: undefined struct tag obstack
obstack.c:167: request for member chunk in something not a structure or union
obstack.c:167: variable lp used but not declared
ld -o gcc /lib/crt0.o gcc.o -lg obstack.o -lc
ld:gcc.o: cannot open
*** Error code 4
Stop.
myname#
:( Опять неудача, смотрим, что на этот раз надо... Похоже не может найти заголовочный файл
/usr/include/obstack.h: No such file or directory
На как не игрался с ключом -I
в CFLAGS ничего не получалось.
И даже если всеже скопировать obstack.h
в указанный путь комипиляция завершалась неудачно. Только что откомпилированный gcc не хотел компилировать самого себя. А ведь Столманн в утверждал обратное...
myname# cp obstack.h /usr/include
myname# make CC=./gcc CFLAGS='-g -I.'
./gcc -c -g -I. gcc.c
./gcc -g -I. -c obstack.c
ld -o gcc /lib/crt0.o gcc.o -lg obstack.o -lc
./gcc -g -I. -c toplev.c
bison -v parse.y
parse.y contains 12 shift/reduce conflicts.
./gcc -g -I. -c parse.tab.c
./gcc -g -I. -c tree.c
./gcc -g -I. -c print-tree.c
./gcc -g -I. -c decl.c
Assembler:
"/tmp/cc002407.s", line 4304: WARNING: Caution: G or H format floating point operators
"/tmp/cc002407.s", line 4304: WARNING: These are not defined for all implementations of the VAX architecture.
./gcc -g -I. -c typecheck.c
./gcc -g -I. -c stor-layout.c
./gcc -g -I. -c fold-const.c
./gcc -g -I. -c varasm.c
./gcc -g -I. -c rtl.c
./gcc -c -g -I. genflags.c
./gcc -o genflags -g genflags.o rtl.o obstack.o
genflags md > insn-flags.h
./gcc -c -g -I. gencodes.c
./gcc -o gencodes -g gencodes.o rtl.o obstack.o
gencodes md > insn-codes.h
./gcc -g -I. -c expr.c
./gcc -g -I. -c stmt.c
./gcc -g -I. -c expmed.c
./gcc -g -I. -c explow.c
./gcc -c -g -I. genconfig.c
./gcc -o genconfig -g genconfig.o rtl.o obstack.o
genconfig md > insn-config.h
./gcc -g -I. -c optabs.c
./gcc -g -I. -c symout.c
./gcc -g -I. -c dbxout.c
./gcc -g -I. -c emit-rtl.c
./gcc -c -g -I. genemit.c
./gcc -o genemit -g genemit.o rtl.o obstack.o
genemit md > insn-emit.c
./gcc -c -g -I. insn-emit.c
./gcc -g -I. -c jump.c
./gcc -g -I. -c cse.c
./gcc -g -I. -c loop.c
./gcc -g -I. -c flow.c
./gcc -g -I. -c stupid.c
./gcc -g -I. -c combine.c
./gcc -g -I. -c regclass.c
./gcc -g -I. -c local-alloc.c
./gcc -g -I. -c global-alloc.c
./gcc -g -I. -c reload.c
./gcc -g -I. -c reload1.c
./gcc -g -I. -c final.c
./gcc -g -I. -c recog.c
./gcc -c -g -I. genrecog.c
./gcc -o genrecog -g genrecog.o rtl.o obstack.o
genrecog md > insn-recog.c
./gcc -c -g -I. insn-recog.c
./gcc -c -g -I. genextract.c
./gcc -o genextract -g genextract.o rtl.o obstack.o
genextract md > insn-extract.c
./gcc -c -g -I. insn-extract.c
./gcc -c -g -I. genoutput.c
./gcc -o genoutput -g genoutput.o rtl.o obstack.o
genoutput md > insn-output.c
./gcc -c -g -I. insn-output.c
ld -o cc1 /lib/crt0.o toplev.o parse.tab.o tree.o print-tree.o decl.o typecheck.o stor-layout.o fold-const.o varasm.o rtl.o expr.o stmt.o expmed.o explow.o optabs.o symout.o dbxout.o emit-rtl.o insn-emit.o jump.o cse.o loop.o flow.o stupid.o combine.o regclass.o local-alloc.o global-alloc.o reload.o reload1.o final.o recog.o insn-recog.o insn-extract.o insn-output.o -lg obstack.o -lc
Undefined:
_yydebug
_umodsi3
_lshrsi3
_udivsi3
_umulsi3
*** Error code 1
Stop.
myname#
И если с _yydebug
можно, что-то сделать, то что делать с _umodsi3
, _lshrsi3
, _udivsi3
, _umulsi3
пока не понятно.
Uh oh!
There was an error while loading. Please reload this page.