On Mon, Nov 15, 2010 at 02:14:00PM -0500, Mark Mentovai wrote: >Poke? > >This is a simple fix to a reproducible crash. I’m surprised it hasn’t been >committed, or if there’s a problem with the patch, that it hasn’t been raised.
I didn't look in detail yet but it sounds like it penalized LDSO_SEARCH_INTERP_PATH more than it ought to (i.e. there must be a better way). > >I wrote: >> Since b65c7b2c79debcb9017e31913e01eeaa280106fb, the implicit search path >> can be disabled by not #defining __LDSO_SEARCH_INTERP_PATH__. This >> causes _dl_ldsopath to never be set, so it remains NULL. _dl_ldsopath is >> still used when __LDSO_LDD_SUPPORT__ is #defined, to strip the path off >> of the beginning of the absolute path to the ld.so interpreter in use >> for printing. The _dl_strlen will crash with a NULL argument. >> >> Rather than relying on _dl_ldsopath, this change causes ldd to compute >> the interpreter's basename directly. >> >> glibc ld.so seems to print the full path to the interpreter without >> any computed basename or =>. I personally prefer glibc's behavior, but >> to preserve backwards compatibility with uClibc ld.so, the existing >> format with the computed basename, =>, and full path is used here. This >> enables simpler (and unchanged) text processing in a pipeline. >> >> Signed-off-by: Mark Mentovai <[email protected]> >> --- >> ldso/ldso/ldso.c | 12 +++++++++--- >> 1 files changed, 9 insertions(+), 3 deletions(-) >> >> diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c >> index ea4ad0f..a2bfabd 100644 >> --- a/ldso/ldso/ldso.c >> +++ b/ldso/ldso/ldso.c >> @@ -918,9 +918,15 @@ void _dl_get_ready_to_run(struct elf_resolve *tpnt, >> DL_LOADADDR_TYPE load_addr, >> #ifdef __LDSO_LDD_SUPPORT__ >> /* End of the line for ldd.... */ >> if (trace_loaded_objects) { >> - _dl_dprintf(1, "\t%s => %s (%x)\n", >> - rpnt->dyn->libname + _dl_strlen(_dl_ldsopath) + 1, >> - rpnt->dyn->libname, >> DL_LOADADDR_BASE(rpnt->dyn->loadaddr)); >> + /* glibc ld.so/ldd would just do >> + * _dl_dprintf(1, "\t%s (%x)\n", rpnt->dyn->libname, >> + * DL_LOADADDR_BASE(rpnt->dyn->loadaddr)); >> + * but uClibc has always used the => format. */ >> + char *ptmp = _dl_strrchr(rpnt->dyn->libname, '/'); >> + if (ptmp != rpnt->dyn->libname) >> + ++ptmp; >> + _dl_dprintf(1, "\t%s => %s (%x)\n", ptmp, rpnt->dyn->libname, >> + DL_LOADADDR_BASE(rpnt->dyn->loadaddr)); >> _dl_exit(0); >> } >> #endif >_______________________________________________ >uClibc mailing list >[email protected] >http://lists.busybox.net/mailman/listinfo/uclibc _______________________________________________ uClibc mailing list [email protected] http://lists.busybox.net/mailman/listinfo/uclibc
