This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: printing exceptions?
- From: Alexandre Oliva <aoliva at redhat dot com>
- To: Richard Henderson <rth at redhat dot com>
- Cc: tromey at redhat dot com, Jeff Sturm <jsturm at one-point dot com>, Bryce McKinlay <bryce at waitaki dot otago dot ac dot nz>, Java Discuss List <java at gcc dot gnu dot org>, libtool at gnu dot org, gcc at gcc dot gnu dot org
- Date: 30 Mar 2002 06:18:19 -0300
- Subject: Re: printing exceptions?
- Organization: GCC Team, Red Hat
- References: <Pine.LNX.4.10.10203052317220.6889-100000@mars.deadcafe.org><orsn7dtpij.fsf@free.redhat.lsd.ic.unicamp.br><87u1rt4948.fsf@creche.redhat.com><orwuwps5h1.fsf@free.redhat.lsd.ic.unicamp.br><87664947pt.fsf@creche.redhat.com><orpu25sb8g.fsf@free.redhat.lsd.ic.unicamp.br><20020315152842.A26146@redhat.com><orelilqu9g.fsf@free.redhat.lsd.ic.unicamp.br>
On Mar 15, 2002, Alexandre Oliva <aoliva@redhat.com> wrote:
> On Mar 15, 2002, Richard Henderson <rth@redhat.com> wrote:
>> On Fri, Mar 15, 2002 at 07:43:43PM -0300, Alexandre Oliva wrote:
>>> Another possibility that occurred to me, that would further alleviate
>>> the problem of duplicate shared libraries, would be to get GCC to no
>>> longer issue the `-lgcc_s -lc -lgcc_s' sequence, but instead, to use
>>> just `-lgcc_s -lc'.
>> Seems ok.
> Yay! I'll try to implement this in the next few days.
Err... For large values of `few' :-(
Here's the patch I came up with, that I've already done some testing
with, and that's undergoing bootstrapping now. Ok to install?
Perhaps even in 3.1? Can anybody think of further libraries that
could be removed from the former second expansion of %G?
Index: gcc/ChangeLog
from Alexandre Oliva <aoliva@redhat.com>
* gcc.c (LIBGCC_SPEC): Folded %L and duplicate %G here...
(LINK_COMMAND_SPEC): ... from here.
(init_gcc_specs): Duplicate it here too, omitting
shared_name in the second copy.
(init_spec): Test for duplicate
* config/i386/djgpp.h (LINK_COMMAND_SPEC): Remove `%L %G'.
Index: gcc/gcc.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/gcc.c,v
retrieving revision 1.304
diff -u -p -r1.304 gcc.c
--- gcc/gcc.c 2002/03/26 21:38:40 1.304
+++ gcc/gcc.c 2002/03/30 09:07:56
@@ -558,9 +558,9 @@ proper position among the other output f
#ifndef LIBGCC_SPEC
#if defined(LINK_LIBGCC_SPECIAL) || defined(LINK_LIBGCC_SPECIAL_1)
/* Have gcc do the search for libgcc.a. */
-#define LIBGCC_SPEC "libgcc.a%s"
+#define LIBGCC_SPEC "libgcc.a%s %L libgcc.a%s"
#else
-#define LIBGCC_SPEC "-lgcc"
+#define LIBGCC_SPEC "-lgcc %L -lgcc"
#endif
#endif
@@ -620,7 +620,7 @@ proper position among the other output f
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}\
%{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
- %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%G %L %G}}\
+ %{static:} %{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%G}}\
%{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}"
#endif
@@ -1426,7 +1426,16 @@ init_gcc_specs (obstack, shared_name, st
#else
shared_name,
#endif
- "}}}", NULL);
+ "}}} %L ",
+ "%{static|static-libgcc:", static_name, " ", eh_name,
+ "}%{!static:%{!static-libgcc:",
+ "%{!shared:%{!shared-libgcc:", static_name, " ",
+ eh_name, "}%{shared-libgcc:",
+ static_name, "}}",
+#ifdef LINK_EH_SPEC
+ "%{shared:%{!shared-libgcc:", static_name, "}}",
+#endif
+ "}}", NULL);
obstack_grow (obstack, buf, strlen (buf));
free (buf);
@@ -1507,7 +1516,7 @@ init_spec ()
when given the proper command line arguments. */
while (*p)
{
- if (in_sep && *p == '-' && strncmp (p, "-lgcc", 5) == 0)
+ if (in_sep && *p == '-' && strncmp (p, "-lgcc %L -lgcc", 14) == 0)
{
init_gcc_specs (&obstack,
#ifdef NO_SHARED_LIBGCC_MULTILIB
@@ -1518,10 +1527,11 @@ init_spec ()
,
"-lgcc",
"-lgcc_eh");
- p += 5;
+ p += 14;
in_sep = 0;
}
- else if (in_sep && *p == 'l' && strncmp (p, "libgcc.a%s", 10) == 0)
+ else if (in_sep && *p == 'l'
+ && strncmp (p, "libgcc.a%s %L libgcc.a%s", 24) == 0)
{
/* Ug. We don't know shared library extensions. Hope that
systems that use this form don't do shared libraries. */
@@ -1534,7 +1544,7 @@ init_spec ()
,
"libgcc.a%s",
"libgcc_eh.a%s");
- p += 10;
+ p += 24;
in_sep = 0;
}
else
Index: gcc/config/i386/djgpp.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/djgpp.h,v
retrieving revision 1.33
diff -u -p -r1.33 djgpp.h
--- gcc/config/i386/djgpp.h 2002/01/28 18:11:13 1.33
+++ gcc/config/i386/djgpp.h 2002/03/30 09:07:56
@@ -1,5 +1,5 @@
/* Configuration for an i386 running MS-DOS with DJGPP.
- Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -106,7 +106,7 @@ Boston, MA 02111-1307, USA. */
\t%{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\
\t%{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
\t%{static:} %{L*} %D %o\
-\t%{!nostdlib:%{!nodefaultlibs:%G %L %G}}\
+\t%{!nostdlib:%{!nodefaultlibs:%G}}\
\t%{!A:%{!nostdlib:%{!nostartfiles:%E}}}\
\t-Tdjgpp.djl %{T*}}}}}}}\n\
%{!c:%{!M:%{!MM:%{!E:%{!S:stubify %{v} %{o*:%*} %{!o*:a.out} }}}}}"
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva@{cygnus.com, redhat.com}
CS PhD student at IC-Unicamp oliva@{lsd.ic.unicamp.br, gnu.org}
Free Software Evangelist Professional serial bug killer