mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-10 05:03:06 +03:00
elf: Clean up GLIBC_PRIVATE exports of internal libdl symbols
They are no longer needed after everything has been moved into libc. The _dl_vsym test has to be removed because the symbol cannot be used outside libc anymore. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
@@ -196,4 +196,3 @@ _dlerror_run (void (*operate) (void *), void *args)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
libc_hidden_def (_dlerror_run)
|
|
||||||
|
16
elf/Makefile
16
elf/Makefile
@@ -165,7 +165,7 @@ tests-static-normal := tst-leaks1-static tst-array1-static tst-array5-static \
|
|||||||
|
|
||||||
tests-static-internal := tst-tls1-static tst-tls2-static \
|
tests-static-internal := tst-tls1-static tst-tls2-static \
|
||||||
tst-ptrguard1-static tst-stackguard1-static \
|
tst-ptrguard1-static tst-stackguard1-static \
|
||||||
tst-tls1-static-non-pie tst-libc_dlvsym-static
|
tst-tls1-static-non-pie
|
||||||
|
|
||||||
CRT-tst-tls1-static-non-pie := $(csu-objpfx)crt1.o
|
CRT-tst-tls1-static-non-pie := $(csu-objpfx)crt1.o
|
||||||
tst-tls1-static-non-pie-no-pie = yes
|
tst-tls1-static-non-pie-no-pie = yes
|
||||||
@@ -229,7 +229,7 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \
|
|||||||
tests-internal += loadtest unload unload2 circleload1 \
|
tests-internal += loadtest unload unload2 circleload1 \
|
||||||
neededtest neededtest2 neededtest3 neededtest4 \
|
neededtest neededtest2 neededtest3 neededtest4 \
|
||||||
tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
|
tst-tls3 tst-tls6 tst-tls7 tst-tls8 tst-dlmopen2 \
|
||||||
tst-ptrguard1 tst-stackguard1 tst-libc_dlvsym \
|
tst-ptrguard1 tst-stackguard1 \
|
||||||
tst-create_format1 tst-tls-surplus tst-dl-hwcaps_split
|
tst-create_format1 tst-tls-surplus tst-dl-hwcaps_split
|
||||||
tests-container += tst-pldd tst-dlopen-tlsmodid-container \
|
tests-container += tst-pldd tst-dlopen-tlsmodid-container \
|
||||||
tst-dlopen-self-container tst-preload-pthread-libc
|
tst-dlopen-self-container tst-preload-pthread-libc
|
||||||
@@ -326,7 +326,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
|||||||
tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12 \
|
tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12 \
|
||||||
tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
|
tst-latepthreadmod $(tst-tls-many-dynamic-modules) \
|
||||||
tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
|
tst-nodelete-dlclose-dso tst-nodelete-dlclose-plugin \
|
||||||
tst-main1mod tst-libc_dlvsym-dso tst-absolute-sym-lib \
|
tst-main1mod tst-absolute-sym-lib \
|
||||||
tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
|
tst-absolute-zero-lib tst-big-note-lib tst-unwind-ctor-lib \
|
||||||
tst-audit13mod1 tst-sonamemove-linkmod1 \
|
tst-audit13mod1 tst-sonamemove-linkmod1 \
|
||||||
tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
|
tst-sonamemove-runmod1 tst-sonamemove-runmod2 \
|
||||||
@@ -352,7 +352,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
|
|||||||
|
|
||||||
# Most modules build with _ISOMAC defined, but those filtered out
|
# Most modules build with _ISOMAC defined, but those filtered out
|
||||||
# depend on internal headers.
|
# depend on internal headers.
|
||||||
modules-names-tests = $(filter-out ifuncmod% tst-libc_dlvsym-dso tst-tlsmod%,\
|
modules-names-tests = $(filter-out ifuncmod% tst-tlsmod%,\
|
||||||
$(modules-names))
|
$(modules-names))
|
||||||
|
|
||||||
ifeq (yes,$(have-mtls-dialect-gnu2))
|
ifeq (yes,$(have-mtls-dialect-gnu2))
|
||||||
@@ -1582,14 +1582,6 @@ LDLIBS-tst-absolute-zero-lib.so = tst-absolute-zero-lib.lds
|
|||||||
$(objpfx)tst-absolute-zero-lib.so: $(LDLIBS-tst-absolute-zero-lib.so)
|
$(objpfx)tst-absolute-zero-lib.so: $(LDLIBS-tst-absolute-zero-lib.so)
|
||||||
$(objpfx)tst-absolute-zero: $(objpfx)tst-absolute-zero-lib.so
|
$(objpfx)tst-absolute-zero: $(objpfx)tst-absolute-zero-lib.so
|
||||||
|
|
||||||
# Both the main program and the DSO for tst-libc_dlvsym need to link
|
|
||||||
# against libdl.
|
|
||||||
$(objpfx)tst-libc_dlvsym-dso.so: $(libsupport)
|
|
||||||
$(objpfx)tst-libc_dlvsym.out: $(objpfx)tst-libc_dlvsym-dso.so
|
|
||||||
tst-libc_dlvsym-static-ENV = \
|
|
||||||
LD_LIBRARY_PATH=$(ld-library-path):$(common-objpfx)dlfcn
|
|
||||||
$(objpfx)tst-libc_dlvsym-static.out: $(objpfx)tst-libc_dlvsym-dso.so
|
|
||||||
|
|
||||||
$(objpfx)tst-big-note: $(objpfx)tst-big-note-lib.so
|
$(objpfx)tst-big-note: $(objpfx)tst-big-note-lib.so
|
||||||
# Avoid creating an ABI tag note, which may come before the
|
# Avoid creating an ABI tag note, which may come before the
|
||||||
# artificial, large note in tst-big-note-lib.o and invalidate the
|
# artificial, large note in tst-big-note-lib.o and invalidate the
|
||||||
|
@@ -22,9 +22,6 @@ libc {
|
|||||||
%endif
|
%endif
|
||||||
GLIBC_PRIVATE {
|
GLIBC_PRIVATE {
|
||||||
# functions used in other libraries
|
# functions used in other libraries
|
||||||
_dl_addr;
|
|
||||||
_dl_sym; _dl_vsym;
|
|
||||||
__libc_dlclose; __libc_dlopen_mode; __libc_dlsym; __libc_dlvsym;
|
|
||||||
__libc_early_init;
|
__libc_early_init;
|
||||||
|
|
||||||
# Internal error handling support. Interposes the functions in ld.so.
|
# Internal error handling support. Interposes the functions in ld.so.
|
||||||
|
@@ -142,4 +142,3 @@ _dl_addr (const void *address, Dl_info *info,
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
libc_hidden_def (_dl_addr)
|
|
||||||
|
@@ -162,7 +162,6 @@ __libc_dlopen_mode (const char *name, int mode)
|
|||||||
#endif
|
#endif
|
||||||
return dlerror_run (do_dlopen, &args) ? NULL : (void *) args.map;
|
return dlerror_run (do_dlopen, &args) ? NULL : (void *) args.map;
|
||||||
}
|
}
|
||||||
libc_hidden_def (__libc_dlopen_mode)
|
|
||||||
|
|
||||||
#ifndef SHARED
|
#ifndef SHARED
|
||||||
void *
|
void *
|
||||||
@@ -192,7 +191,6 @@ __libc_dlsym (void *map, const char *name)
|
|||||||
return (dlerror_run (do_dlsym, &args) ? NULL
|
return (dlerror_run (do_dlsym, &args) ? NULL
|
||||||
: (void *) (DL_SYMBOL_ADDRESS (args.loadbase, args.ref)));
|
: (void *) (DL_SYMBOL_ADDRESS (args.loadbase, args.ref)));
|
||||||
}
|
}
|
||||||
libc_hidden_def (__libc_dlsym)
|
|
||||||
|
|
||||||
/* Replacement for dlvsym. MAP must be a real map. This function
|
/* Replacement for dlvsym. MAP must be a real map. This function
|
||||||
returns NULL without setting the dlerror value in case of static
|
returns NULL without setting the dlerror value in case of static
|
||||||
@@ -219,7 +217,6 @@ __libc_dlvsym (void *map, const char *name, const char *version)
|
|||||||
: (void *) (DL_SYMBOL_ADDRESS (args.dlsym.loadbase,
|
: (void *) (DL_SYMBOL_ADDRESS (args.dlsym.loadbase,
|
||||||
args.dlsym.ref)));
|
args.dlsym.ref)));
|
||||||
}
|
}
|
||||||
libc_hidden_def (__libc_dlvsym)
|
|
||||||
|
|
||||||
int
|
int
|
||||||
__libc_dlclose (void *map)
|
__libc_dlclose (void *map)
|
||||||
@@ -230,7 +227,6 @@ __libc_dlclose (void *map)
|
|||||||
#endif
|
#endif
|
||||||
return dlerror_run (do_dlclose, map);
|
return dlerror_run (do_dlclose, map);
|
||||||
}
|
}
|
||||||
libc_hidden_def (__libc_dlclose)
|
|
||||||
|
|
||||||
|
|
||||||
static bool __libc_freeres_fn_section
|
static bool __libc_freeres_fn_section
|
||||||
|
@@ -188,11 +188,9 @@ _dl_vsym (void *handle, const char *name, const char *version, void *who)
|
|||||||
|
|
||||||
return do_sym (handle, name, who, &vers, 0);
|
return do_sym (handle, name, who, &vers, 0);
|
||||||
}
|
}
|
||||||
libc_hidden_def (_dl_vsym)
|
|
||||||
|
|
||||||
void *
|
void *
|
||||||
_dl_sym (void *handle, const char *name, void *who)
|
_dl_sym (void *handle, const char *name, void *who)
|
||||||
{
|
{
|
||||||
return do_sym (handle, name, who, NULL, DL_LOOKUP_RETURN_NEWEST);
|
return do_sym (handle, name, who, NULL, DL_LOOKUP_RETURN_NEWEST);
|
||||||
}
|
}
|
||||||
libc_hidden_def (_dl_sym)
|
|
||||||
|
@@ -1,25 +0,0 @@
|
|||||||
/* Compare dlvsym and __libc_dlvsym results. Shared object code.
|
|
||||||
Copyright (C) 2017-2021 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
|
|
||||||
<https://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "tst-libc_dlvsym.h"
|
|
||||||
|
|
||||||
void
|
|
||||||
compare_vsyms_global (void)
|
|
||||||
{
|
|
||||||
compare_vsyms ();
|
|
||||||
}
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Compare dlvsym and __libc_dlvsym results. Static version.
|
|
||||||
Copyright (C) 2017-2021 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
|
|
||||||
<https://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include <support/xdlfcn.h>
|
|
||||||
|
|
||||||
static int
|
|
||||||
do_test (void)
|
|
||||||
{
|
|
||||||
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>
|
|
@@ -1,34 +0,0 @@
|
|||||||
/* Compare dlvsym and __libc_dlvsym results. Dynamic version.
|
|
||||||
Copyright (C) 2017-2021 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
|
|
||||||
<https://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>
|
|
@@ -1,130 +0,0 @@
|
|||||||
/* Compare dlvsym and __libc_dlvsym results. Common code.
|
|
||||||
Copyright (C) 2017-2021 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
|
|
||||||
<https://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
/* compare_vsyms is the main entry point for these tests.
|
|
||||||
|
|
||||||
Indirectly, It calls __libc_dlvsym (from libc.so; internal
|
|
||||||
interface) and dlvsym (from libdl.so; public interface) to compare
|
|
||||||
the results for a selected set of symbols in libc.so which
|
|
||||||
typically have more than one symbol version. The two functions are
|
|
||||||
implemented by somewhat different code, and this test checks that
|
|
||||||
their results are the same.
|
|
||||||
|
|
||||||
The versions are generated to range from GLIBC_2.0 to GLIBC_2.Y,
|
|
||||||
with Y being the current __GLIBC_MINOR__ version plus two. In
|
|
||||||
addition, there is a list of special symbol versions of the form
|
|
||||||
GLIBC_2.Y.Z, which were used for some releases.
|
|
||||||
|
|
||||||
Comparing the two dlvsym results at versions which do not actually
|
|
||||||
exist does not test much, but it will not contribute to false test
|
|
||||||
failures, either. */
|
|
||||||
|
|
||||||
#include <array_length.h>
|
|
||||||
#include <gnu/lib-names.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <support/check.h>
|
|
||||||
#include <support/xdlfcn.h>
|
|
||||||
|
|
||||||
/* Run consistency check for versioned symbol NAME@VERSION. NB: We
|
|
||||||
may execute in a shared object, so exit on error for proper error
|
|
||||||
reporting. */
|
|
||||||
static void
|
|
||||||
compare_vsyms_0 (void *libc_handle, const char *name, const char *version,
|
|
||||||
bool *pfound)
|
|
||||||
{
|
|
||||||
void *dlvsym_address = dlvsym (libc_handle, name, version);
|
|
||||||
void *libc_dlvsym_address
|
|
||||||
= __libc_dlvsym (libc_handle, name, version);
|
|
||||||
if (dlvsym_address != libc_dlvsym_address)
|
|
||||||
FAIL_EXIT1 ("%s@%s mismatch: %p != %p",
|
|
||||||
name, version, dlvsym_address, libc_dlvsym_address);
|
|
||||||
if (dlvsym_address != NULL)
|
|
||||||
*pfound = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Run consistency check for versioned symbol NAME at multiple symbol
|
|
||||||
version. */
|
|
||||||
static void
|
|
||||||
compare_vsyms_1 (void *libc_handle, const char *name)
|
|
||||||
{
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
/* Historic versions which do not follow the usual GLIBC_2.Y
|
|
||||||
pattern, to increase test coverage. Not all architectures have
|
|
||||||
those, but probing additional versions does not hurt. */
|
|
||||||
static const char special_versions[][12] =
|
|
||||||
{
|
|
||||||
"GLIBC_2.1.1",
|
|
||||||
"GLIBC_2.1.2",
|
|
||||||
"GLIBC_2.1.3",
|
|
||||||
"GLIBC_2.1.4",
|
|
||||||
"GLIBC_2.2.1",
|
|
||||||
"GLIBC_2.2.2",
|
|
||||||
"GLIBC_2.2.3",
|
|
||||||
"GLIBC_2.2.4",
|
|
||||||
"GLIBC_2.2.5",
|
|
||||||
"GLIBC_2.2.6",
|
|
||||||
"GLIBC_2.3.2",
|
|
||||||
"GLIBC_2.3.3",
|
|
||||||
"GLIBC_2.3.4",
|
|
||||||
};
|
|
||||||
for (int i = 0; i < array_length (special_versions); ++i)
|
|
||||||
compare_vsyms_0 (libc_handle, name, special_versions[i], &found);
|
|
||||||
|
|
||||||
/* Iterate to an out-of-range version, to cover some unused symbols
|
|
||||||
as well. */
|
|
||||||
for (int minor_version = 0; minor_version <= __GLIBC_MINOR__ + 2;
|
|
||||||
++minor_version)
|
|
||||||
{
|
|
||||||
char version[30];
|
|
||||||
snprintf (version, sizeof (version), "GLIBC_%d.%d",
|
|
||||||
__GLIBC__, minor_version);
|
|
||||||
compare_vsyms_0 (libc_handle, name, version, &found);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found)
|
|
||||||
FAIL_EXIT1 ("symbol %s not found at any version", name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Run consistency checks for various symbols which usually have
|
|
||||||
multiple versions. */
|
|
||||||
static void
|
|
||||||
compare_vsyms (void)
|
|
||||||
{
|
|
||||||
/* The minor version loop in compare_vsyms_1 needs updating in case
|
|
||||||
we ever switch to glibc 3.0. */
|
|
||||||
if (__GLIBC__ != 2)
|
|
||||||
FAIL_EXIT1 ("unexpected glibc major version: %d", __GLIBC__);
|
|
||||||
|
|
||||||
/* __libc_dlvsym does not recognize the special RTLD_* handles, so
|
|
||||||
obtain an explicit handle for libc.so. */
|
|
||||||
void *libc_handle = xdlopen (LIBC_SO, RTLD_LAZY | RTLD_NOLOAD);
|
|
||||||
|
|
||||||
|
|
||||||
/* sys_errlist and sys_siglist were deprecated in glibc 2.32 and they are
|
|
||||||
not available on architectures with base ABI newer than 2.32. */
|
|
||||||
#if TEST_COMPAT (libc, GLIBC_2_0, GLIBC_2_32)
|
|
||||||
compare_vsyms_1 (libc_handle, "_sys_errlist");
|
|
||||||
compare_vsyms_1 (libc_handle, "_sys_siglist");
|
|
||||||
#endif
|
|
||||||
compare_vsyms_1 (libc_handle, "quick_exit");
|
|
||||||
|
|
||||||
xdlclose (libc_handle);
|
|
||||||
}
|
|
@@ -45,20 +45,20 @@ extern char **__libc_argv attribute_hidden;
|
|||||||
better error handling semantics for the library. */
|
better error handling semantics for the library. */
|
||||||
#define __libc_dlopen(name) \
|
#define __libc_dlopen(name) \
|
||||||
__libc_dlopen_mode (name, RTLD_NOW | __RTLD_DLOPEN)
|
__libc_dlopen_mode (name, RTLD_NOW | __RTLD_DLOPEN)
|
||||||
extern void *__libc_dlopen_mode (const char *__name, int __mode);
|
extern void *__libc_dlopen_mode (const char *__name, int __mode)
|
||||||
extern void *__libc_dlsym (void *__map, const char *__name);
|
attribute_hidden;
|
||||||
extern void *__libc_dlvsym (void *map, const char *name, const char *version);
|
extern void *__libc_dlsym (void *__map, const char *__name)
|
||||||
extern int __libc_dlclose (void *__map);
|
attribute_hidden;
|
||||||
libc_hidden_proto (__libc_dlopen_mode)
|
extern void *__libc_dlvsym (void *map, const char *name, const char *version)
|
||||||
libc_hidden_proto (__libc_dlsym)
|
attribute_hidden;
|
||||||
libc_hidden_proto (__libc_dlvsym)
|
extern int __libc_dlclose (void *__map)
|
||||||
libc_hidden_proto (__libc_dlclose)
|
attribute_hidden;
|
||||||
|
|
||||||
/* Locate shared object containing the given address. */
|
/* Locate shared object containing the given address. */
|
||||||
#ifdef ElfW
|
#ifdef ElfW
|
||||||
extern int _dl_addr (const void *address, Dl_info *info,
|
extern int _dl_addr (const void *address, Dl_info *info,
|
||||||
struct link_map **mapp, const ElfW(Sym) **symbolp);
|
struct link_map **mapp, const ElfW(Sym) **symbolp)
|
||||||
libc_hidden_proto (_dl_addr)
|
attribute_hidden;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct link_map;
|
struct link_map;
|
||||||
@@ -73,23 +73,21 @@ extern void _dl_close_worker (struct link_map *map, bool force)
|
|||||||
/* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or
|
/* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or
|
||||||
RTLD_NEXT). WHO is the calling function, for RTLD_NEXT. Returns
|
RTLD_NEXT). WHO is the calling function, for RTLD_NEXT. Returns
|
||||||
the symbol value, which may be NULL. */
|
the symbol value, which may be NULL. */
|
||||||
extern void *_dl_sym (void *handle, const char *name, void *who);
|
extern void *_dl_sym (void *handle, const char *name, void *who)
|
||||||
libc_hidden_proto (_dl_sym)
|
attribute_hidden;
|
||||||
|
|
||||||
/* Look up version VERSION of symbol NAME in shared object HANDLE
|
/* Look up version VERSION of symbol NAME in shared object HANDLE
|
||||||
(which may be RTLD_DEFAULT or RTLD_NEXT). WHO is the calling
|
(which may be RTLD_DEFAULT or RTLD_NEXT). WHO is the calling
|
||||||
function, for RTLD_NEXT. Returns the symbol value, which may be
|
function, for RTLD_NEXT. Returns the symbol value, which may be
|
||||||
NULL. */
|
NULL. */
|
||||||
extern void *_dl_vsym (void *handle, const char *name, const char *version,
|
extern void *_dl_vsym (void *handle, const char *name, const char *version,
|
||||||
void *who);
|
void *who) attribute_hidden;
|
||||||
libc_hidden_proto (_dl_vsym)
|
|
||||||
|
|
||||||
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
|
/* Helper function for <dlfcn.h> functions. Runs the OPERATE function via
|
||||||
_dl_catch_error. Returns zero for success, nonzero for failure; and
|
_dl_catch_error. Returns zero for success, nonzero for failure; and
|
||||||
arranges for `dlerror' to return the error details.
|
arranges for `dlerror' to return the error details.
|
||||||
ARGS is passed as argument to OPERATE. */
|
ARGS is passed as argument to OPERATE. */
|
||||||
extern int _dlerror_run (void (*operate) (void *), void *args);
|
extern int _dlerror_run (void (*operate) (void *), void *args) attribute_hidden;
|
||||||
libc_hidden_proto (_dlerror_run)
|
|
||||||
|
|
||||||
/* This structure is used to make the outer (statically linked)
|
/* This structure is used to make the outer (statically linked)
|
||||||
implementation of dlopen and related functions to the inner libc
|
implementation of dlopen and related functions to the inner libc
|
||||||
|
Reference in New Issue
Block a user