jkp@SAUNA.HUT.FI (Jyrki Kuoppala) (04/20/89)
Here's a description how I got g++ 1.35.0- up on Altos 3068 (usg 5.2.2 running gcc, gas and GNU binutils). Most of the diffs are pretty general for USG systems. Author: Jyrki Kuoppala (jkp@cs.hut.fi) Last modified: Thu Apr 20 18:12:51 1989 NOTE for Altos 3068 (and perhaps other SysV machines): Altos symlinks behave differently than bsd ones. If you proceed as the README file says, you'll have the gcc files instead of g++ files. So, do the links to the gcc files BEFORE the links to g++ files. First run make with maketest target ( ln -s ../src-g++/Makefile ; make maketest ), then ln -s ../src-g++/*. Renamed cplus-parse.y to cplus-p.y. also changed cplus-parse.tab.{c,h,o} to cplus-p.tab.{c,h,o} in Makefile and cplus-parse.output to cplus-p.output edit cplus-lex.c to include cplus-p.tab.h Also ld++ should use shorter tmp file name (C++.hacks); now the last digit gets truncated. compiled with gcc 1.34.91 When compiling libg++.a (with -g -O): I get multiply ___CTOR_LIST__ and ___DTOR_LIST__ messages. nm -p shows: 0000051a x ___CTOR_LIST__ When g++ is compiled with FASCIST_ASSEMBLER defined, all works fine. Yes, I am using gas, wonder if there's something wrong with my hacked ld++. The file name of CursesWindow.cc is too long; make thinks it's a C file. I won't include diffs for the ld++ because it's combined from ld.c from G++ and a newer ld.c from binutils. Perhaps it would be time to publish the current ld.c and binutils, it's been quite a while since the last release was made. diff -cr src-g++/Makefile src-g++.a/Makefile *** src-g++/Makefile Wed Apr 19 17:38:26 1989 --- src-g++.a/Makefile Thu Apr 20 10:16:11 1989 *************** *** 52,66 **** # Variables that exist for you to override. ! CFLAGS = -g -DSOS -DESKIT -O # CFLAGS = -g -O CC = gcc BISON = bison BISONFLAGS = -v -d ! AR = ar SHELL = /bin/sh # on sysV, define this as cp. ! INSTALL = install -c MAKE = make # Compiler to use for compiling gnulib. --- 52,67 ---- # Variables that exist for you to override. ! CFLAGS = -I. -DSOS -DESKIT -O -DFASCIST_ASSEMBLER ! #CFLAGS = -g -DSOS -DESKIT -O # CFLAGS = -g -O CC = gcc BISON = bison BISONFLAGS = -v -d ! AR = /usr/gbin/ar SHELL = /bin/sh # on sysV, define this as cp. ! INSTALL = cp MAKE = make # Compiler to use for compiling gnulib. *************** *** 113,119 **** C_OBJS = c-parse.tab.o c-decl.o c-typeck.o c-convert.o # Language-specific object files for C++. ! CPLUS_OBJS = cplus-parse.tab.o cplus-decl.o cplus-typeck.o \ cplus-lex.o cplus-class.o cplus-init.o \ cplus-method.o cplus-cvt.o cplus-search.o cplus-ptree.o --- 114,120 ---- C_OBJS = c-parse.tab.o c-decl.o c-typeck.o c-convert.o # Language-specific object files for C++. ! CPLUS_OBJS = cplus-p.tab.o cplus-decl.o cplus-typeck.o \ cplus-lex.o cplus-class.o cplus-init.o \ cplus-method.o cplus-cvt.o cplus-search.o cplus-ptree.o *************** *** 180,185 **** --- 181,188 ---- OPTS='-DSUN4=4 -DTARGET=SUN4'; \ elif cmp -s tm.h config/tm-encore.h; then \ CRT0_OPTIONS='-DUMAX'; \ + elif cmp -s tm.h config/tm-altos3068.h; then \ + OPTS='-DCOFF_ENCAPSULATE -DNON_NATIVE -DUSG -DPORTAR'; \ elif cmp -s tm.h tm-i386gas+.h; then \ OPTS='-DUSG -DCOFF_ENCAPSULATE -DNON_NATIVE -DPORTAR'; \ else \ *************** *** 186,192 **** OPTS='-DTARGET=-1'; \ fi; \ echo $$OPTS; \ ! $(CC) -c $$OPTS $(PROFILE) $(CFLAGS) -DSTANDARD_SEARCH_DIRS="\"$(libdir)\", \"/lib\", \"/usr/lib\", \"/usr/local/lib\"" $(CFLAGS) ld.o: ld.c -if cmp -s tm.h config/tm-sun3+.h; then \ --- 189,195 ---- OPTS='-DTARGET=-1'; \ fi; \ echo $$OPTS; \ ! $(CC) -c $$OPTS $(PROFILE) $(CFLAGS) -DSTANDARD_SEARCH_DIRS="\"$(libdir)\", \"/lib\", \"/usr/lib\", \"/usr/local/lib\"" $(CFLAGS) newld.c ld.o: ld.c -if cmp -s tm.h config/tm-sun3+.h; then \ *************** *** 239,244 **** --- 242,249 ---- CRT0_OPTIONS='-Umc68000'; \ elif cmp -s tm.h config/tm-sequent.h; then \ CRT0_OPTIONS='-DCRT0_DUMMIES= -DDOT_GLOBAL_START'; \ + elif cmp -s tm.h config/tm-altos3068.h; then \ + CRT0_OPTIONS='-DCRT0_DUMMIES= -Umc68000 -Um68k'; \ elif cmp -s tm.h tm-i386gas+.h; then \ CRT0_OPTIONS='-DCRT0_DUMMIES=bogus_fp, -DDOT_GLOBAL_START'; \ else \ *************** *** 267,280 **** cplus-ptree.o : cplus-ptree.c $(CONFIG_H) $(TREE_H) new-cplus-method.o : new-cplus-method.c $(CONFIG_H) $(CPLUS_TREE_H) ! cplus-parse.tab.o : cplus-parse.tab.c $(CONFIG_H) $(CPLUS_TREE_H) cplus-parse.h flags.h ! $(CC) -c $(CFLAGS) -Iconfig -DPARSE_OUTPUT=\"$(PWD)/cplus-parse.output\" $< ! cplus-parse.tab.c : cplus-parse.y @echo expect 41 shift/reduce conflicts and 4 reduce/reduce conflicts ! $(BISON) $(BISONFLAGS) cplus-parse.y ! cplus-lex.o : cplus-lex.c $(CONFIG_H) $(CPLUS_TREE_H) cplus-parse.h cplus-parse.tab.h rtl.o : rtl.c $(CONFIG_H) $(RTL_H) # Language-independent files. --- 272,285 ---- cplus-ptree.o : cplus-ptree.c $(CONFIG_H) $(TREE_H) new-cplus-method.o : new-cplus-method.c $(CONFIG_H) $(CPLUS_TREE_H) ! cplus-p.tab.o : cplus-p.tab.c $(CONFIG_H) $(CPLUS_TREE_H) cplus-parse.h flags.h ! $(CC) -c $(CFLAGS) -Iconfig -DPARSE_OUTPUT=\"$(PWD)/cplus-p.output\" $< ! cplus-p.tab.c : cplus-p.y @echo expect 41 shift/reduce conflicts and 4 reduce/reduce conflicts ! $(BISON) $(BISONFLAGS) cplus-p.y ! cplus-lex.o : cplus-lex.c $(CONFIG_H) $(CPLUS_TREE_H) cplus-parse.h cplus-p.tab.h rtl.o : rtl.c $(CONFIG_H) $(RTL_H) # Language-independent files. *************** *** 499,505 **** # Get rid of every file that's generated from some other file (except INSTALL). realclean: clean -rm -f cpp.aux cpp.cps cpp.fns cpp.info cpp.kys cpp.pgs cpp.tps cpp.vrs ! -rm -f cplus-parse.tab.c cplus-parse.output -rm -f errs gnulib cexp.c TAGS tm-*+.h -rm -f g++.info* g++.?? g++.??s g++.log g++.toc g++.*aux -rm -f cccp cpp --- 504,510 ---- # Get rid of every file that's generated from some other file (except INSTALL). realclean: clean -rm -f cpp.aux cpp.cps cpp.fns cpp.info cpp.kys cpp.pgs cpp.tps cpp.vrs ! -rm -f cplus-p.tab.c cplus-p.output -rm -f errs gnulib cexp.c TAGS tm-*+.h -rm -f g++.info* g++.?? g++.??s g++.log g++.toc g++.*aux -rm -f cccp cpp *************** *** 552,558 **** TAGS: force mkdir temp ! -mv cplus-parse.tab.c cexp.c c-*.c temp etags *.y *.h *.c mv temp/* . rmdir temp --- 557,563 ---- TAGS: force mkdir temp ! -mv cplus-p.tab.c cexp.c c-*.c temp etags *.y *.h *.c mv temp/* . rmdir temp diff -cr src-g++/cplus-lex.c src-g++.a/cplus-lex.c *** src-g++/cplus-lex.c Fri Apr 14 20:07:46 1989 --- src-g++.a/cplus-lex.c Thu Apr 20 11:04:59 1989 *************** *** 25,31 **** #include <errno.h> #include "config.h" #include "tree.h" ! #include "cplus-parse.tab.h" #include "cplus-parse.h" #include "cplus-tree.h" #include "flags.h" --- 25,31 ---- #include <errno.h> #include "config.h" #include "tree.h" ! #include "cplus-p.tab.h" #include "cplus-parse.h" #include "cplus-tree.h" #include "flags.h" *************** *** 852,858 **** t = pending_inlines; pending_inlines = pending_inlines->next; finput = finput2; ! #ifdef i386 finput2->_ptr = finput2->_base = t->buf; _bufend(finput2) = t->buf + t->len; #ifdef sequent --- 852,858 ---- t = pending_inlines; pending_inlines = pending_inlines->next; finput = finput2; ! #if defined(USG) && !defined(hp9000s300) finput2->_ptr = finput2->_base = t->buf; _bufend(finput2) = t->buf + t->len; #ifdef sequent *************** *** 863,880 **** finput2->_cnt = t->len - 1; #else #ifndef hp9000s300 - #ifdef USG - setvbuf(finput2,t->buf,_IOFBF,t->len); - finput2->_cnt = t->len-1; - #else setbuffer (finput2, t->buf, t->len); finput2->_cnt = finput2->_bufsiz - 1; - #endif /* USG */ #else setvbuf(finput2,t->buf,_IOFBF,t->len); finput2->_cnt = t->len-1; #endif ! #endif lineno = t->lineno; input_filename = t->filename; #ifdef DO_INLINES_THE_OLD_WAY --- 863,875 ---- finput2->_cnt = t->len - 1; #else #ifndef hp9000s300 setbuffer (finput2, t->buf, t->len); finput2->_cnt = finput2->_bufsiz - 1; #else setvbuf(finput2,t->buf,_IOFBF,t->len); finput2->_cnt = t->len-1; #endif ! #endif /* USG */ lineno = t->lineno; input_filename = t->filename; #ifdef DO_INLINES_THE_OLD_WAY *************** *** 1655,1661 **** /* The buffer we used will be freed at the end of this function. */ pending_inlines = pending_inlines->next; ! #ifdef i386 finput2->_ptr = finput2->_base = t->buf; _bufend(finput2) = t->buf + t->len; finput2->_flag = _IOFBF | _IOREAD; --- 1650,1656 ---- /* The buffer we used will be freed at the end of this function. */ pending_inlines = pending_inlines->next; ! #if defined(USG) && !defined(hp9000s300) finput2->_ptr = finput2->_base = t->buf; _bufend(finput2) = t->buf + t->len; finput2->_flag = _IOFBF | _IOREAD; *************** *** 1662,1679 **** finput2->_cnt = t->len - 1; #else #ifndef hp9000s300 - #ifdef USG - setvbuf(finput2,t->buf,_IOFBF,t->len); - finput2->_cnt = t->len-1; - #else setbuffer (finput2, t->buf, t->len); finput2->_cnt = finput2->_bufsiz - 1; - #endif /* USG */ #else setvbuf(finput2,t->buf,_IOFBF,t->len); finput2->_cnt = t->len-1; #endif ! #endif } else { --- 1657,1669 ---- finput2->_cnt = t->len - 1; #else #ifndef hp9000s300 setbuffer (finput2, t->buf, t->len); finput2->_cnt = finput2->_bufsiz - 1; #else setvbuf(finput2,t->buf,_IOFBF,t->len); finput2->_cnt = t->len-1; #endif ! #endif /* USG */ } else { diff -cr src-g++/crt0.c src-g++.a/crt0.c *** src-g++/crt0.c Tue Apr 11 06:44:01 1989 --- src-g++.a/crt0.c Thu Apr 20 08:57:15 1989 *************** *** 197,203 **** asm(" .set _387_flt,0"); #endif ! #if defined(i386) _start(arg) char *arg; { --- 197,203 ---- asm(" .set _387_flt,0"); #endif ! #if defined(i386) || defined(ALTOS) _start(arg) char *arg; { *************** *** 717,723 **** int status; { __do_global_cleanup (); ! #if defined(hp9000s300) || defined(i386) _cleanup (); #endif _exit (status); --- 717,723 ---- int status; { __do_global_cleanup (); ! #if defined(hp9000s300) || defined(i386) || defined(ALTOS) _cleanup (); #endif _exit (status); jkp@cs.hut.fi //Jyrki