[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 3/4] Uniform const'ness of symlist variable lt_preloaded_symb
From: |
Ralf Wildenhues |
Subject: |
Re: [PATCH 3/4] Uniform const'ness of symlist variable lt_preloaded_symbols. |
Date: |
Sat, 19 Jun 2010 12:08:29 +0200 |
User-agent: |
Mutt/1.5.20 (2010-04-22) |
Hello Vincent, all,
I would like to commit the patch quoted below, on the way of support for
LTO with GCC. For that, I need to know from somebody who is willing to
help out with the Windows CE port of Libtool whether the #defines used
in the patch are sufficient and correct.
This is
<http://thread.gmane.org/gmane.comp.gnu.libtool.general/10794/focus=9769>.
Thanks,
Ralf
* Ralf Wildenhues wrote on Sun, Apr 04, 2010 at 10:56:47AM CEST:
> On some systems, lt_preloaded_symbols may not be declared
> const due to relocation issues. C99 requires qualification to
> match for compatible declarations, so ensure we declare
> const'ness in the same way everywhere; link-time optimization
> may otherwise rightfully complain about inconsistencies.
> Since ltdl.h may not depend upon config.h, rely on system
> defines for choosing const'ness.
>
> * NEWS: Update.
> * doc/libtool.texi (Dlpreopening): Document this issue.
> * libltdl/config/ltmain.m4sh (func_generate_dlsyms):
> [__WINDOWS__, __CYGWIN__, _WIN32_WCE]: Define LT_DLSYM_CONST
> according to system defines. Remove old shell cruft. Use
> LT_DLSYM_CONST for lt_${my_prefix}_LTX_preloaded_symbols.
> * libltdl/libltdl/lt_system.h (LT_DLSYM_CONST): Likewise,
> define LT_DLSYM_CONST according to system defines.
> * tests/demo/foo.h (LT_DLSYM_CONST): Likewise.
> * tests/pdemo/foo.h (LT_DLSYM_CONST): Likewise.
> * tests/demo/dlmain.c (lt_dlsymlist): Use LT_DLSYM_CONST.
> * tests/pdemo/longer_file_name_dlmain.c (lt_dlsymlist):
> Likewise.
> * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Likewise
> for configure test code.
> * libltdl/ltdl.c (preloaded_symbols): Use LT_DLSYM_CONST.
> * libltdl/ltdl.h (LTDL_SET_PRELOADED_SYMBOLS): Likewise.
>
> Signed-off-by: Ralf Wildenhues <address@hidden>
> ---
>
> Hello,
>
> this patch addresses the const-ness of the symlist variable.
>
> I would like things to be consistent across ltmain, libtool.m4 (where we test
> symbol-pipe functionality), and ltdl.h, and since the latter can't depend on
> config.h, I guess the best bet is to hard-code using system defines.
>
> Question is whether
> *cygwin* | *mingw* | *cegcc* | *osf5*
>
> matches
> defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE)
> defined(__osf__)
>
> well enough?
>
> OK to commit?
>
> Thanks,
> Ralf
>
> ChangeLog | 26 ++++++++++++++++++++++++++
> NEWS | 3 +++
> doc/libtool.texi | 3 +++
> libltdl/config/ltmain.m4sh | 33
> ++++++++++++++-------------------
> libltdl/libltdl/lt_system.h | 14 +++++++++++++-
> libltdl/ltdl.c | 2 +-
> libltdl/ltdl.h | 2 +-
> libltdl/m4/libtool.m4 | 14 +++++++++++++-
> tests/demo/dlmain.c | 2 +-
> tests/demo/foo.h | 14 +++++++++++++-
> tests/pdemo/foo.h | 14 +++++++++++++-
> tests/pdemo/longer_file_name_dlmain.c | 2 +-
> 12 files changed, 102 insertions(+), 27 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index c082cee..245452b 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,31 @@
> 2010-04-04 Ralf Wildenhues <address@hidden>
>
> + Uniform const'ness of symlist variable lt_preloaded_symbols.
> + On some systems, lt_preloaded_symbols may not be declared
> + const due to relocation issues. C99 requires qualification to
> + match for compatible declarations, so ensure we declare
> + const'ness in the same way everywhere; link-time optimization
> + may otherwise rightfully complain about inconsistencies.
> + Since ltdl.h may not depend upon config.h, rely on system
> + defines for choosing const'ness.
> + * NEWS: Update.
> + * doc/libtool.texi (Dlpreopening): Document this issue.
> + * libltdl/config/ltmain.m4sh (func_generate_dlsyms):
> + [__WINDOWS__, __CYGWIN__, _WIN32_WCE]: Define LT_DLSYM_CONST
> + according to system defines. Remove old shell cruft. Use
> + LT_DLSYM_CONST for lt_${my_prefix}_LTX_preloaded_symbols.
> + * libltdl/libltdl/lt_system.h (LT_DLSYM_CONST): Likewise,
> + define LT_DLSYM_CONST according to system defines.
> + * tests/demo/foo.h (LT_DLSYM_CONST): Likewise.
> + * tests/pdemo/foo.h (LT_DLSYM_CONST): Likewise.
> + * tests/demo/dlmain.c (lt_dlsymlist): Use LT_DLSYM_CONST.
> + * tests/pdemo/longer_file_name_dlmain.c (lt_dlsymlist):
> + Likewise.
> + * libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Likewise
> + for configure test code.
> + * libltdl/ltdl.c (preloaded_symbols): Use LT_DLSYM_CONST.
> + * libltdl/ltdl.h (LTDL_SET_PRELOADED_SYMBOLS): Likewise.
> +
> Fix incompatible struct declarations.
> * doc/libtool.texi (Dlpreopening): Remove broken documentation
> of lt_dlsymbol and lt_dlsymlist. Document typedef lt_dlsymlist
> diff --git a/NEWS b/NEWS
> index f220f28..1ffbf74 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -27,6 +27,9 @@ New in 2.2.8 2010-??-??: git version 2.2.7a, Libtool team:
> options that begin with '--lt-*' from the argument list before launching
> (uninstalled) programs. Any '--lt-*' option on the command line not
> recognized by the wrapper will result in an error.
> + - The type of the symbol lists variables (lt_*_LTX_preloaded_symbols) has
> + been fixed in the manual and in a couple of tests to match the actual
> + implementation.
>
> * Changes in supported systems or compilers:
>
> diff --git a/doc/libtool.texi b/doc/libtool.texi
> index f73f5a7..e5de075 100644
> --- a/doc/libtool.texi
> +++ b/doc/libtool.texi
> @@ -3408,6 +3408,9 @@ The last element of all has a @var{name} and
> @var{address} of
> 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}.
> +
> +This variable may not be declared @code{const} on some systems due to
> +relocation issues.
> @end deftypevar
>
> Some compilers may allow identifiers that are not valid in ANSI C, such
> diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
> index b4a23f6..c0082d1 100644
> --- a/libltdl/config/ltmain.m4sh
> +++ b/libltdl/config/ltmain.m4sh
> @@ -1952,6 +1952,18 @@ extern \"C\" {
> #pragma GCC diagnostic ignored \"-Wstrict-prototypes\"
> #endif
>
> +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and
> tests. */
> +#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE)
> +/* DATA imports from DLLs on WIN32 con't be const, because runtime
> + relocations are performed -- see ld's documentation on pseudo-relocs. */
> +# define LT_DLSYM_CONST
> +#elif defined(__osf__)
> +/* This system does not cope well with relocations in const data. */
> +# define LT_DLSYM_CONST
> +#else
> +# define LT_DLSYM_CONST const
> +#endif
> +
> /* External symbol declarations for the compiler. */\
> "
>
> @@ -2054,26 +2066,9 @@ typedef struct {
> const char *name;
> void *address;
> } lt_dlsymlist;
> -"
> - case $host in
> - *cygwin* | *mingw* | *cegcc* )
> - echo >> "$output_objdir/$my_dlsyms" "\
> -/* DATA imports from DLLs on WIN32 con't be const, because
> - runtime relocations are performed -- see ld's documentation
> - on pseudo-relocs. */"
> - lt_dlsym_const= ;;
> - *osf5*)
> - echo >> "$output_objdir/$my_dlsyms" "\
> -/* This system does not cope well with relocations in const data */"
> - lt_dlsym_const= ;;
> - *)
> - lt_dlsym_const=const ;;
> - esac
> -
> - echo >> "$output_objdir/$my_dlsyms" "\
> -extern $lt_dlsym_const lt_dlsymlist
> +extern LT_DLSYM_CONST lt_dlsymlist
> lt_${my_prefix}_LTX_preloaded_symbols[];
> -$lt_dlsym_const lt_dlsymlist
> +LT_DLSYM_CONST lt_dlsymlist
> lt_${my_prefix}_LTX_preloaded_symbols[] =
> {\
> { \"$my_originator\", (void *) 0 },"
> diff --git a/libltdl/libltdl/lt_system.h b/libltdl/libltdl/lt_system.h
> index dab2ab6..a8481d6 100644
> --- a/libltdl/libltdl/lt_system.h
> +++ b/libltdl/libltdl/lt_system.h
> @@ -1,6 +1,6 @@
> /* lt_system.h -- system portability abstraction layer
>
> - Copyright (C) 2004, 2007 Free Software Foundation, Inc.
> + Copyright (C) 2004, 2007, 2010 Free Software Foundation, Inc.
> Written by Gary V. Vaughan, 2004
>
> NOTE: The canonical source of this file is maintained with the
> @@ -76,6 +76,18 @@ or obtained by writing to the Free Software Foundation,
> Inc.,
> # endif
> #endif
>
> +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and
> tests. */
> +#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE)
> +/* DATA imports from DLLs on WIN32 con't be const, because runtime
> + relocations are performed -- see ld's documentation on pseudo-relocs. */
> +# define LT_DLSYM_CONST
> +#elif defined(__osf__)
> +/* This system does not cope well with relocations in const data. */
> +# define LT_DLSYM_CONST
> +#else
> +# define LT_DLSYM_CONST const
> +#endif
> +
> /* Canonicalise Windows and Cygwin recognition macros.
> To match the values set by recent Cygwin compilers, make sure that if
> __CYGWIN__ is defined (after canonicalisation), __WINDOWS__ is NOT! */
> diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c
> index 4e1a402..87493f6 100644
> --- a/libltdl/ltdl.c
> +++ b/libltdl/ltdl.c
> @@ -208,7 +208,7 @@ LT_BEGIN_C_DECLS
> LT_SCOPE const lt_dlvtable * get_vtable (lt_user_data data);
> LT_END_C_DECLS
> #ifdef HAVE_LIBDLLOADER
> -extern lt_dlsymlist preloaded_symbols[];
> +extern LT_DLSYM_CONST lt_dlsymlist preloaded_symbols[];
> #endif
>
> /* Initialize libltdl. */
> diff --git a/libltdl/ltdl.h b/libltdl/ltdl.h
> index 8b516ad..5154da1 100644
> --- a/libltdl/ltdl.h
> +++ b/libltdl/ltdl.h
> @@ -103,7 +103,7 @@ LT_SCOPE int lt_dlpreload_open (const char
> *originator,
>
> #define lt_preloaded_symbols lt__PROGRAM__LTX_preloaded_symbols
> #define LTDL_SET_PRELOADED_SYMBOLS() LT_STMT_START{
> \
> - extern const lt_dlsymlist lt_preloaded_symbols[]; \
> + extern LT_DLSYM_CONST lt_dlsymlist lt_preloaded_symbols[]; \
> lt_dlpreload_default(lt_preloaded_symbols); \
> }LT_STMT_END
>
> diff --git a/libltdl/m4/libtool.m4 b/libltdl/m4/libtool.m4
> index a946493..ef587b9 100644
> --- a/libltdl/m4/libtool.m4
> +++ b/libltdl/m4/libtool.m4
> @@ -3468,6 +3468,18 @@ _LT_EOF
> if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
> if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
> cat <<_LT_EOF > conftest.$ac_ext
> +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and
> tests. */
> +#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE)
> +/* DATA imports from DLLs on WIN32 con't be const, because runtime
> + relocations are performed -- see ld's documentation on pseudo-relocs. */
> +# define LT@&address@hidden
> +#elif defined(__osf__)
> +/* This system does not cope well with relocations in const data. */
> +# define LT@&address@hidden
> +#else
> +# define LT@&address@hidden const
> +#endif
> +
> #ifdef __cplusplus
> extern "C" {
> #endif
> @@ -3479,7 +3491,7 @@ _LT_EOF
> cat <<_LT_EOF >> conftest.$ac_ext
>
> /* The mapping between symbol names and symbols. */
> -const struct {
> +LT@&address@hidden struct {
> const char *name;
> void *address;
> }
> diff --git a/tests/demo/dlmain.c b/tests/demo/dlmain.c
> index c970998..8c8be09 100644
> --- a/tests/demo/dlmain.c
> +++ b/tests/demo/dlmain.c
> @@ -34,7 +34,7 @@ typedef struct
> lt_ptr_t address;
> } lt_dlsymlist;
>
> -extern const lt_dlsymlist lt_preloaded_symbols[];
> +extern LT_DLSYM_CONST lt_dlsymlist lt_preloaded_symbols[];
>
> int
> main ()
> diff --git a/tests/demo/foo.h b/tests/demo/foo.h
> index 287f9c3..838264e 100644
> --- a/tests/demo/foo.h
> +++ b/tests/demo/foo.h
> @@ -1,6 +1,6 @@
> /* foo.h -- interface to the libfoo library
>
> - Copyright (C) 1996-1999 Free Software Foundation, Inc.
> + Copyright (C) 1996-1999, 2010 Free Software Foundation, Inc.
> Written by Gord Matzigkeit, 1996
>
> This file is part of GNU Libtool.
> @@ -62,6 +62,18 @@ or obtained by writing to the Free Software Foundation,
> Inc.,
> # define lt_ptr_t char*
> #endif
>
> +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and
> tests. */
> +#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE)
> +/* DATA imports from DLLs on WIN32 con't be const, because runtime
> + relocations are performed -- see ld's documentation on pseudo-relocs. */
> +# define LT_DLSYM_CONST
> +#elif defined(__osf__)
> +/* This system does not cope well with relocations in const data. */
> +# define LT_DLSYM_CONST
> +#else
> +# define LT_DLSYM_CONST const
> +#endif
> +
> /* Silly constants that the functions return. */
> #define HELLO_RET 0xe110
> #define FOO_RET 0xf00
> diff --git a/tests/pdemo/foo.h b/tests/pdemo/foo.h
> index f09db19..dd4e86d 100644
> --- a/tests/pdemo/foo.h
> +++ b/tests/pdemo/foo.h
> @@ -1,6 +1,6 @@
> /* foo.h -- interface to the libfoo library
>
> - Copyright (C) 1996-1999 Free Software Foundation, Inc.
> + Copyright (C) 1996-1999, 2010 Free Software Foundation, Inc.
> Written by Gord Matzigkeit, 1996
>
> This file is part of GNU Libtool.
> @@ -61,6 +61,18 @@ or obtained by writing to the Free Software Foundation,
> Inc.,
> # define lt_ptr_t char*
> #endif
>
> +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and
> tests. */
> +#if defined(__WINDOWS__) || defined(__CYGWIN__) || defined(_WIN32_WCE)
> +/* DATA imports from DLLs on WIN32 con't be const, because runtime
> + relocations are performed -- see ld's documentation on pseudo-relocs. */
> +# define LT_DLSYM_CONST
> +#elif defined(__osf__)
> +/* This system does not cope well with relocations in const data. */
> +# define LT_DLSYM_CONST
> +#else
> +# define LT_DLSYM_CONST const
> +#endif
> +
> #ifdef __CYGWIN32__
> # ifdef LIBFOO_DLL
> /* need some (as yet non-existant) automake magic to tell
> diff --git a/tests/pdemo/longer_file_name_dlmain.c
> b/tests/pdemo/longer_file_name_dlmain.c
> index ef1e4c5..ad223dc 100644
> --- a/tests/pdemo/longer_file_name_dlmain.c
> +++ b/tests/pdemo/longer_file_name_dlmain.c
> @@ -34,7 +34,7 @@ typedef struct
> lt_ptr_t address;
> } lt_dlsymlist;
>
> -extern const lt_dlsymlist lt_preloaded_symbols[];
> +extern LT_DLSYM_CONST lt_dlsymlist lt_preloaded_symbols[];
>
> int
> main (int argc, char **argv)
- Re: [PATCH 3/4] Uniform const'ness of symlist variable lt_preloaded_symbols.,
Ralf Wildenhues <=