default switches, template functions get EXTERNAL linkage in each file
in which they occur, causing multiple definition errors during
linking. The enclosed patch (from gnu.g++.bug) appears to solve the
problem (I enclose the accompanying message as well).
This patch fixes the multiply defined template functions bug
which was introduced in 2.6.1.
Submitted by: "Justin T. Gibbs" <gibbs@estienne.cs.berkeley.edu>
Obtained from: Jason Merrill at cygnus support on G++ mailing list
- Don't define NO_IMPLICIT_EXTERN_C here. It is already the default
(defined in i386/bsd.h).
- Don't lose the fixed comment about FUNCTION_PROFILER.
- Don't lose the define of NO_PROFILE_DATA.
Replace the unused define of COMMENT_BEGIN by the less-unused define
of ASM_COMMENT_START. COMMENT_BEGIN was only defined in i386-specific
files and was not used in any part of gcc-2.6.3. ASM_COMMENT_START
is defined for several targets and is used for stuff that we don't
support (dwarf).
basic-block profiling:
1. use a .stabs(25) symbol to link all the data structures together with.
The regular method isn't safe for the kernel.
2. add a BB before the prologue and add a BB after the epilogue, this
alows us to find the length of any counted BB. This is a cheap and somewhat
reasonable measure of actual cost.
disables dysfunctional disinformed namei's,
needlessly negating namei cache."
These hacks cuts the number futile attempts made by cc and ccp to find
cross-compilers and other weird stuff. A make of the BOOTFLP kernel
has 20% less namei calls now, that is from 30647 down to 24563 calls.
already C++ safe, or C++ header files.
This fixes the problem with parse errors in header files when compiling C++
files.
Recompiling libg++ also solves the undefined synbols problem.
Notice that the libgcc DOESN'T change number, because there are no
changes.
Also now the gnu2bmake stuff is synchronized again.
I commit this so that others can test too.
You might want to postpone any "make worlds" until tomorrow, to
avoid any problems I didn't see in the first pass.
Thanks to Bruce for rounding up our changes to gcc.
profiling and wchar_t. Profiled libraries will shrink.
tm.h:
Our wchar_t is int, not unsigned short.
Always link statically if profiling.
Define all the SPECs together.
final.c, tm.h:
Don't emit unused profiling code and data.
aux-output.c:
Always preserve the PIC register if profiling.
aux-output.c, tm.h:
Implement FUNCTION_PROFILER_EPILOGUE (currently not used).
New:
tm.h:
Set the target defaults in the correct way.
GCC-2.6.1 COMES TO FREEBSD-current
----------------------------------
Everybody needs to 'make world'.
Oakland, Nov 2nd 1994. In a surprise move this sunny afternoon, the release-
engineer for the slightly delayed FreeBSD-2.0, Poul-Henning Kamp (28),
decided to pull in the new version 2.6.1 of the GNU C-compiler.
The new version of the compiler was release today at noon, and hardly 9
hours later it was committed into the FreeBSD-current source-repository.
"It's is simply because we have had too much trouble with the version 2.6.0
of the compiler" Poul-Henning told the FreeBSD-Gazette, "we took a gamble
when we decided to use that as our compiler for the 2.0 release, but it
seems to pay of in the end now" he concludes.
The move has not been discussed on the "core" list at all, and will come as
a surprise for most Poul-Hennings peers. "I have only discussed it with
Jordan [J. K. Hubbard, the FreeBSD's resident humourist], and we agreed that
we needed to do it, so ... I did it!". After a breath he added with a grin:
"My email will probably get an all time 'disk-full' now!".
This will bring quite a flag-day to the FreeBSD developers, the patch-file
is almost 1.4 Megabyte, and they will have to run "make world" to get
entirely -current again. "Too bad, but we just had to do this." Was
the only comment from Poul-Henning to these problems.
When asked how this move would impact the 2.0 release-date, Poul-Hennings
face grew dark, he mumbled some very Danish words while he moved his fingers
in strange geometrical patterns. Immediately something ecclipsed the Sun, a
minor tremor shook the buildings, and the temperature fell significantly.
We decided not to pursure the question.
-----------
JOB-SECTION
-----------
Are you a dedicated GCC-hacker ?
We BADLY need somebody to look at the 'freebsd' OS in gcc, sanitize it and
carry the patches back to the GNU people. In particular, we need to get
out of the "i386-only" spot we are in now. I have the stuff to take a
gnu-dist into bmake-form, and will do that part.
Please apply to phk@freebsd.org
No Novice Need Apply.
no longer link against the whole library, since they don't require much
from it, but just compile the few small modules they actually need static.
This should save a measurable amount of space; compare:
-r-xr-xr-x 1 bin bin 155648 Sep 18 18:00 cc1*
-r-xr-xr-x 1 root bin 1048576 Sep 18 17:33 cc1.noshae*
Of course, the library takes up a bit of space, but when you add in the
savings from the C++ compiler, you more than make up the difference:
-r--r--r-- 1 bin bin 1157344 Sep 18 18:27 /usr/lib/libcc_int.so.26.0
-r-xr-xr-x 1 bin bin 491520 Sep 18 18:27 /usr/libexec/cc1plus*
we're not ready for yet. gcc and all profiled libraries will need
to be recompiled. I suspect that the dependencies aren't complete
enough to do this automatically.
automagically. -lfoo has to be right to work, but ${LIBFO0} is too
easy to forget or misspell; nothing checks it and it should be
different for shared libraries.
FreeBSD system sources installs itself as the standard cc and c++. I've
fixed c++ to call cc instead of gcc and removed all the symlinks
that get created to g** version of the binaries. This means that
you can install a second version of gcc that does use the g prefix
alongside the "system" version of gcc. The only conflict is libgcc
but since we install it as libcc.so.26 and nothing else is likely
to that should be ok.
Reviewed by:
Submitted by: