Shared libs are supported in recovery mode

am: 011ee12b1d

Change-Id: I867dbafecf11215b82d952c532774cdf12c6e782
This commit is contained in:
Jiyong Park 2018-06-13 16:43:09 -07:00 committed by android-build-merger
commit 4ebda908de
12 changed files with 61 additions and 9 deletions

View File

@ -77,3 +77,4 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/vndksp.libraries.txt)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/ld.config.txt)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/llndk.libraries.txt)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/vndksp.libraries.txt)
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/)

View File

@ -302,8 +302,6 @@ cc_binary {
name: "adbd",
defaults: ["adb_defaults"],
// adbd must be static, as it is copied into the recovery image.
static_executable: true,
recovery_available: true,
srcs: [
@ -344,7 +342,6 @@ cc_binary {
"libselinux",
"libsquashfs_utils",
"libqemu_pipe",
"libdebuggerd_handler",
"libbase",
"libcutils",
@ -371,6 +368,7 @@ cc_test {
"liblog",
"libusb",
"libmdnssd",
"libselinux",
],
test_suites: ["device-tests"],
}

View File

@ -38,7 +38,6 @@
#include <scoped_minijail.h>
#include <private/android_filesystem_config.h>
#include "debuggerd/handler.h"
#include "selinux/android.h"
#include "adb.h"
@ -274,7 +273,6 @@ int main(int argc, char** argv) {
close_stdin();
debuggerd_init(nullptr);
adb_trace_init(argv);
D("Handling main()");

View File

@ -98,6 +98,7 @@
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <private/android_logger.h>
#include <selinux/android.h>
#include "adb.h"
#include "adb_io.h"
@ -343,6 +344,24 @@ bool Subprocess::ForkAndExec(std::string* error) {
adb_write(oom_score_adj_fd, oom_score_adj_value, strlen(oom_score_adj_value)));
}
#ifdef __ANDROID_RECOVERY__
// Special routine for recovery. Switch to shell domain when adbd is
// is running with dropped privileged (i.e. not running as root) and
// is built for the recovery mode. This is required because recovery
// rootfs is not labeled and everything is labeled just as rootfs.
char* con = nullptr;
if (getcon(&con) == 0) {
if (!strcmp(con, "u:r:adbd:s0")) {
if (selinux_android_setcon("u:r:shell:s0") < 0) {
LOG(FATAL) << "Could not set SELinux context for subprocess";
}
}
freecon(con);
} else {
LOG(FATAL) << "Failed to get SELinux context";
}
#endif
if (command_.empty()) {
// Spawn a login shell if we don't have a command.
execle(_PATH_BSHELL, "-" _PATH_BSHELL, nullptr, cenv.data());

View File

@ -47,6 +47,7 @@ cc_library_shared {
cc_library_static {
name: "libtombstoned_client_static",
defaults: ["debuggerd_defaults"],
recovery_available: true,
srcs: [
"tombstoned/tombstoned_client.cpp",
"util.cpp",
@ -90,7 +91,6 @@ cc_library_static {
cc_library_static {
name: "libdebuggerd_handler",
defaults: ["debuggerd_defaults"],
recovery_available: true,
srcs: ["handler/debuggerd_fallback_nop.cpp"],
whole_static_libs: [
@ -104,6 +104,7 @@ cc_library_static {
cc_library_static {
name: "libdebuggerd_handler_fallback",
defaults: ["debuggerd_defaults"],
recovery_available: true,
srcs: [
"handler/debuggerd_fallback.cpp",
],
@ -120,6 +121,12 @@ cc_library_static {
"liblzma",
"libcutils",
],
target: {
recovery: {
cflags: ["-DNO_LIBDEXFILE_SUPPORT"],
exclude_static_libs: ["libdexfile"],
},
},
export_include_dirs: ["include"],
}

View File

@ -47,6 +47,7 @@ cc_library_headers {
cc_defaults {
name: "libutils_defaults",
vendor_available: true,
recovery_available: true,
vndk: {
enabled: true,
support_system_process: true,
@ -90,6 +91,10 @@ cc_defaults {
},
},
recovery: {
exclude_shared_libs: ["libvndksupport"],
},
host: {
cflags: ["-DLIBUTILS_NATIVE=1"],

View File

@ -23,7 +23,7 @@
#include <utils/Log.h>
#include <utils/Vector.h>
#if defined(__ANDROID__)
#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
#include <dlfcn.h>
#include <vndksupport/linker.h>
#endif
@ -70,7 +70,7 @@ void add_sysprop_change_callback(sysprop_change_callback cb, int priority) {
void add_sysprop_change_callback(sysprop_change_callback, int) {}
#endif
#if defined(__ANDROID__)
#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
void (*get_report_sysprop_change_func())() {
void (*func)() = nullptr;
void* handle = android_load_sphal_library("libutils.so", RTLD_NOW);
@ -85,7 +85,7 @@ void (*get_report_sysprop_change_func())() {
void report_sysprop_change() {
do_report_sysprop_change();
#if defined(__ANDROID__)
#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__)
// libutils.so is double loaded; from the default namespace and from the
// 'sphal' namespace. Redirect the sysprop change event to the other instance
// of libutils.so loaded in the 'sphal' namespace so that listeners attached

View File

@ -58,6 +58,7 @@ cc_library {
name: "libziparchive",
host_supported: true,
vendor_available: true,
recovery_available: true,
vndk: {
enabled: true,
},

View File

@ -308,6 +308,16 @@ endif # ifeq ($(_enforce_vndk_lite_at_runtime),false)
_enforce_vndk_at_runtime :=
_enforce_vndk_lite_at_runtime :=
#######################################
# ld.config.txt for recovery
include $(CLEAR_VARS)
LOCAL_MODULE := ld.config.recovery.txt
LOCAL_MODULE_CLASS := ETC
LOCAL_SRC_FILES := etc/ld.config.recovery.txt
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/etc
LOCAL_MODULE_STEM := ld.config.txt
include $(BUILD_PREBUILT)
#######################################
# llndk.libraries.txt
include $(CLEAR_VARS)

View File

@ -0,0 +1,9 @@
# Copyright (C) 2018 The Android Open Source Project
#
# Bionic loader config file for recovery mode
#
dir.recovery = /system/bin
[recovery]
namespace.default.search.paths = /system/${LIB}

View File

@ -12,10 +12,13 @@ phony {
"mkshrc_vendor",
"reboot",
"sh",
"sh.recovery",
"sh_vendor",
"toolbox",
"toolbox.recovery",
"toolbox_vendor",
"toybox",
"toybox.recovery",
"toybox_vendor",
],
}

View File

@ -46,6 +46,7 @@ cc_defaults {
cc_binary {
name: "toolbox",
defaults: ["toolbox_binary_defaults"],
recovery_available: true,
}
cc_binary {