When I built pulseaudio with "--dlopen force", after that I found pulseaudio execution will cause a segment fault. In pulseaudio ltmain.sh, lt_preloaded_symbols is set to "{0,(void *)0}".
The problem is at libltdl/loaders/preopen.c.
address@hidden:~/libtool$ git diff diff --git a/libltdl/loaders/preopen.c b/libltdl/loaders/preopen.c index 7149287..e5b8c16 100644 --- a/libltdl/loaders/preopen.c
+++ b/libltdl/loaders/preopen.c @@ -335,6 +335,7 @@ lt_dlpreload_open (const char *originator, lt_dlpreload_callback_func *func) /* For each symlist in the chain... */ for (list = preloaded_symlists; list; list = list->next)
{ + if ( ! list->symlist->name ) continue; /* ...that was preloaded by the requesting ORIGINATOR... */ if ((originator && streq (list->symlist->name, originator)) || (!originator && streq (list->symlist->name, "@PROGRAM@")))
I checked the libtool-1.5.8, there is code block to check the same condition. 2053 while (lists) 2054 { 2055 const lt_dlsymlist *syms = lists->syms; 2056 2057 while (syms->name)
2058 { 2059 if (!syms->address && strcmp(syms->name, filename) == 0) 2060 { 2061 module = (lt_module) syms; 2062 goto done; 2063 }
2064 ++syms; 2065 } 2066 2067 lists = lists->next; 2068 }