Fix incompatible struct declarations.

* doc/libtool.texi (Dlpreopening): Remove broken documentation
of lt_dlsymbol and lt_dlsymlist.  Document typedef lt_dlsymlist
and symbol lt_preloaded_symbols according to the implementation.
* tests/demo/dlmain.c (lt_symlist): Make struct anonymous ...
(lt_dlsymlist): ... and typedef to this name.
(lt_preloaded_symbols, main): Adjust.
* tests/pdemo/longer_file_name_dlmain.c: Likewise.

Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
This commit is contained in:
Ralf Wildenhues 2010-04-04 10:56:27 +02:00
parent 519bf919cc
commit 3d0fc4870e
4 changed files with 32 additions and 25 deletions

View File

@ -1,3 +1,14 @@
2010-04-09 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Fix incompatible struct declarations.
* doc/libtool.texi (Dlpreopening): Remove broken documentation
of lt_dlsymbol and lt_dlsymlist. Document typedef lt_dlsymlist
and symbol lt_preloaded_symbols according to the implementation.
* tests/demo/dlmain.c (lt_symlist): Make struct anonymous ...
(lt_dlsymlist): ... and typedef to this name.
(lt_preloaded_symbols, main): Adjust.
* tests/pdemo/longer_file_name_dlmain.c: Likewise.
2010-04-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> 2010-04-04 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
Use linker_flags not compiler_flags with $LD. Use linker_flags not compiler_flags with $LD.

View File

@ -3388,25 +3388,15 @@ you must declare the objects you want your application to dlopen by
using the @option{-dlopen} or @option{-dlpreopen} flags when you link your using the @option{-dlopen} or @option{-dlpreopen} flags when you link your
program (@pxref{Link mode}). program (@pxref{Link mode}).
@deftypefn {Structure} {struct} lt_dlsymbol @{ @w{const char *@var{name};} @w{void *@var{address};} @} @deftp {Data Type} {lt_dlsymlist} typedef struct @
@{ @w{const char *@var{name};} @w{void *@var{address};} @} lt_dlsymlist
The @var{name} attribute is a null-terminated character string of the The @var{name} attribute is a null-terminated character string of the
symbol name, such as @code{"fprintf"}. The @var{address} attribute is a symbol name, such as @code{"fprintf"}. The @var{address} attribute is a
generic pointer to the appropriate object, such as @code{&fprintf}. generic pointer to the appropriate object, such as @code{&fprintf}.
@end deftypefn @end deftp
@deftypefn {Structure} {struct} lt_dlsymlist @{ @w{const char *@var{originator};} @w{const lt_dlsymbol @var{symbols}[];} @} @deftypevar {const lt_dlsymlist } lt_preloaded_symbols[]
The @var{originator} attribute is a null-terminated character string, An array of @var{lt_dlsymlist} structures, representing all the preloaded
naming the compilation unit that @var{symbols} were preloaded on
behalf of. This is usually the basename of a library,
@file{libltdl.la} has a corresponding @var{originator} value of
@samp{libltdl}; if the @var{symbols} are for the benefit of the
application proper, then @var{originator} is @samp{@@PROGRAM@@},
though Libtool takes care of that detail if you use
@samp{LTDL_SET_PRELOADED_SYMBOLS}.
@end deftypefn
@deftypevar {const lt_dlsymlist *} lt_preloaded_symbols
An array of @var{lt_symbol} structures, representing all the preloaded
symbols linked into the program proper. For each module symbols linked into the program proper. For each module
@option{-dlpreopen}ed by the Libtool linked program @option{-dlpreopen}ed by the Libtool linked program
there is an element with the @var{name} of the module and an @var{address} there is an element with the @var{name} of the module and an @var{address}
@ -3414,6 +3404,10 @@ of @code{0}, followed by all symbols exported from this file.
For the executable itself the special name @samp{@@PROGRAM@@} is used. For the executable itself the special name @samp{@@PROGRAM@@} is used.
The last element of all has a @var{name} and @var{address} of The last element of all has a @var{name} and @var{address} of
@code{0}. @code{0}.
To facilitate inclusion of symbol lists into libraries,
@code{lt_preloaded_symbols} is @samp{#define}d to a suitably unique name
in @file{ltdl.h}.
@end deftypevar @end deftypevar
Some compilers may allow identifiers that are not valid in ANSI C, such Some compilers may allow identifiers that are not valid in ANSI C, such

View File

@ -1,6 +1,7 @@
/* dlmain.c -- hello test program that uses simulated dynamic linking /* dlmain.c -- hello test program that uses simulated dynamic linking
Copyright (C) 1996-1999, 2004, 2006, 2007 Free Software Foundation, Inc. Copyright (C) 1996-1999, 2004, 2006, 2007, 2010 Free Software
Foundation, Inc.
This file is part of GNU Libtool. This file is part of GNU Libtool.
@ -27,18 +28,18 @@ or obtained by writing to the Free Software Foundation, Inc.,
#define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
struct lt_symlist typedef struct
{ {
const char *name; const char *name;
lt_ptr_t address; lt_ptr_t address;
}; } lt_dlsymlist;
extern const struct lt_symlist lt_preloaded_symbols[]; extern const lt_dlsymlist lt_preloaded_symbols[];
int int
main () main ()
{ {
const struct lt_symlist *s; const lt_dlsymlist *s;
int (*pfoo)() = 0; int (*pfoo)() = 0;
int (*phello)() = 0; int (*phello)() = 0;
int *pnothing = 0; int *pnothing = 0;

View File

@ -1,6 +1,7 @@
/* dlmain.c -- hello test program that uses simulated dynamic linking /* dlmain.c -- hello test program that uses simulated dynamic linking
Copyright (C) 1996-1999, 2004, 2006, 2007 Free Software Foundation, Inc. Copyright (C) 1996-1999, 2004, 2006, 2007, 2010 Free Software
Foundation, Inc.
This file is part of GNU Libtool. This file is part of GNU Libtool.
@ -27,18 +28,18 @@ or obtained by writing to the Free Software Foundation, Inc.,
#define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
struct lt_symlist typedef struct
{ {
const char *name; const char *name;
lt_ptr_t address; lt_ptr_t address;
}; } lt_dlsymlist;
extern const struct lt_symlist lt_preloaded_symbols[]; extern const lt_dlsymlist lt_preloaded_symbols[];
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
const struct lt_symlist *s; const lt_dlsymlist *s;
int (*pfoo)() = 0; int (*pfoo)() = 0;
int (*phello)() = 0; int (*phello)() = 0;
int *pnothing = 0; int *pnothing = 0;