Merge "fortify(stdio): emit diagnostics regardless of API level"
diff --git a/apex/Android.bp b/apex/Android.bp
new file mode 100644
index 0000000..276541e
--- /dev/null
+++ b/apex/Android.bp
@@ -0,0 +1,43 @@
+// Runtime (Bionic) APEX module
+//
+// In Q this contained Bionic, ART and Libcore.
+// It keeps the name /apex/com.android.runtime for app compat reasons.
+
+android_app_certificate {
+ name: "com.android.runtime.certificate",
+ certificate: "com.android.runtime",
+}
+
+apex_key {
+ name: "com.android.runtime.key",
+ public_key: "com.android.runtime.avbpubkey",
+ private_key: "com.android.runtime.pem",
+}
+
+prebuilt_etc {
+ name: "com.android.runtime.ld.config.txt",
+ src: "ld.config.txt",
+ filename: "ld.config.txt",
+ installable: false,
+}
+
+apex {
+ name: "com.android.runtime",
+ compile_multilib: "both",
+ manifest: "manifest.json",
+ native_shared_libs: [
+ "libc",
+ "libm",
+ "libdl",
+ "libc_malloc_debug",
+ "libc_malloc_hooks",
+ ],
+ multilib: {
+ both: {
+ binaries: ["linker"],
+ },
+ },
+ prebuilts: ["com.android.runtime.ld.config.txt"],
+ key: "com.android.runtime.key",
+ certificate: ":com.android.runtime.certificate",
+}
diff --git a/apex/com.android.runtime.avbpubkey b/apex/com.android.runtime.avbpubkey
new file mode 100644
index 0000000..b0ffc9b
--- /dev/null
+++ b/apex/com.android.runtime.avbpubkey
Binary files differ
diff --git a/apex/com.android.runtime.pem b/apex/com.android.runtime.pem
new file mode 100644
index 0000000..4c7ce4b
--- /dev/null
+++ b/apex/com.android.runtime.pem
@@ -0,0 +1,51 @@
+-----BEGIN RSA PRIVATE KEY-----
+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
+-----END RSA PRIVATE KEY-----
diff --git a/apex/com.android.runtime.pk8 b/apex/com.android.runtime.pk8
new file mode 100644
index 0000000..de96219
--- /dev/null
+++ b/apex/com.android.runtime.pk8
Binary files differ
diff --git a/apex/com.android.runtime.x509.pem b/apex/com.android.runtime.x509.pem
new file mode 100644
index 0000000..890ae9f
--- /dev/null
+++ b/apex/com.android.runtime.x509.pem
@@ -0,0 +1,34 @@
+-----BEGIN CERTIFICATE-----
+MIIF2zCCA8OgAwIBAgIUIVa9I/DpCnStxMqP/g9wS+dwNcowDQYJKoZIhvcNAQEL
+BQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcM
+DU1vdW50YWluIFZpZXcxEDAOBgNVBAoMB0FuZHJvaWQxEDAOBgNVBAsMB0FuZHJv
+aWQxHDAaBgNVBAMME2NvbS5hbmRyb2lkLnJ1bnRpbWUwIBcNMTkwODEzMTIwNTU3
+WhgPNDc1NzA3MDkxMjA1NTdaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxp
+Zm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRAwDgYDVQQKDAdBbmRyb2lk
+MRAwDgYDVQQLDAdBbmRyb2lkMRwwGgYDVQQDDBNjb20uYW5kcm9pZC5ydW50aW1l
+MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0B6dmGfJk68K7Sj0hOnE
+uTobEz+lMWQKK+K1qOC13Nv9pkSvZqUbNFL9Qrkv46GVi3rFRgB1MOchCJ/f4Ost
+BsEbN3aCtRkvD2qrDNBzwvUPrxNxJ+WZnHUgvJyAS7tu8riRV+5N27lLLfpZon++
+8mYnxOll/050+qW+LC6FZTaTdrVWSlItPX4ZvKArlA6wXn88GJjiUgfcGxquwHbZ
+AhaUsdXIJ9DTJxf3NgsuPLjBepGXdPO3XK+qGFU/XyhEzmUHPXf2+OfgWs3cIAAf
+i5r2GL1Zw3S0ax+s5rujHn0TJFEOJ0UwMHWAZrZjp51qNu7Sza2KPFG6W9r3r6wj
+Ie8/som8YYy2Q1sXX2cbBrOxMU3yq/vaGTKWjpZ1wfzT24aVRRhxa6qdULNdj8fq
+RO7MTIY76KjV3ehGVi21501Kv3UfY9TqyPowVIttZ7m3ZAUYv+cObZZYc92VCON1
+irLJC9GtvvZYUKY+fr3quv9Fhf9fIevvSM1Nnn6MBUDiHmoyaNPymWaiCqzwUvig
+8sJW70Mh8mtANVJ1M3GSWHLenKVFe/kKoHaZttaHo+NAEpzcm4sGVNB3SqB3S+Pw
+d4BU1Tt/2GWqSZx7ALmSyjVdYGJZgAGusWPsdP1FPdyHBwhsBTW/bMhBLNU9NfjP
+uRjJyNroouQvpdPnW9NDfDECAwEAAaNTMFEwHQYDVR0OBBYEFKmGUpGYLLwLU/R+
+QIVxyI4UsDlNMB8GA1UdIwQYMBaAFKmGUpGYLLwLU/R+QIVxyI4UsDlNMA8GA1Ud
+EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAHzVs6gp+fnXbvhGP2aKFFJF
+xMIi4ahsoS5RneEEG/dQVKd/5NfrHY6lHIAV1kEk9TrvcemIo4n7SETd4Hj4O0xZ
+tnPC3y9v/kSbjryYouOEa4hBILKxVzIZw6MiM5arGo4ZYc1Rfck+F/92xj7o/kWo
+9+Dn58zNAHAMC13F1wM61e+tdHZJHgmLfUUYKvZ3sAgxmsQM8BfwobH2/Ww0IOCY
+PRYZwcIpdEu9D1dCM9kON/1Ss0jo6+6MuW1CMoER9alEVpKWv4o1Phrd9z7v7JDh
+ZW5jJC9n4HzwDDy679OrH512Dhv7HwT8dnRfylo+2pdOW7iby7MJzd/hql6MC9+h
+/5EwfuiNMaifo94SEFElNjhqJZwoqaFIyOT2fYt9hlvdBqWp/L5p+si0JOYbEnB2
+hIOIqfw7qdO8gZsCt7ps9JSxnPCVF1mAcrDuQcgVdGs2D3/HE+R3R504iOoAc0XF
+m9nw06M1O6bmdygQedIZ54wTINjhkJXtQluu74O2kl9wKNd2FSJWh0ZvudulohCM
+p7mS8lAlFbDPOCavlovIijXDYialcFNZnUSJAxE/k0rBBnnVxDTsJeR8ipOkaww4
+3POEm22OM57Tl60w4Jn8VZoPRl0G+R+uUaZdmPw6Gs/PgTDlwK+t1HQN0pFA0VMw
+Z4b+m+R+iUba0dbeVf/4
+-----END CERTIFICATE-----
diff --git a/apex/ld.config.txt b/apex/ld.config.txt
new file mode 100644
index 0000000..dae883d
--- /dev/null
+++ b/apex/ld.config.txt
@@ -0,0 +1,8 @@
+# Copyright (C) 2019 The Android Open Source Project
+#
+# Bionic loader config file for the Runtime APEX. This is a minimal config to
+# make the linker able to load itself as an executable (it just needs to exist).
+
+dir.runtime = /apex/com.android.runtime/bin/
+
+[runtime]
diff --git a/apex/manifest.json b/apex/manifest.json
new file mode 100644
index 0000000..20a8314
--- /dev/null
+++ b/apex/manifest.json
@@ -0,0 +1,4 @@
+{
+ "name": "com.android.runtime",
+ "version": 1
+}
diff --git a/libc/Android.bp b/libc/Android.bp
index eee59d4..5f82b13 100644
--- a/libc/Android.bp
+++ b/libc/Android.bp
@@ -66,7 +66,6 @@
cppflags: [],
include_dirs: [
"bionic/libc/async_safe/include",
- "external/jemalloc_new/include",
],
stl: "none",
@@ -86,6 +85,56 @@
ldflags: ["-Wl,-z,muldefs"],
}
+// Defaults for native allocator libs/includes to make it
+// easier to change.
+// To enable scudo, change the below to libc_scudo_defaults
+// and comment out the defaults line in libc_scudo shared
+// library.
+// ========================================================
+cc_defaults {
+ name: "libc_native_allocator_defaults",
+
+ defaults: ["libc_jemalloc5_defaults"],
+}
+
+cc_defaults {
+ name: "libc_jemalloc5_defaults",
+
+ include_dirs: [
+ "external/jemalloc_new/include",
+ ],
+
+ whole_static_libs: [
+ "libjemalloc5",
+ "libc_jemalloc_wrapper",
+ ],
+}
+
+// Functions not implemented by jemalloc directly, or that need to
+// be modified for Android.
+cc_library_static {
+ name: "libc_jemalloc_wrapper",
+ defaults: ["libc_defaults"],
+ srcs: ["bionic/jemalloc_wrapper.cpp"],
+ cflags: ["-fvisibility=hidden"],
+
+ include_dirs: [
+ "external/jemalloc_new/include",
+ ],
+}
+
+cc_defaults {
+ name: "libc_scudo_defaults",
+
+ cflags: [
+ "-DUSE_SCUDO",
+ ],
+
+ whole_static_libs: [
+ "libscudo",
+ ],
+}
+
// ========================================================
// libc_stack_protector.a - stack protector code
// ========================================================
@@ -1199,7 +1248,7 @@
// ========================================================
// libc_pthread.a - pthreads parts that previously lived in
// libc_bionic.a. Relocated to their own library because
-// they can't be included in libc_ndk.a (as they layout of
+// they can't be included in libc_ndk.a (as the layout of
// pthread_t has changed over the years and has ABI
// compatibility issues).
// ========================================================
@@ -1332,7 +1381,10 @@
cc_library_static {
name: "libc_ndk",
- defaults: ["libc_defaults"],
+ defaults: [
+ "libc_defaults",
+ "libc_native_allocator_defaults",
+ ],
srcs: libc_common_src_files + [
"bionic/malloc_common.cpp",
"bionic/malloc_limit.cpp",
@@ -1365,7 +1417,6 @@
"libc_freebsd",
"libc_freebsd_large_stack",
"libc_gdtoa",
- "libc_malloc",
"libc_netbsd",
"libc_openbsd_large_stack",
"libc_openbsd_ndk",
@@ -1373,7 +1424,6 @@
"libc_syscalls",
"libc_tzcode",
"libm",
- "libjemalloc5",
"libstdc++",
],
}
@@ -1399,7 +1449,6 @@
"libc_freebsd",
"libc_freebsd_large_stack",
"libc_gdtoa",
- "libc_malloc",
"libc_netbsd",
"libc_openbsd",
"libc_openbsd_large_stack",
@@ -1506,17 +1555,6 @@
],
}
-// ========================================================
-// libc_malloc.a: the _prefixed_ malloc functions (like dlcalloc).
-// ========================================================
-cc_library_static {
- defaults: ["libc_defaults"],
- srcs: ["bionic/jemalloc_wrapper.cpp"],
- cflags: ["-fvisibility=hidden"],
-
- name: "libc_malloc",
-}
-
filegroup {
name: "libc_sources_shared",
srcs: [
@@ -1558,7 +1596,10 @@
// libc.a + libc.so
// ========================================================
cc_library {
- defaults: ["libc_defaults"],
+ defaults: [
+ "libc_defaults",
+ "libc_native_allocator_defaults",
+ ],
name: "libc",
static_ndk_lib: true,
export_include_dirs: ["include"],
@@ -1606,9 +1647,6 @@
static_libs: [
"libdl_android",
],
- whole_static_libs: [
- "libjemalloc5",
- ],
nocrt: true,
@@ -1728,6 +1766,8 @@
export_include_dirs: [
"platform",
],
+ system_shared_libs: [],
+ stl: "none",
sdk_version: "current",
}
@@ -2475,9 +2515,8 @@
// This is a temporary library that will use scudo as the native memory
// allocator. To use it, add it as the first shared library.
-cc_library_shared {
- name: "libc_scudo",
- vendor_available: true,
+cc_defaults {
+ name: "libc_scudo_wrapper_defaults",
srcs: [
"bionic/malloc_common.cpp",
"bionic/malloc_common_dynamic.cpp",
@@ -2487,16 +2526,12 @@
"bionic/__set_errno.cpp",
],
cflags: ["-DUSE_SCUDO"],
- stl: "none",
- system_shared_libs: [],
+ shared_libs: ["libscudo_wrapper"],
header_libs: ["libc_headers"],
static_libs: ["libasync_safe"],
- allow_undefined_symbols: true,
- shared_libs: ["libscudo_wrapper"],
-
arch: {
arm: {
srcs: [":syscalls-arm.S"],
@@ -2518,7 +2553,16 @@
// Mark this library as global so it overrides all the allocation
// definitions properly.
ldflags: ["-Wl,-z,global"],
+}
+cc_library_shared {
+ name: "libc_scudo",
+ defaults: ["libc_scudo_wrapper_defaults"],
+ vendor_available: true,
+ stl: "none",
+ system_shared_libs: [],
+
+ allow_undefined_symbols: true,
// Like libc, disable native coverage for libc_scudo.
native_coverage: false,
}