From ae695c9fad9c9302508e3e586cf8a774b6cccbed Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Wed, 23 Oct 2019 21:32:43 +0100 Subject: [PATCH] Remove use of static libdexfile to avoid linking in ART internal code. - Create a static library libunwindstack_no_dex without DEX support. - Use it in libdebuggerd_handler_fallback, whose only use is in the linker, which shouldn't need that support. - Use it in init_first_stage, which doesn't need DEX support either. - Also need a libbacktrace_no_dex since it's in the dependency chain from init_first_stage to libunwindstack_no_dex. Also restrict the *_no_dex libs and libdebuggerd_handler_fallback as much as possible to avoid inadvertent use of these reduced functionality libs. Test: m init_first_stage on Cuttlefish where BOARD_BUILD_SYSTEM_ROOT_IMAGE=false Test: m system_image com.android.runtime Test: Build & boot Test: atest linker-unit-tests libunwindstack_unit_test debuggerd_test Bug: 142944931 Bug: 151466650 Change-Id: Iaacb29bfe602f3ca12a00a712e2a64c45ff0118b Merged-In: Iaacb29bfe602f3ca12a00a712e2a64c45ff0118b --- debuggerd/Android.bp | 22 +++++------- init/Android.mk | 5 ++- libbacktrace/Android.bp | 47 ++++++++++++++++++------ libunwindstack/Android.bp | 76 ++++++++++++++++++++++++--------------- 4 files changed, 95 insertions(+), 55 deletions(-) diff --git a/debuggerd/Android.bp b/debuggerd/Android.bp index f28c778fe..c7bd1a83b 100644 --- a/debuggerd/Android.bp +++ b/debuggerd/Android.bp @@ -103,9 +103,14 @@ cc_library_static { export_include_dirs: ["include"], } -// Fallback implementation. +// Fallback implementation, for use in the Bionic linker only. cc_library_static { name: "libdebuggerd_handler_fallback", + visibility: ["//bionic/linker"], + apex_available: [ + "com.android.runtime", + "//apex_available:platform", + ], defaults: ["debuggerd_defaults"], recovery_available: true, srcs: [ @@ -118,8 +123,7 @@ cc_library_static { "libasync_safe", "libbase", "libdebuggerd", - "libunwindstack", - "libdexfile_support_static", // libunwindstack dependency + "libunwindstack_no_dex", "liblzma", "libcutils", ], @@ -127,14 +131,6 @@ cc_library_static { header_libs: ["bionic_libc_platform_headers"], export_header_lib_headers: ["bionic_libc_platform_headers"], - target: { - recovery: { - exclude_static_libs: [ - "libdexfile_support_static", - ], - }, - }, - export_include_dirs: ["include"], } @@ -188,7 +184,7 @@ cc_library_static { ], static_libs: [ - "libdexfile_support_static", // libunwindstack dependency + "libdexfile_support", // libunwindstack dependency "libunwindstack", "liblzma", "libbase", @@ -201,7 +197,7 @@ cc_library_static { target: { recovery: { exclude_static_libs: [ - "libdexfile_support_static", + "libdexfile_support", ], }, }, diff --git a/init/Android.mk b/init/Android.mk index 07b0f950f..207b5e765 100644 --- a/init/Android.mk +++ b/init/Android.mk @@ -105,9 +105,8 @@ LOCAL_STATIC_LIBRARIES := \ libgsi \ libcom.android.sysprop.apex \ liblzma \ - libdexfile_support_static \ - libunwindstack \ - libbacktrace \ + libunwindstack_no_dex \ + libbacktrace_no_dex \ libmodprobe \ libext2_uuid \ libprotobuf-cpp-lite \ diff --git a/libbacktrace/Android.bp b/libbacktrace/Android.bp index 59bd97c25..aa18c4247 100644 --- a/libbacktrace/Android.bp +++ b/libbacktrace/Android.bp @@ -46,16 +46,9 @@ cc_library_headers { export_include_dirs: ["include"], } -cc_library { - name: "libbacktrace", - vendor_available: false, - recovery_available: true, - vndk: { - enabled: true, - support_system_process: true, - }, +cc_defaults { + name: "libbacktrace_defaults", defaults: ["libbacktrace_common"], - host_supported: true, cflags: [ "-Wexit-time-destructors", @@ -80,7 +73,6 @@ cc_library { shared_libs: [ "libbase", "liblog", - "libunwindstack", ], static_libs: [ @@ -93,6 +85,26 @@ cc_library { whole_static_libs: ["libasync_safe"], }, }, + }, +} + +cc_library { + name: "libbacktrace", + vendor_available: false, + recovery_available: true, + vndk: { + enabled: true, + support_system_process: true, + }, + host_supported: true, + defaults: ["libbacktrace_defaults"], + + target: { + linux: { + shared_libs: [ + "libunwindstack", + ], + }, vendor: { cflags: ["-DNO_LIBDEXFILE_SUPPORT"], }, @@ -102,6 +114,21 @@ cc_library { }, } +// Static library without DEX support to avoid dependencies on the ART APEX. +cc_library_static { + name: "libbacktrace_no_dex", + visibility: ["//system/core/debuggerd"], + defaults: ["libbacktrace_defaults"], + cflags: ["-DNO_LIBDEXFILE_SUPPORT"], + target: { + linux: { + static_libs: [ + "libunwindstack_no_dex", + ], + }, + }, +} + cc_test_library { name: "libbacktrace_test", defaults: ["libbacktrace_common"], diff --git a/libunwindstack/Android.bp b/libunwindstack/Android.bp index 3695f72f0..1f3ba596a 100644 --- a/libunwindstack/Android.bp +++ b/libunwindstack/Android.bp @@ -35,20 +35,13 @@ cc_defaults { }, } -cc_library { - name: "libunwindstack", - vendor_available: true, - recovery_available: true, - vndk: { - enabled: true, - support_system_process: true, - }, +cc_defaults { + name: "libunwindstack_defaults", defaults: ["libunwindstack_flags"], export_include_dirs: ["include"], srcs: [ "ArmExidx.cpp", - "DexFile.cpp", "DexFiles.cpp", "DwarfCfa.cpp", "DwarfEhFrameWithHdr.cpp", @@ -77,7 +70,6 @@ cc_library { ], cflags: [ - "-DDEXFILE_SUPPORT", "-Wexit-time-destructors", ], @@ -89,24 +81,6 @@ cc_library { "-g", ], }, - vendor: { - cflags: ["-UDEXFILE_SUPPORT"], - exclude_srcs: [ - "DexFile.cpp", - ], - exclude_shared_libs: [ - "libdexfile_support", - ], - }, - recovery: { - cflags: ["-UDEXFILE_SUPPORT"], - exclude_srcs: [ - "DexFile.cpp", - ], - exclude_shared_libs: [ - "libdexfile_support", - ], - }, }, arch: { @@ -130,12 +104,56 @@ cc_library { shared_libs: [ "libbase", - "libdexfile_support", "liblog", "liblzma", ], } +cc_library { + name: "libunwindstack", + vendor_available: true, + recovery_available: true, + vndk: { + enabled: true, + support_system_process: true, + }, + defaults: ["libunwindstack_defaults"], + + srcs: ["DexFile.cpp"], + cflags: ["-DDEXFILE_SUPPORT"], + shared_libs: ["libdexfile_support"], + + target: { + vendor: { + cflags: ["-UDEXFILE_SUPPORT"], + exclude_srcs: ["DexFile.cpp"], + exclude_shared_libs: ["libdexfile_support"], + }, + recovery: { + cflags: ["-UDEXFILE_SUPPORT"], + exclude_srcs: ["DexFile.cpp"], + exclude_shared_libs: ["libdexfile_support"], + }, + }, +} + +// Static library without DEX support to avoid dependencies on the ART APEX. +cc_library_static { + name: "libunwindstack_no_dex", + recovery_available: true, + defaults: ["libunwindstack_defaults"], + + visibility: [ + "//system/core/debuggerd", + "//system/core/init", + "//system/core/libbacktrace", + ], + apex_available: [ + "//apex_available:platform", + "com.android.runtime", + ], +} + //------------------------------------------------------------------------- // Unit Tests //-------------------------------------------------------------------------