Improve the dynamic linker diagnostics.
Lose the pid, only show the name of the function (not its whole signature), and include the name of the library we failed to load. (I hadn't noticed that the library name was missing before because in Java we add that into the UnsatisfiedLinkError detail message.) The new output looks like this: Cannot load library: soinfo_relocate(linker.cpp:968): cannot locate symbol "__libc_malloc_default_dispatch" referenced by "libc_malloc_debug_leak.so"... Change-Id: I3bb5c9780d9aaf3a9e4418ea55bc98122a81f80f
This commit is contained in:
@@ -165,8 +165,8 @@ static char __linker_dl_err_buf[768];
|
|||||||
#define DL_ERR(fmt, x...) \
|
#define DL_ERR(fmt, x...) \
|
||||||
do { \
|
do { \
|
||||||
format_buffer(__linker_dl_err_buf, sizeof(__linker_dl_err_buf), \
|
format_buffer(__linker_dl_err_buf, sizeof(__linker_dl_err_buf), \
|
||||||
"(%s:%d, pid %d) %s: " fmt, \
|
"%s(%s:%d): " fmt, \
|
||||||
BASENAME(__FILE__), __LINE__, pid, __func__, ##x); \
|
__FUNCTION__, BASENAME(__FILE__), __LINE__, ##x); \
|
||||||
ERROR(fmt "\n", ##x); \
|
ERROR(fmt "\n", ##x); \
|
||||||
} while(0)
|
} while(0)
|
||||||
|
|
||||||
@@ -972,7 +972,7 @@ static int soinfo_relocate(soinfo *si, Elf32_Rel *rel, unsigned count,
|
|||||||
reference.. */
|
reference.. */
|
||||||
s = &symtab[sym];
|
s = &symtab[sym];
|
||||||
if (ELF32_ST_BIND(s->st_info) != STB_WEAK) {
|
if (ELF32_ST_BIND(s->st_info) != STB_WEAK) {
|
||||||
DL_ERR("cannot locate \"%s\"...", sym_name);
|
DL_ERR("cannot locate symbol \"%s\" referenced by \"%s\"...", sym_name, si->name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user