src@eliabel.sf.ca.us (08/18/90)
Those are the patches to G++ 1.37.2 built from the patched GCC 1.37.1 for ISC 2.2. G++ works fine under the GNU COFF system. Patches to LIBG++ follow. GDB 3.6- whose patches have been posted supports G++ 1.37.2. Eric P. Meyer ELIABEL Corp. emeyer@eliabel.sf.ca.us diff -pr src-g++/Makefile ../g++/Makefile *** src-g++/Makefile Mon Aug 6 05:56:07 1990 --- ../g++/Makefile Tue Aug 7 22:56:15 1990 *************** CADILLAC_OBJS = cplus-cadillac.o ../cadi *** 41,47 **** # 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 --- 41,47 ---- # 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 *************** CADILLAC_OBJS = cplus-cadillac.o ../cadi *** 50,56 **** # HAVE_UNISTD_H = -DNO_UNISTD_H # CFLAGS = -g -DSOS -DESKIT -O ! CFLAGS = -g -DGATHER_STATISTICS -O $(COFFLAGS) -B../gcc-test/ -DFIELD_XREF CC = gcc BISON = bison BISONFLAGS = -v # -d --- 50,56 ---- # HAVE_UNISTD_H = -DNO_UNISTD_H # CFLAGS = -g -DSOS -DESKIT -O ! CFLAGS = -g -DGATHER_STATISTICS -O $(COFFLAGS) -B../gcc-test/ -DFIELD_XREF -DUSG CC = gcc BISON = bison BISONFLAGS = -v # -d *************** BISONFLAGS = -v # -d *** 57,65 **** 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. --- 57,67 ---- 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. *************** TDIR = ../gcc-test *** 128,134 **** # But don't do that if compiling using GCC. # If your system has alloca() in /lib/libPW.a, un-comment the following line: ! # CLIB= -lPW # If your system's malloc() routine fails for any reason (as it does on # certain versions of Genix), try getting the files --- 130,136 ---- # But don't do that if compiling using GCC. # If your system has alloca() in /lib/libPW.a, un-comment the following line: ! CLIB= -lPW # If your system's malloc() routine fails for any reason (as it does on # certain versions of Genix), try getting the files *************** CPLUS_TREE_H = $(TREE_H) cplus-tree.h cp *** 209,217 **** # 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 --- 211,219 ---- # 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 diff -pr src-g++/collect.c ../g++/collect.c *** src-g++/collect.c Sun Aug 5 21:12:52 1990 --- ../g++/collect.c Thu Aug 9 14:21:03 1990 *************** void pic_label_is_global () {return;}; *** 93,99 **** #ifndef ASM_OUTPUT_INT_CONST #define ASM_OUTPUT_INT_CONST(FILE,VALUE) \ ! fprintf(FILE,"\t%s %d\n", ASM_INT_OP, VALUE) #endif #ifndef ASM_OUTPUT_LABELREF_AS_INT --- 93,99 ---- #ifndef ASM_OUTPUT_INT_CONST #define ASM_OUTPUT_INT_CONST(FILE,VALUE) \ ! fprintf(FILE,"\t%s%d\n", ASM_INT_OP, VALUE) #endif #ifndef ASM_OUTPUT_LABELREF_AS_INT *************** char *symbol_name; *** 334,341 **** ctor_chain_length++; } else { ! new->next = dtor_chain; ! dtor_chain = new; dtor_chain_length++; } } --- 334,349 ---- ctor_chain_length++; } else { ! new -> next = NULL; ! if ( dtor_chain == NULL ) ! dtor_chain = new; ! else { ! struct ctor_dtor_list_elem *last = dtor_chain; ! ! while ( last -> next ) ! last = last -> next; ! last -> next = new; ! } dtor_chain_length++; } } *************** output_ctor_dtor_table () *** 383,389 **** dtor_chain = dtor_chain->next; } ASM_OUTPUT_INT_CONST (outfile, 0); - ASM_OUTPUT_INT_CONST (outfile, 0); fclose (outfile); return OK; --- 391,396 ---- *************** output_ctor_dtor_table () *** 399,404 **** --- 406,433 ---- #include <ldfcn.h> + #ifdef DBX_IN_COFF + #if defined(sun386) || defined(sparc) + #define IS_DEBUG_SYMBOL(sym, type) (sym->n_zeroes == 0 && sym->n_dbxtype != 0) + #define TYPE_OF_DEBUG_SYMBOL(sym,type) (sym->n_dbxtype) + #else + #define IS_DEBUG_SYMBOL(sym, type) ( type && ( (type & 0xff00) == type)) + #define TYPE_OF_DEBUG_SYMBOL(sym,type) (type>>8) + #endif + #endif + + #ifdef i386 + #define TEXT_SECTION 2 + #endif + + #ifndef TEXT_SECTION + # ifdef M_UNIX + # define TEXT_SECTION 2 + # else + # define TEXT_SECTION 1 + # endif + #endif + #if defined(EXTENDED_COFF) # define GCC_SYMBOLS(X) (SYMHEADER(X).isymMax+SYMHEADER(X).iextMax) # define GCC_SYMENT SYMR *************** output_ctor_dtor_table () *** 407,416 **** #else # define GCC_SYMBOLS(X) (HEADER(ldptr).f_nsyms) # define GCC_SYMENT SYMENT ! #ifndef UNUSUAL_COFF_DEFINITION # define GCC_OK_SYMBOL(X) (!(((X).n_type & N_TMASK) != (DT_NON << N_BTSHFT))) #else ! # define GCC_OK_SYMBOL(X) ((X).n_scnum == 1 && (X).n_sclass == C_EXT) #endif # define GCC_SYMINC(X) ((X).n_numaux+1) #endif --- 436,446 ---- #else # define GCC_SYMBOLS(X) (HEADER(ldptr).f_nsyms) # define GCC_SYMENT SYMENT ! #ifdef UNUSUAL_COFF_DEFINITION # define GCC_OK_SYMBOL(X) (!(((X).n_type & N_TMASK) != (DT_NON << N_BTSHFT))) #else ! # define GCC_OK_SYMBOL(X) \ ! ((X).n_scnum == TEXT_SECTION && (X).n_sclass == C_EXT) #endif # define GCC_SYMINC(X) ((X).n_numaux+1) #endif diff -pr src-g++/cplus-dem.c ../g++/cplus-dem.c *** src-g++/cplus-dem.c Tue Jun 26 04:26:15 1990 --- ../g++/cplus-dem.c Tue Aug 7 22:39:05 1990 *************** *** 49,55 **** --- 49,57 ---- #include <ctype.h> #ifdef USG + #ifndef i386 #include <memory.h> + #endif #include <string.h> #else #include <strings.h> diff -pr src-g++/cplus-field.c ../g++/cplus-field.c *** src-g++/cplus-field.c Fri Jul 20 17:39:53 1990 --- ../g++/cplus-field.c Tue Aug 7 21:37:28 1990 *************** FIELD_xref_file(name) *** 246,252 **** --- 246,256 ---- all_files = xf; if (wd_name == NULL) { + #ifdef USG + getcwd(wdbuf); + #else getwd(wdbuf); + #endif wd_name = SALLOC(wdbuf); }; diff -pr src-g++/cplus-lex.c ../g++/cplus-lex.c *** src-g++/cplus-lex.c Sun Aug 5 21:31:07 1990 --- ../g++/cplus-lex.c Tue Aug 7 21:37:03 1990 *************** void dump_data() *** 1889,1895 **** --- 1889,1899 ---- printf("\nDumping %s to %s...\n", dump_source_name, dump_file_name); end_of_heap = (caddr_t)sbrk(0); + #ifdef USG + end_of_data = (caddr_t)((int)(&my_edata)); + #else end_of_data = (caddr_t)((int)(&my_edata)&~(getpagesize()-1)); + #endif data_size = (int)(end_of_heap-end_of_data); printf("Data size = %d\n", data_size); diff -pr src-g++/g++.texinfo ../g++/g++.texinfo *** src-g++/g++.texinfo Fri Jun 29 16:32:00 1990 --- ../g++/g++.texinfo Tue Aug 14 09:20:15 1990 *************** void foo () *** 4594,4611 **** @{ int *pval = new int [50]; X *pX = new (pval) X [50]; ! // ... ! @} ! @end example however, using the following syntax compiles correctly: void foo () @{ int *pval = new int [50]; X *pX = new {pval} X [50]; ! // ... ! @} @end example GNU C++ does not yet detect and warn about all possible misuses of --- 4594,4610 ---- @{ int *pval = new int [50]; X *pX = new (pval) X [50]; ! @}; ! @end example however, using the following syntax compiles correctly: + @example void foo () @{ int *pval = new int [50]; X *pX = new {pval} X [50]; ! @}; @end example GNU C++ does not yet detect and warn about all possible misuses of diff -pr src-g++/gcc.c ../g++/gcc.c *** src-g++/gcc.c Sun Aug 5 21:33:47 1990 --- ../g++/gcc.c Thu Aug 9 12:54:43 1990 *************** struct compiler compilers[] = *** 302,308 **** requirements. */ 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\ }}}}"; --- 302,308 ---- requirements. */ char *collect_spec = "%{!c:%{!M*:%{!E:%{!S:collect -o %g.s %g.R\n\ ! as %a %g.s -o %g.O\n\ ld %{o*} %g.R %g.O\n\ }}}}"; *************** ld %{o*} %g.R %g.O\n\ *** 310,316 **** 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\ --- 310,316 ---- 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:/u/lib/libg++.a 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\ diff -pr src-g++/make-links.g++ ../g++/make-links.g++ *** src-g++/make-links.g++ Thu Jun 21 07:43:01 1990 --- ../g++/make-links.g++ Tue Aug 7 20:38:16 1990 *************** *** 32,38 **** if [ xx${DIR} = xx ] then ! DIR="../gcc" fi if [ xx${CDIR} = xx ] then --- 32,38 ---- if [ xx${DIR} = xx ] then ! DIR="../gcc-1.37.1" fi if [ xx${CDIR} = xx ] then *************** remove=rm *** 44,50 **** make_directory=mkdir change_directory=cd hard_link=ln ! symbolic_link='ln -s' #for Test #remove="echo rm" --- 44,51 ---- make_directory=mkdir change_directory=cd hard_link=ln ! #symbolic_link='ln -s' ! symbolic_link='ln' #for Test #remove="echo rm" diff -pr src-g++/toplev.c ../g++/toplev.c *** src-g++/toplev.c Sun Aug 5 21:37:27 1990 --- ../g++/toplev.c Tue Aug 7 22:07:11 1990 *************** void undump_data (path, name) *** 1978,1984 **** --- 1978,1988 ---- file_size = lseek (file, 0L, SEEK_END); brk ((char*)(&my_edata) + file_size); + #ifdef USG + data = (char *)((int)&my_edata); + #else data = (char *)((int)&my_edata&~(getpagesize()-1)); + #endif if ((int)mmap (data, file_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, file, 0) < 0) { *************** void undump_data (path, name) *** 2008,2014 **** --- 2012,2022 ---- } file_size = lseek(file, 0L, SEEK_END); lseek(file, 0L, SEEK_SET); + #ifdef USG + brk((char*)((int)&my_edata) + file_size); + #else brk((char*)((int)&my_edata&~(getpagesize()-1)) + file_size); + #endif if (read (file, &my_edata, file_size) != file_size) perror(name); }