On Mar 15, 2002, Alexandre Oliva <[EMAIL PROTECTED]> wrote: > On Mar 15, 2002, Richard Henderson <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> * 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