Rename dlsym_handle_lookup:6 to dlsym_handle_lookup_impl
Rearrange a function to remove a forward declaration.
Test: m linker
Change-Id: I014eac3319bd6f4c10f8bba50f8006f96bb33dce
diff --git a/linker/linker.cpp b/linker/linker.cpp
index 8de82d5..5d38151 100644
--- a/linker/linker.cpp
+++ b/linker/linker.cpp
@@ -724,12 +724,12 @@
}
-static const ElfW(Sym)* dlsym_handle_lookup(android_namespace_t* ns,
- soinfo* root,
- soinfo* skip_until,
- soinfo** found,
- SymbolName& symbol_name,
- const version_info* vi) {
+static const ElfW(Sym)* dlsym_handle_lookup_impl(android_namespace_t* ns,
+ soinfo* root,
+ soinfo* skip_until,
+ soinfo** found,
+ SymbolName& symbol_name,
+ const version_info* vi) {
const ElfW(Sym)* result = nullptr;
bool skip_lookup = skip_until != nullptr;
@@ -755,38 +755,6 @@
return result;
}
-static const ElfW(Sym)* dlsym_linear_lookup(android_namespace_t* ns,
- const char* name,
- const version_info* vi,
- soinfo** found,
- soinfo* caller,
- void* handle);
-
-// This is used by dlsym(3). It performs symbol lookup only within the
-// specified soinfo object and its dependencies in breadth first order.
-static const ElfW(Sym)* dlsym_handle_lookup(soinfo* si,
- soinfo** found,
- const char* name,
- const version_info* vi) {
- // According to man dlopen(3) and posix docs in the case when si is handle
- // of the main executable we need to search not only in the executable and its
- // dependencies but also in all libraries loaded with RTLD_GLOBAL.
- //
- // Since RTLD_GLOBAL is always set for the main executable and all dt_needed shared
- // libraries and they are loaded in breath-first (correct) order we can just execute
- // dlsym(RTLD_DEFAULT, ...); instead of doing two stage lookup.
- if (si == solist_get_somain()) {
- return dlsym_linear_lookup(&g_default_namespace, name, vi, found, nullptr, RTLD_DEFAULT);
- }
-
- SymbolName symbol_name(name);
- // note that the namespace is not the namespace associated with caller_addr
- // we use ns associated with root si intentionally here. Using caller_ns
- // causes problems when user uses dlopen_ext to open a library in the separate
- // namespace and then calls dlsym() on the handle.
- return dlsym_handle_lookup(si->get_primary_namespace(), si, nullptr, found, symbol_name, vi);
-}
-
/* This is used by dlsym(3) to performs a global symbol lookup. If the
start value is null (for RTLD_DEFAULT), the search starts at the
beginning of the global solist. Otherwise the search starts at the
@@ -830,16 +798,16 @@
}
}
- // If not found - use dlsym_handle_lookup for caller's local_group
+ // If not found - use dlsym_handle_lookup_impl for caller's local_group
if (s == nullptr && caller != nullptr) {
soinfo* local_group_root = caller->get_local_group_root();
- return dlsym_handle_lookup(local_group_root->get_primary_namespace(),
- local_group_root,
- (handle == RTLD_NEXT) ? caller : nullptr,
- found,
- symbol_name,
- vi);
+ return dlsym_handle_lookup_impl(local_group_root->get_primary_namespace(),
+ local_group_root,
+ (handle == RTLD_NEXT) ? caller : nullptr,
+ found,
+ symbol_name,
+ vi);
}
if (s != nullptr) {
@@ -850,6 +818,31 @@
return s;
}
+// This is used by dlsym(3). It performs symbol lookup only within the
+// specified soinfo object and its dependencies in breadth first order.
+static const ElfW(Sym)* dlsym_handle_lookup(soinfo* si,
+ soinfo** found,
+ const char* name,
+ const version_info* vi) {
+ // According to man dlopen(3) and posix docs in the case when si is handle
+ // of the main executable we need to search not only in the executable and its
+ // dependencies but also in all libraries loaded with RTLD_GLOBAL.
+ //
+ // Since RTLD_GLOBAL is always set for the main executable and all dt_needed shared
+ // libraries and they are loaded in breath-first (correct) order we can just execute
+ // dlsym(RTLD_DEFAULT, ...); instead of doing two stage lookup.
+ if (si == solist_get_somain()) {
+ return dlsym_linear_lookup(&g_default_namespace, name, vi, found, nullptr, RTLD_DEFAULT);
+ }
+
+ SymbolName symbol_name(name);
+ // note that the namespace is not the namespace associated with caller_addr
+ // we use ns associated with root si intentionally here. Using caller_ns
+ // causes problems when user uses dlopen_ext to open a library in the separate
+ // namespace and then calls dlsym() on the handle.
+ return dlsym_handle_lookup_impl(si->get_primary_namespace(), si, nullptr, found, symbol_name, vi);
+}
+
soinfo* find_containing_library(const void* p) {
// Addresses within a library may be tagged if they point to globals. Untag
// them so that the bounds check succeeds.