[Top][All Lists]
[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)
- preloader declaration bug,
Ralf Wildenhues <=