ngo%tammy@HARVARD.HARVARD.EDU (Tom Ngo) (01/18/90)
Versions: gcc 1.36; g++ 1.36.3
Machine: Convex C220
It appears to me that collect creates assembler output, whereas
collect2 makes an object. The following patches enabled me to compile
"hello, world" on a Convex, which requires collect2. I hope this is
the right way to go about doing this...
The following patches are to gcc.c, Makefile and config/tm-convex.h.
These patches do not fix the cc1plus crashes that people have been
reporting.
--Tom Ngo
===========================================================================
Patches to gcc.c
===========================================================================
ngo@tammy [72] diff -c gcc.c{.~1~,}
*** gcc.c.~1~ Wed Nov 8 20:20:40 1989
--- gcc.c Wed Jan 17 16:38:00 1990
***************
*** 297,303
{0, 0}
};
! #ifdef USE_COLLECT
/* C++: Here is the spec for collecting global ctor and dtor
requirements. */
char *collect_spec =
--- 297,303 -----
{0, 0}
};
! #if defined(USE_COLLECT) || defined(USE_COLLECT2)
/* C++: Here is the spec for collecting global ctor and dtor
requirements. */
#ifdef USE_COLLECT
***************
*** 300,305
#ifdef USE_COLLECT
/* C++: Here is the spec for collecting global ctor and dtor
requirements. */
char *collect_spec =
"%{!c:%{!M*:%{!E:%{!S:collect -o %g.S %g.R\n\
as %g.S -o %g.O\n\
--- 300,306 -----
#if defined(USE_COLLECT) || defined(USE_COLLECT2)
/* C++: Here is the spec for collecting global ctor and dtor
requirements. */
+ #ifdef USE_COLLECT
char *collect_spec =
"%{!c:%{!M*:%{!E:%{!S:collect -o %g.S %g.R\n\
as %g.S -o %g.O\n\
***************
*** 305,310
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\
--- 306,316 -----
as %g.S -o %g.O\n\
ld %{o*} %g.R %g.O\n\
}}}}";
+ #else
+ char *collect_spec =
+ "%{!c:%{!M*:%{!E:%{!S:collect2 %{o*} %g.R\n\
+ }}}}";
+ #endif
/* 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\
***************
*** 1818,1824
linker_was_run = (tmp != execution_count);
}
! #ifdef USE_COLLECT
/* C++: now collect all the requirements for
calling global constructors and destructors,
and write them to a file. We will link this file
--- 1824,1830 -----
linker_was_run = (tmp != execution_count);
}
! #if defined(USE_COLLECT) || defined(USE_COLLECT2)
/* C++: now collect all the requirements for
calling global constructors and destructors,
and write them to a file. We will link this file
===========================================================================
Patches to Makefile
===========================================================================
ngo@tammy [76] diff -c Makefile-orig Makefile
*** Makefile-orig Wed Jan 17 11:24:40 1990
--- Makefile Wed Jan 17 16:33:55 1990
***************
*** 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_COLLECT2 -DCOFF
# COFFLAGS = -DUSE_COLLECT -DEXTENDED_COFF
# On some BSD systems (like Vax, unlike Sun), there is no file
***************
*** 43,49
# On some BSD systems (like Vax, unlike Sun), there is no file
# /usr/include/unistd.h. If this is the case for your system
# uncomment the following line.
! # HAVE_UNISTD_H = -DNO_UNISTD_H
# CFLAGS = -g -DSOS -DESKIT -O
CFLAGS = -g -DGATHER_STATISTICS -O $(COFFLAGS) -DESKIT
--- 43,49 -----
# On some BSD systems (like Vax, unlike Sun), there is no file
# /usr/include/unistd.h. If this is the case for your system
# uncomment the following line.
! HAVE_UNISTD_H = -DNO_UNISTD_H
# CFLAGS = -g -DSOS -DESKIT -O
CFLAGS = -g -DGATHER_STATISTICS -O $(COFFLAGS) -DESKIT
***************
*** 204,210
# 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
--- 204,210 -----
# 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 collect2 # crt0+.o crt1+.o
***************
*** 206,212
# 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
--- 206,212 -----
# 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 collect2 # crt0+.o crt1+.o
doc: $(srcdir)/cpp.info $(srcdir)/g++.info
***************
*** 289,295
$(CC) -o collect $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) $< -lg -lc $$COLLECT_LIBS
collect2: collect2.c config.h
! $(CC) -o collect2 $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) $< -lc
g++filt: g++filt.o cplus-dem.o
$(CC) -o g++filt g++filt.o cplus-dem.o
--- 289,295 -----
$(CC) -o collect $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) $< -lg -lc $$COLLECT_LIBS
collect2: collect2.c config.h
! $(CC) -o collect2 collect2.c $(PROFILE) $$COLLECT_OPTIONS $(CFLAGS) $(INCLUDES) -lc
g++filt: g++filt.o cplus-dem.o
$(CC) -o g++filt g++filt.o cplus-dem.o
***************
*** 596,602
-mkdir $(startdir)
-if [ -f cc1plus ] ; then $(INSTALL) cc1plus $(libdir)/gcc-cc1plus ;fi
-if [ -f collect ] ; then $(INSTALL) collect $(libdir)/gcc-collect ;fi
! -if [ -f collect2 ] ; then $(INSTALL) collect2 $(libdir)/gcc-collect ;fi
$(INSTALL) g++ $(bindir)
-if [ -f ld++ ] ; then $(INSTALL) ld++ $(libdir)/gcc-ld ;fi
# -if [ -f crt0+.o ] ; then $(INSTALL) crt0+.o $(startdir)/crt0+.o ;fi
--- 596,602 -----
-mkdir $(startdir)
-if [ -f cc1plus ] ; then $(INSTALL) cc1plus $(libdir)/gcc-cc1plus ;fi
-if [ -f collect ] ; then $(INSTALL) collect $(libdir)/gcc-collect ;fi
! -if [ -f collect2 ] ; then $(INSTALL) collect2 $(libdir)/gcc-collect2 ;fi
$(INSTALL) g++ $(bindir)
-if [ -f ld++ ] ; then $(INSTALL) ld++ $(libdir)/gcc-ld ;fi
# -if [ -f crt0+.o ] ; then $(INSTALL) crt0+.o $(startdir)/crt0+.o ;fi
===========================================================================
Patch to config/tm-convex.h:
Appended the line "#define FASCIST_ASSEMBLER"
(Thanks to gillis@aerospace.aero.org)
===========================================================================