diff options
author | Florian Weimer <fweimer@redhat.com> | 2018-01-04 18:46:17 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2018-01-04 18:46:24 +0100 |
commit | 82eef55f8fad3e00c53050de5d6ebea08df488b3 (patch) | |
tree | e0e1ed86b2296703182789d7f5ea607bf066ffe4 /elf/tst-libc_dlvsym.c | |
parent | 7abf02f3ee7627d617def77d0d6e7bea2da8d98c (diff) | |
download | glibc-82eef55f8fad3e00c53050de5d6ebea08df488b3.tar.gz glibc-82eef55f8fad3e00c53050de5d6ebea08df488b3.tar.xz glibc-82eef55f8fad3e00c53050de5d6ebea08df488b3.zip |
elf: Support dlvsym within libc.so
This commit adds a new _dl_open_hook entry for dlvsym and implements the function using the existing dl_lookup_symbol_x function supplied by the dynamic loader. A new hook variable, _dl_open_hook2, is introduced, which should make this change suitable for backporting: For old statically linked binaries, __libc_dlvsym will always return NULL.
Diffstat (limited to 'elf/tst-libc_dlvsym.c')
-rw-r--r-- | elf/tst-libc_dlvsym.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/elf/tst-libc_dlvsym.c b/elf/tst-libc_dlvsym.c new file mode 100644 index 0000000000..864db4ee6a --- /dev/null +++ b/elf/tst-libc_dlvsym.c @@ -0,0 +1,34 @@ +/* Compare dlvsym and __libc_dlvsym results. Dynamic version. + Copyright (C) 2017 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 + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + <http://www.gnu.org/licenses/>. */ + +#include "tst-libc_dlvsym.h" + +static int +do_test (void) +{ + compare_vsyms (); + + void *handle = xdlopen ("tst-libc_dlvsym-dso.so", RTLD_LAZY); + void (*compare) (void) = xdlsym (handle, "compare_vsyms_global"); + compare (); + xdlclose (handle); + + return 0; +} + +#include <support/test-driver.c> |