1*b302aa50SMitch Phillips// 2*b302aa50SMitch Phillips// Copyright (C) 2019 The Android Open Source Project 3*b302aa50SMitch Phillips// 4*b302aa50SMitch Phillips// Licensed under the Apache License, Version 2.0 (the "License"); 5*b302aa50SMitch Phillips// you may not use this file except in compliance with the License. 6*b302aa50SMitch Phillips// You may obtain a copy of the License at 7*b302aa50SMitch Phillips// 8*b302aa50SMitch Phillips// http://www.apache.org/licenses/LICENSE-2.0 9*b302aa50SMitch Phillips// 10*b302aa50SMitch Phillips// Unless required by applicable law or agreed to in writing, software 11*b302aa50SMitch Phillips// distributed under the License is distributed on an "AS IS" BASIS, 12*b302aa50SMitch Phillips// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b302aa50SMitch Phillips// See the License for the specific language governing permissions and 14*b302aa50SMitch Phillips// limitations under the License. 15*b302aa50SMitch Phillips// 16*b302aa50SMitch Phillips 17*b302aa50SMitch Phillipspackage { 18*b302aa50SMitch Phillips default_applicable_licenses: ["external_gwp_asan_license"], 19*b302aa50SMitch Phillips} 20*b302aa50SMitch Phillips 21*b302aa50SMitch Phillips// Added automatically by a large-scale-change that took the approach of 22*b302aa50SMitch Phillips// 'apply every license found to every target'. While this makes sure we respect 23*b302aa50SMitch Phillips// every license restriction, it may not be entirely correct. 24*b302aa50SMitch Phillips// 25*b302aa50SMitch Phillips// e.g. GPL in an MIT project might only apply to the contrib/ directory. 26*b302aa50SMitch Phillips// 27*b302aa50SMitch Phillips// Please consider splitting the single license below into multiple licenses, 28*b302aa50SMitch Phillips// taking care not to lose any license_kind information, and overriding the 29*b302aa50SMitch Phillips// default license using the 'licenses: [...]' property on targets as needed. 30*b302aa50SMitch Phillips// 31*b302aa50SMitch Phillips// For unused files, consider creating a 'fileGroup' with "//visibility:private" 32*b302aa50SMitch Phillips// to attach the license to, and including a comment whether the files may be 33*b302aa50SMitch Phillips// used in the current project. 34*b302aa50SMitch Phillips// See: http://go/android-license-faq 35*b302aa50SMitch Phillipslicense { 36*b302aa50SMitch Phillips name: "external_gwp_asan_license", 37*b302aa50SMitch Phillips visibility: [":__subpackages__"], 38*b302aa50SMitch Phillips license_kinds: [ 39*b302aa50SMitch Phillips "SPDX-license-identifier-Apache-2.0", 40*b302aa50SMitch Phillips "SPDX-license-identifier-BSD", 41*b302aa50SMitch Phillips "SPDX-license-identifier-MIT", 42*b302aa50SMitch Phillips "SPDX-license-identifier-NCSA", 43*b302aa50SMitch Phillips ], 44*b302aa50SMitch Phillips license_text: [ 45*b302aa50SMitch Phillips "LICENSE.TXT", 46*b302aa50SMitch Phillips ], 47*b302aa50SMitch Phillips} 48*b302aa50SMitch Phillips 49*b302aa50SMitch Phillipscc_defaults { 50*b302aa50SMitch Phillips name: "gwp_asan_defaults", 51*b302aa50SMitch Phillips host_supported: true, 52*b302aa50SMitch Phillips vendor_available: true, 53*b302aa50SMitch Phillips product_available: true, 54*b302aa50SMitch Phillips recovery_available: true, 55*b302aa50SMitch Phillips native_bridge_supported: true, 56*b302aa50SMitch Phillips ramdisk_available: true, 57*b302aa50SMitch Phillips vendor_ramdisk_available: true, 58*b302aa50SMitch Phillips 59*b302aa50SMitch Phillips // GWP-ASan currently has no support for darwin. 60*b302aa50SMitch Phillips target: { 61*b302aa50SMitch Phillips darwin: { 62*b302aa50SMitch Phillips enabled: false, 63*b302aa50SMitch Phillips }, 64*b302aa50SMitch Phillips }, 65*b302aa50SMitch Phillips min_sdk_version: "S", 66*b302aa50SMitch Phillips} 67*b302aa50SMitch Phillips 68*b302aa50SMitch Phillipscc_defaults { 69*b302aa50SMitch Phillips name: "gwp_asan_no_libs_defaults", 70*b302aa50SMitch Phillips defaults: ["gwp_asan_defaults"], 71*b302aa50SMitch Phillips 72*b302aa50SMitch Phillips // GWP-ASan is used by bionic libc, and should have no libc/libc++ 73*b302aa50SMitch Phillips // dependencies. 74*b302aa50SMitch Phillips target: { 75*b302aa50SMitch Phillips bionic: { 76*b302aa50SMitch Phillips system_shared_libs: [], 77*b302aa50SMitch Phillips header_libs: ["libc_headers"], 78*b302aa50SMitch Phillips }, 79*b302aa50SMitch Phillips }, 80*b302aa50SMitch Phillips stl: "none", 81*b302aa50SMitch Phillips} 82*b302aa50SMitch Phillips 83*b302aa50SMitch Phillipscc_library_headers { 84*b302aa50SMitch Phillips name: "gwp_asan_headers", 85*b302aa50SMitch Phillips defaults: [ 86*b302aa50SMitch Phillips "gwp_asan_defaults", 87*b302aa50SMitch Phillips "gwp_asan_no_libs_defaults", 88*b302aa50SMitch Phillips ], 89*b302aa50SMitch Phillips export_include_dirs: [ 90*b302aa50SMitch Phillips ".", 91*b302aa50SMitch Phillips ], 92*b302aa50SMitch Phillips apex_available: [ 93*b302aa50SMitch Phillips // This header lib is compiled also as part of the platform due to libasync_safe 94*b302aa50SMitch Phillips // and others that are compiled with this header and are statically included 95*b302aa50SMitch Phillips // in the platform side. 96*b302aa50SMitch Phillips "//apex_available:platform", 97*b302aa50SMitch Phillips "com.android.runtime", 98*b302aa50SMitch Phillips ], 99*b302aa50SMitch Phillips} 100*b302aa50SMitch Phillips 101*b302aa50SMitch Phillips// Only static linkage is provided for performance reasons. 102*b302aa50SMitch Phillipscc_library_static { 103*b302aa50SMitch Phillips name: "gwp_asan", 104*b302aa50SMitch Phillips defaults: ["gwp_asan_no_libs_defaults"], 105*b302aa50SMitch Phillips header_libs: [ 106*b302aa50SMitch Phillips "gwp_asan_headers", 107*b302aa50SMitch Phillips ], 108*b302aa50SMitch Phillips srcs: [ 109*b302aa50SMitch Phillips "gwp_asan/common.cpp", 110*b302aa50SMitch Phillips "gwp_asan/crash_handler.cpp", // for __gwp_asan_error_is_mine in libc(). 111*b302aa50SMitch Phillips "gwp_asan/guarded_pool_allocator.cpp", 112*b302aa50SMitch Phillips "gwp_asan/platform_specific/common_posix.cpp", 113*b302aa50SMitch Phillips "gwp_asan/platform_specific/guarded_pool_allocator_posix.cpp", 114*b302aa50SMitch Phillips "gwp_asan/platform_specific/mutex_posix.cpp", 115*b302aa50SMitch Phillips "gwp_asan/platform_specific/utilities_posix.cpp", 116*b302aa50SMitch Phillips "gwp_asan/stack_trace_compressor.cpp", 117*b302aa50SMitch Phillips ], 118*b302aa50SMitch Phillips apex_available: [ 119*b302aa50SMitch Phillips // Required to not occlude the default platform variation from being 120*b302aa50SMitch Phillips // skipped by the apex mutator. If this happens - the license file for 121*b302aa50SMitch Phillips // the static GWP-ASan library won't be generated, and you'll get errors 122*b302aa50SMitch Phillips // at build time. 123*b302aa50SMitch Phillips "//apex_available:platform", 124*b302aa50SMitch Phillips 125*b302aa50SMitch Phillips "com.android.runtime", // GWP-ASan is used in libc. 126*b302aa50SMitch Phillips "com.android.media.swcodec", // libc_scudo (from media) uses GWP-ASan. 127*b302aa50SMitch Phillips ], 128*b302aa50SMitch Phillips} 129*b302aa50SMitch Phillips 130*b302aa50SMitch Phillips// GWP-ASan crash handler API. Provides all the tools you need to symbolize a 131*b302aa50SMitch Phillips// GWP-ASan crash. 132*b302aa50SMitch Phillipscc_library_static { 133*b302aa50SMitch Phillips name: "gwp_asan_crash_handler", 134*b302aa50SMitch Phillips defaults: ["gwp_asan_no_libs_defaults"], 135*b302aa50SMitch Phillips header_libs: [ 136*b302aa50SMitch Phillips "gwp_asan_headers", 137*b302aa50SMitch Phillips ], 138*b302aa50SMitch Phillips srcs: [ 139*b302aa50SMitch Phillips "gwp_asan/common.cpp", 140*b302aa50SMitch Phillips "gwp_asan/crash_handler.cpp", 141*b302aa50SMitch Phillips "gwp_asan/platform_specific/common_posix.cpp", 142*b302aa50SMitch Phillips "gwp_asan/platform_specific/utilities_posix.cpp", 143*b302aa50SMitch Phillips "gwp_asan/stack_trace_compressor.cpp", 144*b302aa50SMitch Phillips ], 145*b302aa50SMitch Phillips apex_available: [ 146*b302aa50SMitch Phillips "//apex_available:platform", 147*b302aa50SMitch Phillips "com.android.runtime", 148*b302aa50SMitch Phillips ], 149*b302aa50SMitch Phillips} 150*b302aa50SMitch Phillips 151*b302aa50SMitch Phillipscc_fuzz { 152*b302aa50SMitch Phillips name: "stack_trace_compressor_fuzzer", 153*b302aa50SMitch Phillips host_supported: true, 154*b302aa50SMitch Phillips srcs: ["tools/stack_trace_compressor_fuzzer.cpp"], 155*b302aa50SMitch Phillips static_libs: ["gwp_asan"], 156*b302aa50SMitch Phillips} 157*b302aa50SMitch Phillips 158*b302aa50SMitch Phillipscc_fuzz { 159*b302aa50SMitch Phillips name: "options_parser_fuzzer", 160*b302aa50SMitch Phillips host_supported: true, 161*b302aa50SMitch Phillips srcs: [ 162*b302aa50SMitch Phillips "tools/options_parser_fuzzer.cpp", 163*b302aa50SMitch Phillips "gwp_asan/optional/options_parser.cpp", 164*b302aa50SMitch Phillips ], 165*b302aa50SMitch Phillips static_libs: ["gwp_asan"], 166*b302aa50SMitch Phillips} 167*b302aa50SMitch Phillips 168*b302aa50SMitch Phillips// These unit tests are also continuously run upstream in LLVM's buildbots. 169*b302aa50SMitch Phillipscc_test { 170*b302aa50SMitch Phillips name: "gwp_asan_unittest", 171*b302aa50SMitch Phillips defaults: ["linux_bionic_supported"], 172*b302aa50SMitch Phillips static_libs: [ 173*b302aa50SMitch Phillips "gwp_asan", 174*b302aa50SMitch Phillips "gwp_asan_crash_handler", 175*b302aa50SMitch Phillips "libasync_safe", 176*b302aa50SMitch Phillips "liblog", 177*b302aa50SMitch Phillips "libunwindstack_no_dex", 178*b302aa50SMitch Phillips "liblzma", // Dependency from libunwindstack. 179*b302aa50SMitch Phillips "libz", // Dependency from libunwindstack. 180*b302aa50SMitch Phillips ], 181*b302aa50SMitch Phillips shared_libs: [ 182*b302aa50SMitch Phillips "libbase", 183*b302aa50SMitch Phillips ], 184*b302aa50SMitch Phillips 185*b302aa50SMitch Phillips ldflags: [ 186*b302aa50SMitch Phillips // Ensure that ICF doesn't clobber DeallocateMemory2 into 187*b302aa50SMitch Phillips // DeallocateMemory in tests/backtrace.cpp. This is done in the linker, 188*b302aa50SMitch Phillips // so `optnone` in the function declaration doesn't help. 189*b302aa50SMitch Phillips "-Wl,--icf=none", 190*b302aa50SMitch Phillips ], 191*b302aa50SMitch Phillips srcs: [ 192*b302aa50SMitch Phillips "android/test_backtrace.cpp", 193*b302aa50SMitch Phillips "android/test_printf.cpp", 194*b302aa50SMitch Phillips "gwp_asan/optional/options_parser.cpp", 195*b302aa50SMitch Phillips "gwp_asan/optional/segv_handler_posix.cpp", 196*b302aa50SMitch Phillips "gwp_asan/tests/alignment.cpp", 197*b302aa50SMitch Phillips "gwp_asan/tests/backtrace.cpp", 198*b302aa50SMitch Phillips "gwp_asan/tests/basic.cpp", 199*b302aa50SMitch Phillips "gwp_asan/tests/compression.cpp", 200*b302aa50SMitch Phillips "gwp_asan/tests/crash_handler_api.cpp", 201*b302aa50SMitch Phillips "gwp_asan/tests/enable_disable.cpp", 202*b302aa50SMitch Phillips "gwp_asan/tests/harness.cpp", 203*b302aa50SMitch Phillips "gwp_asan/tests/iterate.cpp", 204*b302aa50SMitch Phillips "gwp_asan/tests/late_init.cpp", 205*b302aa50SMitch Phillips "gwp_asan/tests/mutex_test.cpp", 206*b302aa50SMitch Phillips "gwp_asan/tests/never_allocated.cpp", 207*b302aa50SMitch Phillips "gwp_asan/tests/recoverable.cpp", 208*b302aa50SMitch Phillips "gwp_asan/tests/options.cpp", 209*b302aa50SMitch Phillips "gwp_asan/tests/slot_reuse.cpp", 210*b302aa50SMitch Phillips "gwp_asan/tests/thread_contention.cpp", 211*b302aa50SMitch Phillips ], 212*b302aa50SMitch Phillips include_dirs: ["bionic/libc/async_safe/include"], 213*b302aa50SMitch Phillips test_suites: ["general-tests"], 214*b302aa50SMitch Phillips cflags: [ 215*b302aa50SMitch Phillips // GWP-ASan requires anything that uses GuardedPoolAllocator headers to 216*b302aa50SMitch Phillips // use platform (ELF) TLS. 217*b302aa50SMitch Phillips "-fno-emulated-tls", 218*b302aa50SMitch Phillips 219*b302aa50SMitch Phillips // Ensure that the helper functions in test/backtrace.cpp don't get 220*b302aa50SMitch Phillips // tail-call optimised, as this breaks the unwind chain. 221*b302aa50SMitch Phillips "-fno-optimize-sibling-calls", 222*b302aa50SMitch Phillips ], 223*b302aa50SMitch Phillips} 224