libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: printing exceptions?


From: Alexandre Oliva
Subject: Re: printing exceptions?
Date: 30 Mar 2002 06:18:19 -0300
User-agent: Gnus/5.0805 (Gnus v5.8.5) Emacs/20.7

On Mar 15, 2002, Alexandre Oliva <address@hidden> wrote:

> On Mar 15, 2002, Richard Henderson <address@hidden> 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  <address@hidden>

        * 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                  address@hidden, redhat.com}
CS PhD student at IC-Unicamp        address@hidden, gnu.org}
Free Software Evangelist                Professional serial bug killer

reply via email to

[Prev in Thread] Current Thread [Next in Thread]