linker: Support dlopen(NULL, ...) properly.

Change-Id: Icba37823cb350c34848cc466d144c3a0af87c94c
This commit is contained in:
David 'Digit' Turner 2010-07-21 16:18:21 -07:00
parent 9d1f5afc34
commit 6774809b62
2 changed files with 14 additions and 1 deletions

View File

@ -70,6 +70,8 @@ Differences between current and Android 2.2:
- <sys/vfs.h>: fixed implementation of fstatfs() (also fixes fpathconf()
which uses it).
- <dlfcn.h>: fixed dlopen() implementation to support dlopen(NULL, ...).
This allows one to look at the dynamic symbols exported by an executable.
-------------------------------------------------------------------------------
Differences between Android 2.2. and Android 2.1:

View File

@ -1200,7 +1200,17 @@ init_library(soinfo *si)
soinfo *find_library(const char *name)
{
soinfo *si;
const char *bname = strrchr(name, '/');
const char *bname;
#if ALLOW_SYMBOLS_FROM_MAIN
if (name == NULL)
return somain;
#else
if (name == NULL)
return NULL;
#endif
bname = strrchr(name, '/');
bname = bname ? bname + 1 : name;
for(si = solist; si != 0; si = si->next){
@ -2193,6 +2203,7 @@ unsigned __linker_init(unsigned **elfdata)
si->dynamic = (unsigned *)-1;
si->wrprotect_start = 0xffffffff;
si->wrprotect_end = 0;
si->refcount = 1;
/* Use LD_LIBRARY_PATH if we aren't setuid/setgid */
if (ldpath_env && getuid() == geteuid() && getgid() == getegid())