libtool-patches
[Top][All Lists]
Advanced

[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)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]