summaryrefslogtreecommitdiff
path: root/libnativeloader/native_loader.cpp
diff options
context:
space:
mode:
authorDimitry Ivanov <dimitry@google.com>2016-05-05 17:30:24 -0700
committerDimitry Ivanov <dimitry@google.com>2016-05-06 11:39:47 -0700
commit4ddabd01bf361cadb33baa7213e2ca5129b938f0 (patch)
treebb26ecba4d0041eb43053dc83ef868f5caa19e8f /libnativeloader/native_loader.cpp
parent830561bb2b34ca8c09be4860380e9032202c3112 (diff)
Add public libs from an environment variable
This is enabled only for builds with ro.debuggable=1 It is intended for use only in tests using dalvikvm and needing access to platform libraries. Bug: http://b/28449304 Change-Id: I402457d0da542996ccf265aeaa305f09881e4333
Diffstat (limited to 'libnativeloader/native_loader.cpp')
-rw-r--r--libnativeloader/native_loader.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/libnativeloader/native_loader.cpp b/libnativeloader/native_loader.cpp
index 7d9bb567f..7f21375bd 100644
--- a/libnativeloader/native_loader.cpp
+++ b/libnativeloader/native_loader.cpp
@@ -39,6 +39,12 @@ namespace android {
static constexpr const char* kPublicNativeLibrariesSystemConfigPathFromRoot = "/etc/public.libraries.txt";
static constexpr const char* kPublicNativeLibrariesVendorConfig = "/vendor/etc/public.libraries.txt";
+static bool is_debuggable() {
+ char debuggable[PROP_VALUE_MAX];
+ property_get("ro.debuggable", debuggable, "0");
+ return std::string(debuggable) == "1";
+}
+
class LibraryNamespaces {
public:
LibraryNamespaces() : initialized_(false) { }
@@ -103,6 +109,19 @@ class LibraryNamespaces {
LOG_ALWAYS_FATAL_IF(!ReadConfig(public_native_libraries_system_config, &sonames),
"Error reading public native library list from \"%s\": %s",
public_native_libraries_system_config.c_str(), strerror(errno));
+
+ // For debuggable platform builds use ANDROID_ADDITIONAL_PUBLIC_LIBRARIES environment
+ // variable to add libraries to the list. This is intended for platform tests only.
+ if (is_debuggable()) {
+ const char* additional_libs = getenv("ANDROID_ADDITIONAL_PUBLIC_LIBRARIES");
+ if (additional_libs != nullptr && additional_libs[0] != '\0') {
+ std::vector<std::string> additional_libs_vector = base::Split(additional_libs, ":");
+ std::copy(additional_libs_vector.begin(),
+ additional_libs_vector.end(),
+ std::back_inserter(sonames));
+ }
+ }
+
// This file is optional, quietly ignore if the file does not exist.
ReadConfig(kPublicNativeLibrariesVendorConfig, &sonames);