From 649ad05add7f3f69a62b2ee929582a531f59cfd9 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 3 Feb 1999 10:30:07 +0000 Subject: Update. 1999-02-03 Ulrich Drepper * elf/dlsym.c (dlsym_doit): If no symbol for RTLD_NEXT is found initialize ref element of args object so that dlsym does not dump a core. * elf/dlvsym.c (dlvsym_doit): Likewise. --- ChangeLog | 7 +++++++ elf/dlsym.c | 12 +++++++++++- elf/dlvsym.c | 12 +++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index c732150085..55b9ac863c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +1999-02-03 Ulrich Drepper + + * elf/dlsym.c (dlsym_doit): If no symbol for RTLD_NEXT is found + initialize ref element of args object so that dlsym does not dump + a core. + * elf/dlvsym.c (dlvsym_doit): Likewise. + 1999-02-03 Jakub Jelinek * sysdeps/unix/sysv/linux/sparc/sparc64/pipe.S: Set branch diff --git a/elf/dlsym.c b/elf/dlsym.c index 64d0cabbd4..5753f54d6e 100644 --- a/elf/dlsym.c +++ b/elf/dlsym.c @@ -1,5 +1,5 @@ /* Look up a symbol in a shared object loaded by `dlopen'. - Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -65,6 +65,16 @@ RTLD_NEXT used in code not dynamically loaded")); args->loadbase = _dl_lookup_symbol_skip (args->name, &args->ref, l->l_local_scope, NULL, match); + + if (args->loadbase == 0) + { + /* This means that no such symbol is defined. In this case we + have to provide a phony Elfxx_Sym entry since the value is + referenced in `dlsym'. */ + static const ElfW(Sym) null_result; + + args->ref = &null_result; + } } else { diff --git a/elf/dlvsym.c b/elf/dlvsym.c index cee0e7f36b..b100a2ecbf 100644 --- a/elf/dlvsym.c +++ b/elf/dlvsym.c @@ -1,5 +1,5 @@ /* Look up a versioned symbol in a shared object loaded by `dlopen'. - Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -71,6 +71,16 @@ RTLD_NEXT used in code not dynamically loaded")); l->l_local_scope, NULL, &args->version, match); + + if (args->loadbase == 0) + { + /* This means that no such symbol is defined. In this case we + have to provide a phony Elfxx_Sym entry since the value is + referenced in `dlsym'. */ + static const ElfW(Sym) null_result; + + args->ref = &null_result; + } } else { -- cgit 1.4.1