From 993b3242cdc37152fbbc7fbd5ce22b2734b04b23 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 29 Mar 1997 17:32:35 +0000 Subject: Update. 1997-03-29 17:39 Ulrich Drepper * math/Makefile (routines): Add carg, s_ccosh and s_csinh. * math/complex.h: Add C++ protection. * math/libm-test.c (cexp_test): Correct a few bugs. (csinh_test): New function. (ccosh_test): New function. (cacos_test): New function. (cacosh_test): New function. (casinh_test): New function. (catanh_test): New function. (main): Add calls to csinh_test and ccosh_test. * misc/Makefile (tests): Add tst-tsearch. Add rule to link tst-tsearch against libm. * misc/tsearch.c: Rewritten to use Red-Black-Tree algorithm by Bernd Schmidt . * misc/tst-tsearch.c: New file. * stdio-common/bug5.c: Clear LD_LIBRARY_PATH environment variable before using system. * stdio-common/test-popen.c: Clear LD_LIBRARY_PATH environment variable before using popen. * sysdeps/libm-ieee754/s_cexp.c: Correct handling of special cases. * sysdeps/libm-ieee754/s_cexpf.c: Likewise. * sysdeps/libm-ieee754/s_cexpl.c: Likewise. * sysdeps/libm-i387/s_cexp.S: New file. ix87 specific implementation of complex exponential function. * sysdeps/libm-i387/s_cexpf.S: New file. * sysdeps/libm-i387/s_cexpl.S: New file. * sysdeps/libm-ieee754/s_ccosh.c: New file. Implementation of complex cosh function. * sysdeps/libm-ieee754/s_ccoshf.c: New file. * sysdeps/libm-ieee754/s_ccoshl.c: New file. * sysdeps/libm-ieee754/s_csinh.c: New file. Implementation of complex sinh function. * sysdeps/libm-ieee754/s_csinhf.c: New file. * sysdeps/libm-ieee754/s_csinhl.c: New file. * math/carg.c: New file. Generic implementatio of carg function. * math/cargf.c: New file. * math/cargl.c: New file. 1997-03-29 16:07 Ulrich Drepper * sysdeps/posix/system.c: Update copyright. 1997-03-29 04:18 Ulrich Drepper * elf/dl-error.c (_dl_catch_error): Add another argument which is passed to OPERATE. (_dl_receive_error): Likewise. * elf/link.h: Change prototypes for _dl_catch_error and _dl_receive_error to reflect above change. * elf/dl-deps.c: Don't use nested function. Call _dl_catch_error with additional argument with pointer to data. * elf/dlclose.c: Likewise. * elf/dlerror.c: Likewise. * elf/dlopen.c: Likewise. * elf/dlsym.c: Likewise. * elf/dlvsym.c: Likewise. * elf/rtld.c: Likewise. * nss/nsswitch.c: Likewise. Patch by Bernd Schmidt . 1997-03-28 21:14 Miguel de Icaza * elf/dl-error.c: Manually set up the values of "c", this avoids a call to memcpy and a zero 152 bytes structure. * sysdeps/sparc/dl-machine.h (elf_machine_rela): Test RTLD_BOOTSTRAP to avoid performing relative relocs on a second pass. * sysdeps/sparc/udiv_qrnnd.S: Make the code PIC aware. * sysdeps/unix/sysv/linux/sparc/Dist: Add kernel_stat.h and kernel_sigaction.h Add Linux/SPARC specific definitions. * sysdeps/unix/sysv/linux/sparc/fcntlbits.h: New file. * sysdeps/unix/sysv/linux/sparc/ioctls.h: New file. * sysdeps/unix/sysv/linux/sparc/kernel_sigaction.h: New file. * sysdeps/unix/sysv/linux/sparc/kernel_stat.h: New file. * sysdeps/unix/sysv/linux/sparc/sigaction.h: New file. * sysdeps/unix/sysv/linux/sparc/signum.h: New file. * sysdeps/unix/sysv/linux/sparc/termbits.h: New file. 1997-03-28 13:06 Philip Blundell * sysdeps/posix/getaddrinfo.c (gaih_inet_serv): Use __getservbyname_r() not getservbyname(). (BROKEN_LIKE_POSIX): Define to 1 so we get strict POSIX behaviour. --- elf/dl-deps.c | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) (limited to 'elf/dl-deps.c') diff --git a/elf/dl-deps.c b/elf/dl-deps.c index 7a6772979b..e2fd340822 100644 --- a/elf/dl-deps.c +++ b/elf/dl-deps.c @@ -22,6 +22,29 @@ #include #include +struct openaux_args +{ + /* The arguments to openaux. */ + struct link_map *map; + int trace_mode; + const char *strtab; + ElfW(Dyn) *d; + + /* The return value of openaux. */ + struct link_map *aux; +}; + +static void +openaux (void *a) +{ + struct openaux_args *args = (struct openaux_args *) a; + + args->aux = _dl_map_object (args->map, args->strtab + args->d->d_un.d_val, + (args->map->l_type == lt_executable + ? lt_library : args->map->l_type), + args->trace_mode); +} + void _dl_map_object_deps (struct link_map *map, struct link_map **preloads, unsigned int npreloads, @@ -75,27 +98,21 @@ _dl_map_object_deps (struct link_map *map, /* There is at least one auxiliary library specified. We try to load it, and if we can, use its symbols in preference to our own. But if we can't load it, we just silently ignore it. */ - const char *strtab + struct openaux_args args; + args.strtab = ((void *) map->l_addr + map->l_info[DT_STRTAB]->d_un.d_ptr); - ElfW(Dyn) *d; + args.map = map; + args.trace_mode = trace_mode; - for (d = map->l_ld; d->d_tag != DT_NULL; ++d) - if (d->d_tag == DT_AUXILIARY) + for (args.d = map->l_ld; args.d->d_tag != DT_NULL; ++args.d) + if (args.d->d_tag == DT_AUXILIARY) { - struct link_map *aux; - void openaux (void) - { - aux = _dl_map_object (map, strtab + d->d_un.d_val, - (map->l_type == lt_executable - ? lt_library : map->l_type), - trace_mode); - } char *errstring; const char *objname; - if (! _dl_catch_error (&errstring, &objname, openaux)) + if (! _dl_catch_error (&errstring, &objname, openaux, &args)) /* The auxiliary object is actually there. Use it as the first search element, even before MAP itself. */ - preload (aux); + preload (args.aux); } } -- cgit 1.4.1