Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce912aad authored by vichang's avatar vichang Committed by Gerrit Code Review
Browse files

Merge changes from topic "dup_icu4c"

* changes:
  Linker namespace changes for moving ICU4C to APEX
  Remove the public libs in runtime namespace
parents f80c326d 785ba2e6
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -137,6 +137,12 @@ static constexpr const char* kWhitelistedDirectories = "/data:/mnt/expand";

static constexpr const char* kApexPath = "/apex/";

#if defined(__LP64__)
static constexpr const char* kRuntimeApexLibPath = "/apex/com.android.runtime/lib64";
#else
static constexpr const char* kRuntimeApexLibPath = "/apex/com.android.runtime/lib";
#endif

static bool is_debuggable() {
  char debuggable[PROP_VALUE_MAX];
  property_get("ro.debuggable", debuggable, "0");
@@ -408,6 +414,14 @@ class LibraryNamespaces {
      }
    }

    // Remove the public libs in the runtime namespace.
    // These libs are listed in public.android.txt, but we don't want the rest of android
    // in default namespace to dlopen the libs.
    // For example, libicuuc.so is exposed to classloader namespace from runtime namespace.
    // Unfortunately, it does not have stable C symbols, and default namespace should only use
    // stable symbols in libandroidicu.so. http://b/120786417
    removePublicLibsIfExistsInRuntimeApex(sonames);

    // android_init_namespaces() expects all the public libraries
    // to be loaded so that they can be found by soname alone.
    //
@@ -502,6 +516,27 @@ class LibraryNamespaces {
    }
  }

  /**
   * Remove the public libs in runtime namespace
   */
  void removePublicLibsIfExistsInRuntimeApex(std::vector<std::string>& sonames) {
    for (const std::string& lib_name : kRuntimePublicLibraries) {
      std::string path(kRuntimeApexLibPath);
      path.append("/").append(lib_name);

      struct stat s;
      // Do nothing if the path in /apex does not exist.
      // Runtime APEX must be mounted since libnativeloader is in the same APEX
      if (stat(path.c_str(), &s) != 0) {
        continue;
      }

      auto it = std::find(sonames.begin(), sonames.end(), lib_name);
      if (it != sonames.end()) {
        sonames.erase(it);
      }
    }
  }

  bool ReadConfig(const std::string& configFile, std::vector<std::string>* sonames,
                  const std::function<bool(const std::string& /* soname */,
+4 −0
Original line number Diff line number Diff line
@@ -54,6 +54,10 @@ namespace.default.link.runtime.shared_libs += libdexfile_external.so
namespace.default.link.runtime.shared_libs += libnativebridge.so
namespace.default.link.runtime.shared_libs += libnativehelper.so
namespace.default.link.runtime.shared_libs += libnativeloader.so
namespace.default.link.runtime.shared_libs += libandroidicu.so

# TODO(b/122876336): Remove libpac.so once it's migrated to Webview
namespace.default.link.runtime.shared_libs += libpac.so

# When libnetd_resolv.so can't be found in the default namespace, search for it
# in the resolv namespace. Don't allow any other libraries from the resolv namespace
+4 −0
Original line number Diff line number Diff line
@@ -132,6 +132,10 @@ namespace.default.link.runtime.shared_libs += libdexfile_external.so
namespace.default.link.runtime.shared_libs += libnativebridge.so
namespace.default.link.runtime.shared_libs += libnativehelper.so
namespace.default.link.runtime.shared_libs += libnativeloader.so
namespace.default.link.runtime.shared_libs += libandroidicu.so

# TODO(b/122876336): Remove libpac.so once it's migrated to Webview
namespace.default.link.runtime.shared_libs += libpac.so

# When libnetd_resolv.so can't be found in the default namespace, search for it
# in the resolv namespace. Don't allow any other libraries from the resolv namespace
+4 −0
Original line number Diff line number Diff line
@@ -72,6 +72,10 @@ namespace.default.link.runtime.shared_libs += libdexfile_external.so
namespace.default.link.runtime.shared_libs += libnativebridge.so
namespace.default.link.runtime.shared_libs += libnativehelper.so
namespace.default.link.runtime.shared_libs += libnativeloader.so
namespace.default.link.runtime.shared_libs += libandroidicu.so

# TODO(b/122876336): Remove libpac.so once it's migrated to Webview
namespace.default.link.runtime.shared_libs += libpac.so

# When libnetd_resolv.so can't be found in the default namespace, search for it
# in the resolv namespace. Don't allow any other libraries from the resolv namespace