james@dell.dell.com (James Van Artsdalen) (11/10/89)
These are the changes I am using to build g++ 1.36.1 on SysVr3.2 i386v, using COFF & collect. I used "config.g++ i386v". make-links.g++ is changed so that it works, various changes were made to elimiate warning messages, cplus-decl2.c was changed to get rid of a spurious leading underscore, and gcc.c was changed to add the -c option to ld(1), which is necessary to avoid a core dump from ld(1) on my system. I was also real nervous about binding in both /lib/crt1.o and /lib/crtn.o before the link run that actually generated an executable, so I moved the startfile & libfile specs around. It was also easier to have gcc.c simply find libg++.a and pass ld(1) a full path than use the -L flag to send ld(1) looking for -lg++. Lastly, I am including the diffs to my makefile in case anyone wants to try these patches as-is. RCS file: RCS/collect.c,v retrieving revision 1.1 diff -c -r1.1 collect.c *** /tmp/,RCSt1a12258 Thu Nov 9 19:17:40 1989 --- collect.c Wed Nov 8 20:40:16 1989 *************** *** 68,75 **** --- 68,77 ---- */ #ifdef i386 #define ASM_INT_OP ASM_LONG + #ifndef NO_UNDERSCORES #define NO_UNDERSCORES 1 #endif + #endif #ifndef ASM_OUTPUT_INT_CONST #define ASM_OUTPUT_INT_CONST(FILE,VALUE) \ *************** *** 581,587 **** --- 583,593 ---- char *p = strtab+strindex; #endif /* hp9000s300 */ + #ifdef NO_DOLLAR_IN_LABEL + if (! strncmp ("__GLOBAL_.", p, 10)) + #else if (! strncmp ("__GLOBAL_$", p, 10)) + #endif add_ctor_dtor_elem(p); } } =================================================================== RCS file: RCS/cplus-decl.c,v retrieving revision 1.1 diff -c -r1.1 cplus-decl.c *** /tmp/,RCSt1a12258 Thu Nov 9 19:17:43 1989 --- cplus-decl.c Wed Nov 8 21:13:32 1989 *************** *** 4993,4999 **** assert (TREE_CODE (type) == METHOD_TYPE); ctype = TYPE_METHOD_BASETYPE (type); } ! ctype = grok_method_quals (ctype, dummy, quals); type = TREE_TYPE (dummy); quals = NULL_TREE; } --- 4993,4999 ---- assert (TREE_CODE (type) == METHOD_TYPE); ctype = TYPE_METHOD_BASETYPE (type); } ! ctype = (tree) grok_method_quals (ctype, dummy, quals); type = TREE_TYPE (dummy); quals = NULL_TREE; } =================================================================== RCS file: RCS/cplus-lex.c,v retrieving revision 1.1 diff -c -r1.1 cplus-lex.c *** /tmp/,RCSt1a12258 Thu Nov 9 19:17:48 1989 --- cplus-lex.c Wed Nov 8 20:43:30 1989 *************** *** 980,987 **** --- 980,992 ---- pending_inlines = pending_inlines->next; finput = finput2; #if defined(i386) && !defined(sequent) && !defined(sun386) + #ifndef USG_STDIO finput2->_ptr = finput2->_base = t->buf; _bufend(finput2) = t->buf + t->len; + #else + finput2->_ptr = finput2->_base = (unsigned char *) t->buf; + _bufend(finput2) = (unsigned char *) t->buf + t->len; + #endif finput2->_flag = _IOFBF | _IOREAD; finput2->_cnt = t->len - 1; #else *************** *** 2078,2085 **** --- 2083,2095 ---- end of this function. */ pending_inlines = pending_inlines->next; #if defined(i386) && !defined(sequent) && !defined(sun386) + #ifndef USG_STDIO finput2->_ptr = finput2->_base = t->buf; _bufend(finput2) = t->buf + t->len; + #else + finput2->_ptr = finput2->_base = (unsigned char *) t->buf; + _bufend(finput2) = (unsigned char *) t->buf + t->len; + #endif finput2->_flag = _IOFBF | _IOREAD; finput2->_cnt = t->len - 1; #else =================================================================== RCS file: RCS/expr.c,v retrieving revision 1.1 diff -c -r1.1 expr.c *** /tmp/,RCSt1a12258 Thu Nov 9 19:17:52 1989 --- expr.c Wed Nov 8 20:43:59 1989 *************** *** 3153,3159 **** { tree cleanup = 0; /* Lose: callback to C++. */ ! parm = get_temp_name (type, 0); mark_addressable (parm); target = DECL_RTL (parm); /* Since this parm is not known to the called function --- 3153,3159 ---- { tree cleanup = 0; /* Lose: callback to C++. */ ! parm = (tree) get_temp_name (type, 0); mark_addressable (parm); target = DECL_RTL (parm); /* Since this parm is not known to the called function *************** *** 3163,3169 **** it is very likely that such a reference need not be built here. */ if (TREE_OPERAND (exp, 2) == 0) ! TREE_OPERAND (exp, 2) = maybe_build_cleanup (parm); if (TREE_OPERAND (exp, 2)) cleanups_this_call = tree_cons (0, TREE_OPERAND (exp, 2), cleanups_this_call); --- 3163,3169 ---- it is very likely that such a reference need not be built here. */ if (TREE_OPERAND (exp, 2) == 0) ! TREE_OPERAND (exp, 2) = (tree) maybe_build_cleanup (parm); if (TREE_OPERAND (exp, 2)) cleanups_this_call = tree_cons (0, TREE_OPERAND (exp, 2), cleanups_this_call); =================================================================== RCS file: RCS/gcc.c,v retrieving revision 1.1 diff -c -r1.1 gcc.c *** /tmp/,RCSt1a12258 Thu Nov 9 19:17:55 1989 --- gcc.c Wed Nov 8 20:49:57 1989 *************** *** 303,316 **** char *collect_spec = "%{!c:%{!M*:%{!E:%{!S:collect -o %g.S %g.R\n\ as %g.S -o %g.O\n\ ! ld %{o*} %g.R %g.O\n\ }}}}"; /* Here is the spec for running the linker, after compiling all files. */ ! char *link_spec = "%{!c:%{!M*:%{!E:%{!S:ld -r -o %g.R %l\ %{A} %{d} %{e*} %{N} %{n} %{r} %{s} %{S} %{T*} %{t} %{u*} %{X} %{x} %{z}\ ! %{y*} %{!nostdlib:%S} \ ! %{L*} %o %{!nostdlib:-lg++ gnulib%s %{g:-lg} %L}\n }}}}"; #else /* Here is the spec for running the linker, after compiling all files. */ char *link_spec = "%{!c:%{!M*:%{!E:%{!S:ld %{o*} %l\ --- 303,316 ---- char *collect_spec = "%{!c:%{!M*:%{!E:%{!S:collect -o %g.S %g.R\n\ as %g.S -o %g.O\n\ ! ld %{o*} %{!nostdlib:%S} %g.R %g.O %{!nostdlib:%L}\n\ }}}}"; /* Here is the spec for running the linker, after compiling all files. */ ! char *link_spec = "%{!c:%{!M*:%{!E:%{!S:ld -r -x -o %g.R %l\ %{A} %{d} %{e*} %{N} %{n} %{r} %{s} %{S} %{T*} %{t} %{u*} %{X} %{x} %{z}\ ! %{y*} \ ! %{L*} %o %{!nostdlib:libg++.a%s gnulib%s %{g:-lg}}\n }}}}"; #else /* Here is the spec for running the linker, after compiling all files. */ char *link_spec = "%{!c:%{!M*:%{!E:%{!S:ld %{o*} %l\ *** RCS/cplus-decl2.c Wed Nov 8 20:41:15 1989 --- cplus-decl2.c Wed Nov 8 20:42:49 1989 *************** *** 984,990 **** --- 984,994 ---- DECL_RTL (decl) = 0; /* @@ Assume names have underscores. */ if (asmspec_abort == 0) + #ifndef NO_UNDERSCORES asmspec_abort = build_string (strlen ("_abort"), "_abort"); + #else + asmspec_abort = build_string (strlen ("abort"), "abort"); + #endif asmspec_tree = asmspec_abort; DECL_ABSTRACT_VIRTUAL_P (decl) = 1; } *** RCS/make-links.g++ Wed Nov 8 20:50:34 1989 --- make-links.g++ Wed Nov 8 20:52:16 1989 *************** *** 64,70 **** insn-output.c insn-flags.h insn-config.h insn-codes.h" $remove -f config ! $symbolic_link ${CDIR} ./config 2>/dev/null || $hard_link ${CDIR} ./config if [ ! -r ${CDIR} ] then echo "$progname: unable to link \`${CDIR}'." --- 64,80 ---- insn-output.c insn-flags.h insn-config.h insn-codes.h" $remove -f config ! $symbolic_link ${CDIR} ./config 2>/dev/null || ! { ! $remove -rf config ! $make_directory config ! $change_directory config ! THIS=`pwd` ! $change_directory ../${CDIR} ! $symbolic_link * ${THIS} 2>/dev/null || $hard_link * ${THIS} ! $change_directory ${THIS} ! $change_directory .. ! } if [ ! -r ${CDIR} ] then echo "$progname: unable to link \`${CDIR}'." RCS file: RCS/Makefile,v retrieving revision 1.1 diff -c -r1.1 Makefile *** /tmp/,RCSt1a12282 Thu Nov 9 19:21:26 1989 --- Makefile Thu Nov 9 00:44:36 1989 *************** *** 37,43 **** # use `-dy'. # On COFF systems, use one of the definitions below. (see collect.c) ! # COFFLAGS = -DUSE_COLLECT -DCOFF # COFFLAGS = -DUSE_COLLECT -DEXTENDED_COFF # On some BSD systems (like Vax, unlike Sun), there is no file --- 37,43 ---- # use `-dy'. # On COFF systems, use one of the definitions below. (see collect.c) ! COFFLAGS = -DUSE_COLLECT -DCOFF # COFFLAGS = -DUSE_COLLECT -DEXTENDED_COFF # On some BSD systems (like Vax, unlike Sun), there is no file *************** *** 46,52 **** # HAVE_UNISTD_H = -DNO_UNISTD_H # CFLAGS = -g -DSOS -DESKIT -O ! CFLAGS = -g -DGATHER_STATISTICS -O -Wunused $(COFFLAGS) CC = gcc BISON = bison BISONFLAGS = -v -d --- 46,52 ---- # HAVE_UNISTD_H = -DNO_UNISTD_H # CFLAGS = -g -DSOS -DESKIT -O ! CFLAGS = -DGATHER_STATISTICS -O $(COFFLAGS) -DNO_UNDERSCORES -DNO_DOLLAR_IN_LABEL CC = gcc BISON = bison BISONFLAGS = -v -d *************** *** 53,61 **** AR = ar SHELL = /bin/sh # on sysV, define this as cp. ! INSTALL = install -c # on sysV, define this as ln. ! LINK = ln -s # Compiler to use for compiling gnulib. # OLDCC should not be the GNU C compiler. --- 53,63 ---- AR = ar SHELL = /bin/sh # on sysV, define this as cp. ! # INSTALL = install -c ! INSTALL = cp # on sysV, define this as ln. ! # LINK = ln -s ! LINK = ln # Compiler to use for compiling gnulib. # OLDCC should not be the GNU C compiler. *************** *** 64,70 **** # CFLAGS for use with OLDCC, for compiling gnulib. # NOTE: -O does not work on some Unix systems! # If you use it here, you are asking for trouble. ! CCLIBFLAGS= # USG_STDIO if for machines which use System V stdio. # In general, if USG is #defined by your system, you should --- 66,73 ---- # CFLAGS for use with OLDCC, for compiling gnulib. # NOTE: -O does not work on some Unix systems! # If you use it here, you are asking for trouble. ! # CCLIBFLAGS= ! CCLIBFLAGS=-O # USG_STDIO if for machines which use System V stdio. # In general, if USG is #defined by your system, you should *************** *** 71,79 **** # uncomment the following line. But turncoats who claim officially # to support System V, but really try to be Berkeley (and thus # break with USG defined), may need to define this. ! # USG_STDIO = -DUSG_STDIO ! prefix = /usr/local # Directory where sources are, from where we are. srcdir = . --- 74,82 ---- # uncomment the following line. But turncoats who claim officially # to support System V, but really try to be Berkeley (and thus # break with USG defined), may need to define this. ! USG_STDIO = -DUSG_STDIO ! prefix = /nfs/raid # Directory where sources are, from where we are. srcdir = . *************** *** 96,104 **** OBSTACK=obstack.o # Directory to link to, when using the target `maketest'. ! DIR = ../gcc # this is the GNU CC build directory ! TDIR = ../gcc-test # End of variables for you to override. --- 99,107 ---- OBSTACK=obstack.o # Directory to link to, when using the target `maketest'. ! DIR = ../gcc-1.36 # this is the GNU CC build directory ! TDIR = ../gcc-1.36/i386 # End of variables for you to override. *************** *** 129,135 **** # If your system's malloc() routine fails for any reason (as it does on # certain versions of Genix), try getting the files # malloc.c and getpagesize.h from GNU Emacs and un-comment the following line: ! MALLOC = malloc.o # If you are running GCC on an Apollo (SR10.x), # go into a Berkeley environment and use this: --- 132,138 ---- # If your system's malloc() routine fails for any reason (as it does on # certain versions of Genix), try getting the files # malloc.c and getpagesize.h from GNU Emacs and un-comment the following line: ! # MALLOC = malloc.o # If you are running GCC on an Apollo (SR10.x), # go into a Berkeley environment and use this: *************** *** 204,212 **** # gnulib is not a target because a proper installation of GNU CC # will place it where g++ can find it. Same with cpp ! all: crt1+.o g++ cc1plus ld++ g++filt # collect crt0+.o # On COFF systems, use the target below. ! # all: g++ cc1plus collect # crt0+.o crt1+.o doc: $(srcdir)/cpp.info $(srcdir)/g++.info --- 207,215 ---- # gnulib is not a target because a proper installation of GNU CC # will place it where g++ can find it. Same with cpp ! # all: crt1+.o g++ cc1plus ld++ g++filt # collect crt0+.o # On COFF systems, use the target below. ! all: g++ cc1plus collect # crt0+.o crt1+.o doc: $(srcdir)/cpp.info $(srcdir)/g++.info -- James R. Van Artsdalen james@bigtex.cactus.org "Live Free or Die" DCC Corporation 9505 Arboretum Blvd Austin TX 78759 512-338-8789