libtool-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

preloader declaration bug


From: Ralf Wildenhues
Subject: preloader declaration bug
Date: Sun, 28 Mar 2010 20:11:09 +0200
User-agent: Mutt/1.5.20 (2009-10-28)

Working on support for -flto has uncovered an ugly buglet in libltdl.
ltmain declares this symbol as:

  extern $lt_dlsym_const lt_dlsymlist
  lt_${my_prefix}_LTX_preloaded_symbols[];

but libltdl declares it as:

  #define preloaded_symbols       LT_CONC3(lt_, LTDLOPEN, 
_LTX_preloaded_symbols)

  #ifdef HAVE_LIBDLLOADER
  extern lt_dlsymlist             preloaded_symbols;
  #endif

(note the missing []) and takes its address to make up for it.
gcc -flto notices this inconsistency between the objects.

This patch fixes it, it passes the testsuite.  I'll be pushing it soon.
I don't actually know whether this bug can cause issues on some system.

Cheers,
Ralf

    Fix preloader symbol list declaration in libltdl.
    
    * libltdl/ltdl.c (preloaded_symbols): Fix declaration to include
    array brackets.
    (lt_dlinit): Do not take address of preloaded_symbols.

diff --git a/libltdl/ltdl.c b/libltdl/ltdl.c
index 1fe272f..4e1a402 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_dlsymlist            preloaded_symbols[];
 #endif
 
 /* Initialize libltdl. */
@@ -234,7 +234,7 @@ lt_dlinit (void)
 #ifdef HAVE_LIBDLLOADER
       if (!errors)
        {
-         errors += lt_dlpreload (&preloaded_symbols);
+         errors += lt_dlpreload (preloaded_symbols);
        }
 
       if (!errors)




reply via email to

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