linker: Support dlopen(NULL, ...) properly.
Change-Id: Icba37823cb350c34848cc466d144c3a0af87c94c
This commit is contained in:
parent
9d1f5afc34
commit
6774809b62
@ -70,6 +70,8 @@ Differences between current and Android 2.2:
|
|||||||
- <sys/vfs.h>: fixed implementation of fstatfs() (also fixes fpathconf()
|
- <sys/vfs.h>: fixed implementation of fstatfs() (also fixes fpathconf()
|
||||||
which uses it).
|
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:
|
Differences between Android 2.2. and Android 2.1:
|
||||||
|
@ -1200,7 +1200,17 @@ init_library(soinfo *si)
|
|||||||
soinfo *find_library(const char *name)
|
soinfo *find_library(const char *name)
|
||||||
{
|
{
|
||||||
soinfo *si;
|
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;
|
bname = bname ? bname + 1 : name;
|
||||||
|
|
||||||
for(si = solist; si != 0; si = si->next){
|
for(si = solist; si != 0; si = si->next){
|
||||||
@ -2193,6 +2203,7 @@ unsigned __linker_init(unsigned **elfdata)
|
|||||||
si->dynamic = (unsigned *)-1;
|
si->dynamic = (unsigned *)-1;
|
||||||
si->wrprotect_start = 0xffffffff;
|
si->wrprotect_start = 0xffffffff;
|
||||||
si->wrprotect_end = 0;
|
si->wrprotect_end = 0;
|
||||||
|
si->refcount = 1;
|
||||||
|
|
||||||
/* Use LD_LIBRARY_PATH if we aren't setuid/setgid */
|
/* Use LD_LIBRARY_PATH if we aren't setuid/setgid */
|
||||||
if (ldpath_env && getuid() == geteuid() && getgid() == getegid())
|
if (ldpath_env && getuid() == geteuid() && getgid() == getegid())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user