On 6/17/2010 10:24 PM, Peter O'Gorman wrote:
>> Unfortunately, this doesn't magically assist solving my problem with
>>     71. dlloader-api.at:23:  FAILED (dlloader-api.at:422)
>> but that's not a reason to object to the patch.
> 
> 
> Well that sucks :(
> 
> I suggest changing the LT__SETERROR macro in
> libltdl/libltdl/lt__private.h to print __FILE__ and __LINE__ etc. if
> errorcode == FILE_NOT_FOUND, then running test 71 again. It doesn't look
> like it's happening in loadlibrary.c.

../libtool/libltdl/loaders/preopen.c (188)
../libtool/libltdl/loaders/preopen.c (188)
../libtool/libltdl/loaders/preopen.c (188)

Hmm. Adding more debug output to preopen.c:vm_open  ...

Searching for preloaded symbol table for dlopen.a
Found preloaded symbol table for libltdlc
Found preloaded symbol table for dlopen.a
oops, bailing at line 183
Searching for preloaded symbol table for loadlibrary.a
Found preloaded symbol table for libltdlc
Found preloaded symbol table for dlopen.a
Found preloaded symbol table for dlopen_LTX_get_vtable
Found preloaded symbol table for loadlibrary.a
oops, bailing at line 183
Searching for preloaded symbol table for first.a
Found preloaded symbol table for libltdlc
Found preloaded symbol table for dlopen.a
Found preloaded symbol table for dlopen_LTX_get_vtable
Found preloaded symbol table for loadlibrary.a
Found preloaded symbol table for loadlibrary_LTX_get_vtable
Found preloaded symbol table for @PROGRAM@
../libtool/libltdl/loaders/preopen.c (191)
Searching for preloaded symbol table for module.a
Found preloaded symbol table for libltdlc
Found preloaded symbol table for dlopen.a
Found preloaded symbol table for dlopen_LTX_get_vtable
Found preloaded symbol table for loadlibrary.a
Found preloaded symbol table for loadlibrary_LTX_get_vtable
Found preloaded symbol table for @PROGRAM@
../libtool/libltdl/loaders/preopen.c (191)
Searching for preloaded symbol table for last.a
Found preloaded symbol table for libltdlc
Found preloaded symbol table for dlopen.a
Found preloaded symbol table for dlopen_LTX_get_vtable
Found preloaded symbol table for loadlibrary.a
Found preloaded symbol table for loadlibrary_LTX_get_vtable
Found preloaded symbol table for @PROGRAM@
../libtool/libltdl/loaders/preopen.c (191)
Searching for preloaded symbol table for /usr/bin/last
Found preloaded symbol table for libltdlc
Found preloaded symbol table for dlopen.a
Found preloaded symbol table for dlopen_LTX_get_vtable
Found preloaded symbol table for loadlibrary.a
Found preloaded symbol table for loadlibrary_LTX_get_vtable
Found preloaded symbol table for @PROGRAM@


Err...why is it looking for a module named "/usr/bin/last"? Is it
somehow using a $PATH search, and matching "last" to
"/usr/bin/last.exe"?  cygwin's dlopen does do some funky things with
$PATH, because that's how windows looks for DLLs -- but we're in
preopen, here...

Peter, can you try the attached patch "on top of" your mods, on some
platform OTHER than cygwin, and tell me what output you get?

--
Chuck
diff --git a/libltdl/loaders/preopen.c b/libltdl/loaders/preopen.c
index 7149287..8249c7d 100644
--- a/libltdl/loaders/preopen.c
+++ b/libltdl/loaders/preopen.c
@@ -163,11 +163,13 @@ vm_open (lt_user_data LT__UNUSED loader_data, const char *filename,
       filename = "@PROGRAM@";
     }
 
+  fprintf(stderr, "Searching for preloaded symbol table for %s\n", filename);
   for (lists = preloaded_symlists; lists; lists = lists->next)
     {
       const lt_dlsymlist *symbol;
       for (symbol= lists->symlist; symbol->name; ++symbol)
 	{
+	  fprintf (stderr, "Found preloaded symbol table for %s\n", symbol->name);
 	  if (!symbol->address && streq (symbol->name, filename))
 	    {
 	      /* If the next symbol's name and address is 0, it means
@@ -178,6 +180,7 @@ vm_open (lt_user_data LT__UNUSED loader_data, const char *filename,
 	      const lt_dlsymlist *next_symbol = symbol +1;
 	      if (next_symbol->address && next_symbol->name)
 		{
+		  fprintf(stderr, "oops, bailing at line %d\n", __LINE__);
 	          module = (lt_module) lists->symlist;
 	          goto done;
 		}
--- lt__private.h-bak	2010-06-17 22:33:21.820200000 -0400
+++ lt__private.h	2010-06-17 22:53:39.988600000 -0400
@@ -138,8 +138,13 @@
 
 #define LT__GETERROR(lvalue)	      (lvalue) = lt__get_last_error()
 #define LT__SETERRORSTR(errormsg)     lt__set_last_error(errormsg, 0)
-#define LT__SETERROR(errorcode)       if (0 == lt__get_last_error()) \
-					LT__SETERRORSTR(LT__STRERROR(errorcode))
+#define LT__SETERROR(errorcode)       do { if (0 == lt__get_last_error()) \
+					if (LT_CONC(LT_ERROR_,FILE_NOT_FOUND) == LT_CONC(LT_ERROR_,errorcode)) { \
+					  fprintf (stderr, "%s (%d)\n", __FILE__, __LINE__); \
+					  LT__SETERRORSTR(LT__STRERROR(errorcode)); \
+					} else { \
+					  LT__SETERRORSTR(LT__STRERROR(errorcode)); \
+					}} while (0)
 #define LT__ENTER_PUBLIC_FUNC(x)      lt__enter_err()
 #define LT__PUBLIC_FUNC_RETURN(x)     lt__keep_error(); return x;
 #define LT__FORCEERROR(errorstr)      LT__SETERRORSTR(errorstr)

Reply via email to