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 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
