delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-apps/2001/11/21/04:42:52

Mailing-List: contact cygwin-apps-help AT sourceware DOT cygnus DOT com; run by ezmlm
Sender: cygwin-apps-owner AT sourceware DOT cygnus DOT com
List-Subscribe: <mailto:cygwin-apps-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-apps/>
List-Post: <mailto:cygwin-apps AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-apps-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/lists.html#faqs>
Delivered-To: mailing list cygwin-apps AT sources DOT redhat DOT com
From: "Ralf Habacker" <Ralf DOT Habacker AT freenet DOT de>
To: "Cygwin-Apps" <cygwin-apps AT cygwin DOT com>
Subject: RE: ld ---export--all --exclude-libs,?
Date: Wed, 21 Nov 2001 10:45:48 +0100
Message-ID: <009201c17271$4cad9600$405e07d5@BRAMSCHE>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook 8.5, Build 4.71.2173.0
In-Reply-To: <0a9301c17269$075c5a30$0200a8c0@lifelesswks>
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400
Importance: Normal

> -----Original Message-----
> From: cygwin-apps-owner AT sourceware DOT cygnus DOT com
> [mailto:cygwin-apps-owner AT sourceware DOT cygnus DOT com]On Behalf Of Robert
> Collins
> Sent: Wednesday, November 21, 2001 9:47 AM
> To: Danny Smith; cygwin-apps; mingw-dvlpr
> Subject: Re: ld ---export--all --exclude-libs,?
>
>
> IIRC the reason the auto-export feature didn't automatically prevent
> forwarded exports was we didn't know how. I had a quick look at doing
> that when I tweaked Paul's work to also exlude the cygwin common
> symbols.
>
> If you've found how to detect forward exports coming from other
> libraries, then _please_ make excluding those the default. In fact IMO
> such symbols should require explicit source code decoration -say via the
> .def file- to create as AFAIK there is no ELF equivalent to a forwarded
> symbol.
>
Currently I'm using a patched binutils for compiling kde which exclude all *.a libs inm
conjunction with libtool.

To export specific libs, I'm using the "no whole archive" options of libtool, which unpacks
the archive and adds each objfile.
Additional this is nessessary if you are using static libs in more than one dll.

Index: pe-dll.c
===================================================================
RCS file: /cvs/src/src/ld/pe-dll.c,v
retrieving revision 1.37
diff -u -b -B -p -r1.37 pe-dll.c
--- pe-dll.c    2001/10/19 14:25:51     1.37
+++ pe-dll.c    2001/11/21 09:35:22
@@ -231,6 +237,8 @@ static autofilter_entry_type autofilter_
   { "libgcc.", 7 },
   { "libstdc++.", 10 },
   { "libmingw32.", 11 },
+// RH: workaround to allow using static libs in multiple dlls
+  { ".a", 2 },
   { NULL, 0 }
 };

Ralf


> Rob
>
> ===
> ----- Original Message -----
> From: "Danny Smith" <danny_r_smith_2001 AT yahoo DOT co DOT nz>
> To: "cygwin-apps" <cygwin-apps AT cygwin DOT com>; "mingw-dvlpr"
> <mingw-dvlpr AT lists DOT sourceforge DOT net>
> Sent: Wednesday, November 21, 2001 7:41 PM
> Subject: ld ---export--all --exclude-libs,?
>
>
> > Hello, I'm after some criticism, before submitting this to binutils.
> >
> > IMO, the auto-export feature of ld needs (at least) an option to
> exclude
> > whole libs from export. The following patch does that. It also adds a
> few
> > more default lib excludes and scans for backward compat implib symbols
> > (__imp_)
> >
> > I think this patch doesn't do enough.
> >
> > My preference would be to exclude *all* libs by default, with a
> command
> > line option to explicity *include* named libs.  Why? It is too easy
> for
> > licensed library code to sneak into dll's using --export-all. This
> affects
> > distributability (sic) of the dll and apps dependent on the dll.
> > The user may be unaware of this infection because its automatic.
> > At least make the user think about what she/he is exporting.
> >
> > I will gladly throw away the following to work on a patch to exclude
> all
> > libs by default if given encouragement.
> >
> > Any comments.
> >
> >
> > 2001-11-21  Danny Smith  <dannysmith AT users DOT sourceforge DOT net>
> >
> > * ld/emultempl/pe.em (OPTION_EXCLUDE_LIBS): Add new define.
> > (longopts): Add new option --exclude-libs.
> > (gld_${EMULATION_NAME}_list_options): Document it.
> > (gld_${EMULATION_NAME}_parse_args): Use it.
> > * ld/pe-dll.h (pe_dll_add_excludes): Add second param to prototype.
> > * ld/pe-dll.c (autofilter_liblist): Add more default libs.
> > (exclude_list_struct): Add field type to distinguish
> > symbols from whole archives.
> > (pe_dll_add_excludes): Set excludes->type.
> > (auto_export): Scan for old __imp_ prefix as well as _imp__
> > when filtering symbols. Add new variable libname and set to
> >   archive basename if abfd. Use it when filtering default and
> > user-specified libarary excludes. Use excludes->type when
> > scanning user-specified excludes.
> >
> > Index: src/ld/pe-dll.c
> > ===================================================================
> > RCS file: /cvs/src/src/ld/pe-dll.c,v
> > retrieving revision 1.37
> > diff -u -p -r1.37 pe-dll.c
> > --- pe-dll.c 2001/10/19 14:25:51 1.37
> > +++ pe-dll.c 2001/11/21 08:20:19
> > @@ -231,6 +231,9 @@ static autofilter_entry_type autofilter_
> >    { "libgcc.", 7 },
> >    { "libstdc++.", 10 },
> >    { "libmingw32.", 11 },
> > +  { "libg2c.", 7 },
> > +  { "libsupc++.", 10 },  /* g++ 3.x  */
> > +  { "libobjc.", 8 },
> >    { NULL, 0 }
> >  };
> >
> > @@ -368,14 +371,16 @@ typedef struct exclude_list_struct
> >    {
> >      char *string;
> >      struct exclude_list_struct *next;
> > +    int type;
> >    }
> >  exclude_list_struct;
> >
> >  static struct exclude_list_struct *excludes = 0;
> >
> >  void
> > -pe_dll_add_excludes (new_excludes)
> > +pe_dll_add_excludes (new_excludes, type)
> >       const char *new_excludes;
> > +     const int type;
> >  {
> >    char *local_copy;
> >    char *exclude_string;
> > @@ -391,6 +396,7 @@ pe_dll_add_excludes (new_excludes)
> >        xmalloc (sizeof (struct exclude_list_struct)));
> >        new_exclude->string = (char *) xmalloc (strlen (exclude_string)
> +
> > 1);
> >        strcpy (new_exclude->string, exclude_string);
> > +      new_exclude->type = type;
> >        new_exclude->next = excludes;
> >        excludes = new_exclude;
> >      }
> > @@ -398,6 +404,7 @@ pe_dll_add_excludes (new_excludes)
> >    free (local_copy);
> >  }
> >
> > +
> >  /* abfd is a bfd containing n (or NULL)
> >     It can be used for contextual checks.  */
> >
> > @@ -410,9 +417,13 @@ auto_export (abfd, d, n)
> >    int i;
> >    struct exclude_list_struct *ex;
> >    autofilter_entry_type *afptr;
> > +  const char * libname = 0;
> > +  if (abfd && abfd->my_archive)
> > +    libname = lbasename (abfd->my_archive->filename);
> >
> >    /* We should not re-export imported stuff.  */
> > -  if (strncmp (n, "_imp__", 6) == 0)
> > +  if ((strncmp (n, "_imp__", 6) == 0)
> > +      || (strncmp (n, "__imp_", 6) == 0))
> >      return 0;
> >
> >    for (i = 0; i < d->num_exports; i++)
> > @@ -429,14 +440,14 @@ auto_export (abfd, d, n)
> >   n, abfd, abfd->my_archive);
> >
> >        /* First of all, make context checks:
> > -         Don't export anything from libgcc.  */
> > -      if (abfd && abfd->my_archive)
> > +         Don't export anything from standard libs.  */
> > +      if (libname)
> >   {
> >     afptr = autofilter_liblist;
> >
> >     while (afptr->name)
> >       {
> > -       if (strstr (abfd->my_archive->filename, afptr->name))
> > +       if (strncmp (libname, afptr->name, afptr->len) == 0 )
> >   return 0;
> >         afptr++;
> >       }
> > @@ -495,8 +506,15 @@ auto_export (abfd, d, n)
> >      }
> >
> >    for (ex = excludes; ex; ex = ex->next)
> > -    if (strcmp (n, ex->string) == 0)
> > -      return 0;
> > +    {
> > +      if (ex->type == 1)
> > + {
> > +   if (libname && (strcmp (libname, ex->string) == 0))
> > +            return 0;
> > + }
> > +      else if (strcmp (n, ex->string) == 0)
> > +        return 0;
> > +    }
> >
> >    return 1;
> >  }
> > Index: src/ld/pe-dll.h
> > ===================================================================
> > RCS file: /cvs/src/src/ld/pe-dll.h,v
> > retrieving revision 1.5
> > diff -u -p -r1.5 pe-dll.h
> > --- pe-dll.h 2001/09/12 15:58:10 1.5
> > +++ pe-dll.h 2001/11/21 08:20:19
> > @@ -36,7 +36,7 @@ extern int pe_dll_compat_implib;
> >  extern int pe_dll_extra_pe_debug;
> >
> >  extern void pe_dll_id_target PARAMS ((const char *));
> > -extern void pe_dll_add_excludes PARAMS ((const char *));
> > +extern void pe_dll_add_excludes PARAMS ((const char *, const int));
> >  extern void pe_dll_generate_def_file PARAMS ((const char *));
> >  extern void pe_dll_generate_implib PARAMS ((def_file *, const char
> *));
> >  extern void pe_process_import_defs PARAMS ((bfd *, struct
> bfd_link_info
> > *));
> > Index: src/ld/emultempl/pe.em
> > ===================================================================
> > RCS file: /cvs/src/src/ld/emultempl/pe.em,v
> > retrieving revision 1.54
> > diff -u -p -r1.54 pe.em
> > --- pe.em 2001/09/24 18:21:24 1.54
> > +++ pe.em 2001/11/21 08:20:30
> > @@ -221,7 +221,9 @@ gld_${EMULATION_NAME}_before_parse()
> >  #define OPTION_DLL_ENABLE_AUTO_IMPORT (OPTION_NO_DEFAULT_EXCLUDES +
> 1)
> >  #define OPTION_DLL_DISABLE_AUTO_IMPORT (OPTION_DLL_ENABLE_AUTO_IMPORT
> + 1)
> >  #define OPTION_ENABLE_EXTRA_PE_DEBUG (OPTION_DLL_DISABLE_AUTO_IMPORT
> + 1)
> > +#define OPTION_EXCLUDE_LIBS (OPTION_ENABLE_EXTRA_PE_DEBUG + 1)
> >
> > +
> >  static struct option longopts[] = {
> >    /* PE options */
> >    {"base-file", required_argument, NULL, OPTION_BASE_FILE},
> > @@ -247,6 +249,7 @@ static struct option longopts[] = {
> >    {"output-def", required_argument, NULL, OPTION_OUT_DEF},
> >    {"export-all-symbols", no_argument, NULL, OPTION_EXPORT_ALL},
> >    {"exclude-symbols", required_argument, NULL,
> OPTION_EXCLUDE_SYMBOLS},
> > +  {"exclude-libs", required_argument, NULL, OPTION_EXCLUDE_LIBS},
> >    {"kill-at", no_argument, NULL, OPTION_KILL_ATS},
> >    {"add-stdcall-alias", no_argument, NULL, OPTION_STDCALL_ALIASES},
> >    {"enable-stdcall-fixup", no_argument, NULL,
> > OPTION_ENABLE_STDCALL_FIXUP},
> > @@ -333,6 +336,7 @@ gld_${EMULATION_NAME}_list_options (file
> >    fprintf (file, _("  --disable-stdcall-fixup            Don't link
> _sym
> > to _sym AT nn\n"));
> >    fprintf (file, _("  --enable-stdcall-fixup             Link _sym to
> > _sym AT nn without warnings\n"));
> >    fprintf (file, _("  --exclude-symbols sym,sym,...      Exclude
> symbols
> > from automatic export\n"));
> > +  fprintf (file, _("  --exclude-libs lib,lib,...         Exclude
> libraries
> > from automatic export\n"));
> >    fprintf (file, _("  --export-all-symbols
> Automatically
> > export all globals to DLL\n"));
> >    fprintf (file, _("  --kill-at                          Remove @nn
> from
> > exported symbols\n"));
> >    fprintf (file, _("  --out-implib <file>                Generate
> import
> > library\n"));
> > @@ -586,7 +590,10 @@ gld_${EMULATION_NAME}_parse_args(argc, a
> >        pe_dll_export_everything = 1;
> >        break;
> >      case OPTION_EXCLUDE_SYMBOLS:
> > -      pe_dll_add_excludes (optarg);
> > +      pe_dll_add_excludes (optarg, 0);
> > +      break;
> > +    case OPTION_EXCLUDE_LIBS:
> > +      pe_dll_add_excludes (optarg, 1);
> >        break;
> >      case OPTION_KILL_ATS:
> >        pe_dll_kill_ats = 1;
> >
> >
> >
> > http://shopping.yahoo.com.au - Yahoo! Shopping
> > - Get organised for Christmas early this year!
> >
>
>

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019