[gnu.g++.bug] g++ 1.36.1 i386 SysVr3.2 patches

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