libtool/libltdl
Gary V. Vaughan c823c708c8 Without this patch, lt_dlopen always opens modules with symbol
visibility set according to the underlying implementation.
Here, we add lt_dlopenadvise() to allow callers to request,
among other things, local or global symbol visibility from the
underlying dlloader:

* libltdl/ltdl.c (LT_DLRESIDENT_FLAG): Removed.
(LT_DLIS_RESIDENT): Use public is_resident info field.
(LT_DLIS_SYMLOCAL, LT_DLIS_SYMGLOBAL): New macros to test for
module symbol visibility status.
(tryall_dlopen): If vtable->module_open() was able to act on
either is_symlocal or is_symglobal hints, store that in
the handle flags.
(lt_dlopenadvise): New function that works like lt_dlopen(),
but accepts an advise type to determine whether to ask
dlloaders to change default symbol visibility.
(lt_dlopen, lt_dlopenext): Just call lt_dlopenadvise() with
the correct parameters.
(lt_dladvise_init, lt_dladvise_destroy): New functions to
initialize and destroy an advise type hint.
(lt_dladvise_ext, lt_dladvise_resident, lt_dladvise_local)
(lt_dladvise_global): Set hints on an advise type.
(openadvise): Factored out of lt_dlopenadvise.
(has_library_ext): Factored out of lt_dlopenadvise.
* libltdl/ltdl.h: Declare all of the above.
(lt_dlinfo): New fields for advise hints.
* libltdl/libltdl/lt_dlloader.h (lt_module_open): Add a new
advise parameter.  Adjust all callers.
(lt_dladvise): New opaque type for advise hints.
* libltdl/libltdl/lt__private.h (lt__advise): Declare
contents of opaque lt_dladvise type.
* libltdl/libltdl/lt_error.h (CONFLICTING_FLAGS): New error
for attempts to have local and global symbol visibility at the
same time.
* libltdl/loaders/dld_link.c, libltdl/loaders/dyld.c,
libltdl/loaders/load_add_on.c, libltdl/loaders/loadlibrary.c,
libltdl/loaders/preopen.c, libltdl/loaders/shl_load.c: Adjust.
* libltdl/loaders/dlopen.c (RTLD_LOCAL, RTLD_GLOBAL): Try to
define these symbols if the system has equivalents.
(vmopen): If unable to act on a caller request to set symbol
visibility, then unset the relevant hints in the advise type.
* tests/lt_dladvise.at: New tests for the above.
* doc/libtool.texi (Libltdl Interface): Updated.
* NEWS: Updated.
2007-05-08 14:38:50 +00:00
..
config * libltdl/config/ltmain.m4sh (func_mode_link): When adding 2007-05-03 18:07:28 +00:00
libltdl Without this patch, lt_dlopen always opens modules with symbol 2007-05-08 14:38:50 +00:00
loaders Without this patch, lt_dlopen always opens modules with symbol 2007-05-08 14:38:50 +00:00
m4 * libltdl/libltdl/lt__glibc.h: Use !HAVE_WORKING_ARGZ 2007-04-26 22:24:16 +00:00
.cvsignore * .cvsignore, doc/.cvsignore, libltdl/.cvsignore, 2006-06-13 18:36:56 +00:00
argz_.h * libltdl/argz_.h: ensure error_t definition is obtained 2007-04-25 21:17:59 +00:00
argz.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
configure.ac * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
COPYING.LIB The FSF are moving offices today. Changed their contact address 2005-04-22 10:10:31 +00:00
lt__alloc.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
lt__dirent.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
lt__strl.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
lt_dlloader.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
lt_error.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
ltdl.c Without this patch, lt_dlopen always opens modules with symbol 2007-05-08 14:38:50 +00:00
ltdl.h Without this patch, lt_dlopen always opens modules with symbol 2007-05-08 14:38:50 +00:00
Makefile.inc * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
README * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00
slist.c * HACKING (Licensing Rules): Explain the various license texts 2007-03-25 12:12:44 +00:00

This is GNU libltdl, a system independent dlopen wrapper for GNU libtool.

It supports the following dlopen interfaces:
* dlopen (Solaris, Linux and various BSD flavors)
* shl_load (HP-UX)
* LoadLibrary (Win16 and Win32)
* load_add_on (BeOS)
* GNU DLD (emulates dynamic linking for static libraries)
* dyld (darwin/Mac OS X)
* libtool's dlpreopen
-- 
   Copyright (C) 1999, 2003 Free Software Foundation, Inc.
   Written by Thomas Tanner, 1999

   This file is part of GNU Libtool.

GNU Libtool is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.

As a special exception to the GNU General Public License,
if you distribute this file as part of a program or library that
is built using GNU Libtool, you may include this file under the
same distribution terms that you use for the rest of that program.

GNU Libtool is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Libtool; see the file COPYING.  If not, a copy
can be downloaded from  http://www.gnu.org/licenses/gpl.html,
or obtained by writing to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.