1*8d67ca89SAndroid Build Coastguard Workerpackage { 2*8d67ca89SAndroid Build Coastguard Worker default_team: "trendy_team_native_tools_libraries", 3*8d67ca89SAndroid Build Coastguard Worker default_applicable_licenses: ["bionic_linker_license"], 4*8d67ca89SAndroid Build Coastguard Worker} 5*8d67ca89SAndroid Build Coastguard Worker 6*8d67ca89SAndroid Build Coastguard Workerlicense { 7*8d67ca89SAndroid Build Coastguard Worker name: "bionic_linker_license", 8*8d67ca89SAndroid Build Coastguard Worker visibility: [":__subpackages__"], 9*8d67ca89SAndroid Build Coastguard Worker license_kinds: [ 10*8d67ca89SAndroid Build Coastguard Worker "SPDX-license-identifier-BSD", 11*8d67ca89SAndroid Build Coastguard Worker ], 12*8d67ca89SAndroid Build Coastguard Worker license_text: [ 13*8d67ca89SAndroid Build Coastguard Worker "NOTICE", 14*8d67ca89SAndroid Build Coastguard Worker ], 15*8d67ca89SAndroid Build Coastguard Worker} 16*8d67ca89SAndroid Build Coastguard Worker 17*8d67ca89SAndroid Build Coastguard Workerlinker_common_flags = [ 18*8d67ca89SAndroid Build Coastguard Worker "-fno-stack-protector", 19*8d67ca89SAndroid Build Coastguard Worker "-Wstrict-overflow=5", 20*8d67ca89SAndroid Build Coastguard Worker "-fvisibility=hidden", 21*8d67ca89SAndroid Build Coastguard Worker "-Wall", 22*8d67ca89SAndroid Build Coastguard Worker "-Wextra", 23*8d67ca89SAndroid Build Coastguard Worker "-Wunused", 24*8d67ca89SAndroid Build Coastguard Worker "-Werror", 25*8d67ca89SAndroid Build Coastguard Worker] 26*8d67ca89SAndroid Build Coastguard Worker 27*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 28*8d67ca89SAndroid Build Coastguard Worker// linker_wrapper - Linux Bionic (on the host) 29*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 30*8d67ca89SAndroid Build Coastguard Worker 31*8d67ca89SAndroid Build Coastguard Worker// This is used for bionic on (host) Linux to bootstrap our linker embedded into 32*8d67ca89SAndroid Build Coastguard Worker// a binary. 33*8d67ca89SAndroid Build Coastguard Worker// 34*8d67ca89SAndroid Build Coastguard Worker// Host bionic binaries do not have a PT_INTERP section, instead this gets 35*8d67ca89SAndroid Build Coastguard Worker// embedded as the entry point, and the linker is embedded as ELF sections in 36*8d67ca89SAndroid Build Coastguard Worker// each binary. There's a linker script that sets all of that up (generated by 37*8d67ca89SAndroid Build Coastguard Worker// extract_linker), and defines the extern symbols used in this file. 38*8d67ca89SAndroid Build Coastguard Workercc_object { 39*8d67ca89SAndroid Build Coastguard Worker name: "linker_wrapper", 40*8d67ca89SAndroid Build Coastguard Worker host_supported: true, 41*8d67ca89SAndroid Build Coastguard Worker device_supported: false, 42*8d67ca89SAndroid Build Coastguard Worker enabled: false, 43*8d67ca89SAndroid Build Coastguard Worker target: { 44*8d67ca89SAndroid Build Coastguard Worker linux_bionic: { 45*8d67ca89SAndroid Build Coastguard Worker enabled: true, 46*8d67ca89SAndroid Build Coastguard Worker }, 47*8d67ca89SAndroid Build Coastguard Worker }, 48*8d67ca89SAndroid Build Coastguard Worker 49*8d67ca89SAndroid Build Coastguard Worker cflags: linker_common_flags, 50*8d67ca89SAndroid Build Coastguard Worker 51*8d67ca89SAndroid Build Coastguard Worker srcs: [ 52*8d67ca89SAndroid Build Coastguard Worker "linker_wrapper.cpp", 53*8d67ca89SAndroid Build Coastguard Worker ], 54*8d67ca89SAndroid Build Coastguard Worker arch: { 55*8d67ca89SAndroid Build Coastguard Worker arm64: { 56*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/arm64/linker_wrapper_begin.S"], 57*8d67ca89SAndroid Build Coastguard Worker }, 58*8d67ca89SAndroid Build Coastguard Worker riscv64: { 59*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/riscv64/linker_wrapper_begin.S"], 60*8d67ca89SAndroid Build Coastguard Worker }, 61*8d67ca89SAndroid Build Coastguard Worker x86_64: { 62*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/x86_64/linker_wrapper_begin.S"], 63*8d67ca89SAndroid Build Coastguard Worker }, 64*8d67ca89SAndroid Build Coastguard Worker }, 65*8d67ca89SAndroid Build Coastguard Worker 66*8d67ca89SAndroid Build Coastguard Worker header_libs: ["libc_headers"], 67*8d67ca89SAndroid Build Coastguard Worker 68*8d67ca89SAndroid Build Coastguard Worker // We need to access Bionic private headers in the linker. 69*8d67ca89SAndroid Build Coastguard Worker include_dirs: ["bionic/libc"], 70*8d67ca89SAndroid Build Coastguard Worker} 71*8d67ca89SAndroid Build Coastguard Worker 72*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 73*8d67ca89SAndroid Build Coastguard Worker// linker default configuration 74*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 75*8d67ca89SAndroid Build Coastguard Worker 76*8d67ca89SAndroid Build Coastguard Worker// Configuration for the linker binary and any of its static libraries. 77*8d67ca89SAndroid Build Coastguard Workercc_defaults { 78*8d67ca89SAndroid Build Coastguard Worker name: "linker_defaults", 79*8d67ca89SAndroid Build Coastguard Worker arch: { 80*8d67ca89SAndroid Build Coastguard Worker arm: { 81*8d67ca89SAndroid Build Coastguard Worker cflags: ["-D__work_around_b_24465209__"], 82*8d67ca89SAndroid Build Coastguard Worker }, 83*8d67ca89SAndroid Build Coastguard Worker x86: { 84*8d67ca89SAndroid Build Coastguard Worker cflags: ["-D__work_around_b_24465209__"], 85*8d67ca89SAndroid Build Coastguard Worker }, 86*8d67ca89SAndroid Build Coastguard Worker }, 87*8d67ca89SAndroid Build Coastguard Worker 88*8d67ca89SAndroid Build Coastguard Worker cflags: linker_common_flags, 89*8d67ca89SAndroid Build Coastguard Worker asflags: linker_common_flags, 90*8d67ca89SAndroid Build Coastguard Worker 91*8d67ca89SAndroid Build Coastguard Worker product_variables: { 92*8d67ca89SAndroid Build Coastguard Worker debuggable: { 93*8d67ca89SAndroid Build Coastguard Worker cppflags: ["-DUSE_LD_CONFIG_FILE"], 94*8d67ca89SAndroid Build Coastguard Worker }, 95*8d67ca89SAndroid Build Coastguard Worker }, 96*8d67ca89SAndroid Build Coastguard Worker 97*8d67ca89SAndroid Build Coastguard Worker cppflags: ["-Wold-style-cast"], 98*8d67ca89SAndroid Build Coastguard Worker 99*8d67ca89SAndroid Build Coastguard Worker static_libs: [ 100*8d67ca89SAndroid Build Coastguard Worker "libziparchive", 101*8d67ca89SAndroid Build Coastguard Worker "libbase", 102*8d67ca89SAndroid Build Coastguard Worker "libz", 103*8d67ca89SAndroid Build Coastguard Worker 104*8d67ca89SAndroid Build Coastguard Worker "libasync_safe", 105*8d67ca89SAndroid Build Coastguard Worker 106*8d67ca89SAndroid Build Coastguard Worker "liblog_for_runtime_apex", 107*8d67ca89SAndroid Build Coastguard Worker ], 108*8d67ca89SAndroid Build Coastguard Worker 109*8d67ca89SAndroid Build Coastguard Worker // We need to access Bionic private headers in the linker. 110*8d67ca89SAndroid Build Coastguard Worker include_dirs: ["bionic/libc"], 111*8d67ca89SAndroid Build Coastguard Worker 112*8d67ca89SAndroid Build Coastguard Worker sanitize: { 113*8d67ca89SAndroid Build Coastguard Worker // Supporting memtag_globals in the linker would be tricky, 114*8d67ca89SAndroid Build Coastguard Worker // because it relocates itself very early. 115*8d67ca89SAndroid Build Coastguard Worker memtag_globals: false, 116*8d67ca89SAndroid Build Coastguard Worker }, 117*8d67ca89SAndroid Build Coastguard Worker} 118*8d67ca89SAndroid Build Coastguard Worker 119*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 120*8d67ca89SAndroid Build Coastguard Worker// linker components 121*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 122*8d67ca89SAndroid Build Coastguard Worker 123*8d67ca89SAndroid Build Coastguard Worker// Enable a module on all targets the linker runs on (ordinary Android targets, Linux Bionic, and 124*8d67ca89SAndroid Build Coastguard Worker// native bridge implementations). 125*8d67ca89SAndroid Build Coastguard Workercc_defaults { 126*8d67ca89SAndroid Build Coastguard Worker name: "linker_all_targets", 127*8d67ca89SAndroid Build Coastguard Worker defaults: ["linux_bionic_supported"], 128*8d67ca89SAndroid Build Coastguard Worker recovery_available: true, 129*8d67ca89SAndroid Build Coastguard Worker vendor_ramdisk_available: true, 130*8d67ca89SAndroid Build Coastguard Worker native_bridge_supported: true, 131*8d67ca89SAndroid Build Coastguard Worker} 132*8d67ca89SAndroid Build Coastguard Worker 133*8d67ca89SAndroid Build Coastguard Workercc_library_static { 134*8d67ca89SAndroid Build Coastguard Worker name: "liblinker_main", 135*8d67ca89SAndroid Build Coastguard Worker defaults: [ 136*8d67ca89SAndroid Build Coastguard Worker "linker_defaults", 137*8d67ca89SAndroid Build Coastguard Worker "linker_all_targets", 138*8d67ca89SAndroid Build Coastguard Worker ], 139*8d67ca89SAndroid Build Coastguard Worker srcs: ["linker_main.cpp"], 140*8d67ca89SAndroid Build Coastguard Worker 141*8d67ca89SAndroid Build Coastguard Worker // Ensure that the compiler won't insert string function calls before ifuncs are resolved. 142*8d67ca89SAndroid Build Coastguard Worker cflags: ["-ffreestanding"], 143*8d67ca89SAndroid Build Coastguard Worker apex_available: [ 144*8d67ca89SAndroid Build Coastguard Worker "com.android.runtime", 145*8d67ca89SAndroid Build Coastguard Worker ], 146*8d67ca89SAndroid Build Coastguard Worker} 147*8d67ca89SAndroid Build Coastguard Worker 148*8d67ca89SAndroid Build Coastguard Workercc_library_static { 149*8d67ca89SAndroid Build Coastguard Worker name: "liblinker_malloc", 150*8d67ca89SAndroid Build Coastguard Worker defaults: [ 151*8d67ca89SAndroid Build Coastguard Worker "linker_defaults", 152*8d67ca89SAndroid Build Coastguard Worker "linker_all_targets", 153*8d67ca89SAndroid Build Coastguard Worker ], 154*8d67ca89SAndroid Build Coastguard Worker srcs: ["linker_memory.cpp"], 155*8d67ca89SAndroid Build Coastguard Worker apex_available: [ 156*8d67ca89SAndroid Build Coastguard Worker "com.android.runtime", 157*8d67ca89SAndroid Build Coastguard Worker ], 158*8d67ca89SAndroid Build Coastguard Worker} 159*8d67ca89SAndroid Build Coastguard Worker 160*8d67ca89SAndroid Build Coastguard Workercc_library_static { 161*8d67ca89SAndroid Build Coastguard Worker name: "liblinker_debuggerd_stub", 162*8d67ca89SAndroid Build Coastguard Worker defaults: [ 163*8d67ca89SAndroid Build Coastguard Worker "linker_defaults", 164*8d67ca89SAndroid Build Coastguard Worker "linker_all_targets", 165*8d67ca89SAndroid Build Coastguard Worker ], 166*8d67ca89SAndroid Build Coastguard Worker srcs: ["linker_debuggerd_stub.cpp"], 167*8d67ca89SAndroid Build Coastguard Worker} 168*8d67ca89SAndroid Build Coastguard Worker 169*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 170*8d67ca89SAndroid Build Coastguard Worker// template for the linker binary 171*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 172*8d67ca89SAndroid Build Coastguard Worker 173*8d67ca89SAndroid Build Coastguard Workerfilegroup { 174*8d67ca89SAndroid Build Coastguard Worker name: "linker_sources", 175*8d67ca89SAndroid Build Coastguard Worker srcs: [ 176*8d67ca89SAndroid Build Coastguard Worker "dlfcn.cpp", 177*8d67ca89SAndroid Build Coastguard Worker "linker.cpp", 178*8d67ca89SAndroid Build Coastguard Worker "linker_auxv.cpp", 179*8d67ca89SAndroid Build Coastguard Worker "linker_block_allocator.cpp", 180*8d67ca89SAndroid Build Coastguard Worker "linker_dlwarning.cpp", 181*8d67ca89SAndroid Build Coastguard Worker "linker_cfi.cpp", 182*8d67ca89SAndroid Build Coastguard Worker "linker_config.cpp", 183*8d67ca89SAndroid Build Coastguard Worker "linker_debug.cpp", 184*8d67ca89SAndroid Build Coastguard Worker "linker_gdb_support.cpp", 185*8d67ca89SAndroid Build Coastguard Worker "linker_globals.cpp", 186*8d67ca89SAndroid Build Coastguard Worker "linker_libc_support.c", 187*8d67ca89SAndroid Build Coastguard Worker "linker_libcxx_support.cpp", 188*8d67ca89SAndroid Build Coastguard Worker "linker_namespaces.cpp", 189*8d67ca89SAndroid Build Coastguard Worker "linker_logger.cpp", 190*8d67ca89SAndroid Build Coastguard Worker "linker_mapped_file_fragment.cpp", 191*8d67ca89SAndroid Build Coastguard Worker "linker_note_gnu_property.cpp", 192*8d67ca89SAndroid Build Coastguard Worker "linker_phdr.cpp", 193*8d67ca89SAndroid Build Coastguard Worker "linker_phdr_16kib_compat.cpp", 194*8d67ca89SAndroid Build Coastguard Worker "linker_relocate.cpp", 195*8d67ca89SAndroid Build Coastguard Worker "linker_sdk_versions.cpp", 196*8d67ca89SAndroid Build Coastguard Worker "linker_soinfo.cpp", 197*8d67ca89SAndroid Build Coastguard Worker "linker_transparent_hugepage_support.cpp", 198*8d67ca89SAndroid Build Coastguard Worker "linker_tls.cpp", 199*8d67ca89SAndroid Build Coastguard Worker "linker_utils.cpp", 200*8d67ca89SAndroid Build Coastguard Worker "rt.cpp", 201*8d67ca89SAndroid Build Coastguard Worker ], 202*8d67ca89SAndroid Build Coastguard Worker} 203*8d67ca89SAndroid Build Coastguard Worker 204*8d67ca89SAndroid Build Coastguard Workerfilegroup { 205*8d67ca89SAndroid Build Coastguard Worker name: "linker_sources_arm", 206*8d67ca89SAndroid Build Coastguard Worker srcs: [ 207*8d67ca89SAndroid Build Coastguard Worker "arch/arm/begin.S", 208*8d67ca89SAndroid Build Coastguard Worker "arch/arm_neon/linker_gnu_hash_neon.cpp", 209*8d67ca89SAndroid Build Coastguard Worker ], 210*8d67ca89SAndroid Build Coastguard Worker} 211*8d67ca89SAndroid Build Coastguard Worker 212*8d67ca89SAndroid Build Coastguard Workerfilegroup { 213*8d67ca89SAndroid Build Coastguard Worker name: "linker_sources_arm64", 214*8d67ca89SAndroid Build Coastguard Worker srcs: [ 215*8d67ca89SAndroid Build Coastguard Worker "arch/arm64/begin.S", 216*8d67ca89SAndroid Build Coastguard Worker "arch/arm64/tlsdesc_resolver.S", 217*8d67ca89SAndroid Build Coastguard Worker "arch/arm_neon/linker_gnu_hash_neon.cpp", 218*8d67ca89SAndroid Build Coastguard Worker ], 219*8d67ca89SAndroid Build Coastguard Worker} 220*8d67ca89SAndroid Build Coastguard Worker 221*8d67ca89SAndroid Build Coastguard Workerfilegroup { 222*8d67ca89SAndroid Build Coastguard Worker name: "linker_sources_riscv64", 223*8d67ca89SAndroid Build Coastguard Worker srcs: [ 224*8d67ca89SAndroid Build Coastguard Worker "arch/riscv64/begin.S", 225*8d67ca89SAndroid Build Coastguard Worker "arch/riscv64/tlsdesc_resolver.S", 226*8d67ca89SAndroid Build Coastguard Worker ], 227*8d67ca89SAndroid Build Coastguard Worker} 228*8d67ca89SAndroid Build Coastguard Worker 229*8d67ca89SAndroid Build Coastguard Workerfilegroup { 230*8d67ca89SAndroid Build Coastguard Worker name: "linker_sources_x86", 231*8d67ca89SAndroid Build Coastguard Worker srcs: [ 232*8d67ca89SAndroid Build Coastguard Worker "arch/x86/begin.S", 233*8d67ca89SAndroid Build Coastguard Worker ], 234*8d67ca89SAndroid Build Coastguard Worker} 235*8d67ca89SAndroid Build Coastguard Worker 236*8d67ca89SAndroid Build Coastguard Workerfilegroup { 237*8d67ca89SAndroid Build Coastguard Worker name: "linker_sources_x86_64", 238*8d67ca89SAndroid Build Coastguard Worker srcs: [ 239*8d67ca89SAndroid Build Coastguard Worker "arch/x86_64/begin.S", 240*8d67ca89SAndroid Build Coastguard Worker ], 241*8d67ca89SAndroid Build Coastguard Worker} 242*8d67ca89SAndroid Build Coastguard Worker 243*8d67ca89SAndroid Build Coastguard Workercc_defaults { 244*8d67ca89SAndroid Build Coastguard Worker name: "linker_version_script_overlay", 245*8d67ca89SAndroid Build Coastguard Worker arch: { 246*8d67ca89SAndroid Build Coastguard Worker arm: { 247*8d67ca89SAndroid Build Coastguard Worker version_script: "linker.arm.map", 248*8d67ca89SAndroid Build Coastguard Worker }, 249*8d67ca89SAndroid Build Coastguard Worker arm64: { 250*8d67ca89SAndroid Build Coastguard Worker version_script: "linker.generic.map", 251*8d67ca89SAndroid Build Coastguard Worker }, 252*8d67ca89SAndroid Build Coastguard Worker riscv64: { 253*8d67ca89SAndroid Build Coastguard Worker version_script: "linker.generic.map", 254*8d67ca89SAndroid Build Coastguard Worker }, 255*8d67ca89SAndroid Build Coastguard Worker x86: { 256*8d67ca89SAndroid Build Coastguard Worker version_script: "linker.generic.map", 257*8d67ca89SAndroid Build Coastguard Worker }, 258*8d67ca89SAndroid Build Coastguard Worker x86_64: { 259*8d67ca89SAndroid Build Coastguard Worker version_script: "linker.generic.map", 260*8d67ca89SAndroid Build Coastguard Worker }, 261*8d67ca89SAndroid Build Coastguard Worker }, 262*8d67ca89SAndroid Build Coastguard Worker} 263*8d67ca89SAndroid Build Coastguard Worker 264*8d67ca89SAndroid Build Coastguard Worker// A template for the linker binary. May be inherited by native bridge implementations. 265*8d67ca89SAndroid Build Coastguard Workercc_defaults { 266*8d67ca89SAndroid Build Coastguard Worker name: "linker_bin_template", 267*8d67ca89SAndroid Build Coastguard Worker defaults: [ 268*8d67ca89SAndroid Build Coastguard Worker "linker_defaults", 269*8d67ca89SAndroid Build Coastguard Worker "keep_symbols", 270*8d67ca89SAndroid Build Coastguard Worker ], 271*8d67ca89SAndroid Build Coastguard Worker 272*8d67ca89SAndroid Build Coastguard Worker srcs: [":linker_sources"], 273*8d67ca89SAndroid Build Coastguard Worker 274*8d67ca89SAndroid Build Coastguard Worker arch: { 275*8d67ca89SAndroid Build Coastguard Worker arm: { 276*8d67ca89SAndroid Build Coastguard Worker srcs: [":linker_sources_arm"], 277*8d67ca89SAndroid Build Coastguard Worker }, 278*8d67ca89SAndroid Build Coastguard Worker arm64: { 279*8d67ca89SAndroid Build Coastguard Worker srcs: [":linker_sources_arm64"], 280*8d67ca89SAndroid Build Coastguard Worker }, 281*8d67ca89SAndroid Build Coastguard Worker riscv64: { 282*8d67ca89SAndroid Build Coastguard Worker srcs: [":linker_sources_riscv64"], 283*8d67ca89SAndroid Build Coastguard Worker }, 284*8d67ca89SAndroid Build Coastguard Worker x86: { 285*8d67ca89SAndroid Build Coastguard Worker srcs: [":linker_sources_x86"], 286*8d67ca89SAndroid Build Coastguard Worker }, 287*8d67ca89SAndroid Build Coastguard Worker x86_64: { 288*8d67ca89SAndroid Build Coastguard Worker srcs: [":linker_sources_x86_64"], 289*8d67ca89SAndroid Build Coastguard Worker }, 290*8d67ca89SAndroid Build Coastguard Worker }, 291*8d67ca89SAndroid Build Coastguard Worker 292*8d67ca89SAndroid Build Coastguard Worker static_executable: true, 293*8d67ca89SAndroid Build Coastguard Worker 294*8d67ca89SAndroid Build Coastguard Worker // -shared is used to overwrite the -Bstatic and -static flags triggered by enabling 295*8d67ca89SAndroid Build Coastguard Worker // static_executable. The dynamic linker is actually a shared object linked with static 296*8d67ca89SAndroid Build Coastguard Worker // libraries. 297*8d67ca89SAndroid Build Coastguard Worker ldflags: [ 298*8d67ca89SAndroid Build Coastguard Worker "-shared", 299*8d67ca89SAndroid Build Coastguard Worker "-Wl,-Bsymbolic", 300*8d67ca89SAndroid Build Coastguard Worker "-Wl,--exclude-libs,ALL", 301*8d67ca89SAndroid Build Coastguard Worker "-Wl,-soname,ld-android.so", 302*8d67ca89SAndroid Build Coastguard Worker // When the linker applies its own IRELATIVE relocations, it will only read DT_REL[A] and 303*8d67ca89SAndroid Build Coastguard Worker // DT_JMPREL, not DT_ANDROID_REL[A], which can also theoretically contain IRELATIVE 304*8d67ca89SAndroid Build Coastguard Worker // relocations. lld has been taught to not store them there as a bug workaround (see 305*8d67ca89SAndroid Build Coastguard Worker // https://llvm.org/pr86751) but the workaround could be removed at some point in the 306*8d67ca89SAndroid Build Coastguard Worker // future. So we explicitly prevent it from doing so by disabling DT_ANDROID_REL[A] when 307*8d67ca89SAndroid Build Coastguard Worker // linking the linker (DT_RELR cannot encode IRELATIVE relocations). 308*8d67ca89SAndroid Build Coastguard Worker "-Wl,--pack-dyn-relocs=relr", 309*8d67ca89SAndroid Build Coastguard Worker ], 310*8d67ca89SAndroid Build Coastguard Worker 311*8d67ca89SAndroid Build Coastguard Worker // We link libc++_static manually because otherwise the build system will 312*8d67ca89SAndroid Build Coastguard Worker // automatically add libdl to the list of static libraries. 313*8d67ca89SAndroid Build Coastguard Worker stl: "none", 314*8d67ca89SAndroid Build Coastguard Worker 315*8d67ca89SAndroid Build Coastguard Worker // We don't want crtbegin.o (because we have our own arch/*/begin.o), 316*8d67ca89SAndroid Build Coastguard Worker // so unset it just for this module. 317*8d67ca89SAndroid Build Coastguard Worker nocrt: true, 318*8d67ca89SAndroid Build Coastguard Worker 319*8d67ca89SAndroid Build Coastguard Worker // Insert an extra objcopy step to add prefix to symbols. This is needed to prevent gdb 320*8d67ca89SAndroid Build Coastguard Worker // looking up symbols in the linker by mistake. 321*8d67ca89SAndroid Build Coastguard Worker prefix_symbols: "__dl_", 322*8d67ca89SAndroid Build Coastguard Worker 323*8d67ca89SAndroid Build Coastguard Worker sanitize: { 324*8d67ca89SAndroid Build Coastguard Worker hwaddress: false, 325*8d67ca89SAndroid Build Coastguard Worker memtag_stack: false, 326*8d67ca89SAndroid Build Coastguard Worker }, 327*8d67ca89SAndroid Build Coastguard Worker 328*8d67ca89SAndroid Build Coastguard Worker static_libs: [ 329*8d67ca89SAndroid Build Coastguard Worker "liblinker_main", 330*8d67ca89SAndroid Build Coastguard Worker "liblinker_malloc", 331*8d67ca89SAndroid Build Coastguard Worker 332*8d67ca89SAndroid Build Coastguard Worker // We use a version of libc++ built without exceptions, 333*8d67ca89SAndroid Build Coastguard Worker // because accessing EH globals uses ELF TLS, 334*8d67ca89SAndroid Build Coastguard Worker // which is not supported in the loader. 335*8d67ca89SAndroid Build Coastguard Worker "libc++_static_noexcept", 336*8d67ca89SAndroid Build Coastguard Worker 337*8d67ca89SAndroid Build Coastguard Worker "libc_nomalloc", 338*8d67ca89SAndroid Build Coastguard Worker "libc_dynamic_dispatch", 339*8d67ca89SAndroid Build Coastguard Worker "libm", 340*8d67ca89SAndroid Build Coastguard Worker "libunwind", 341*8d67ca89SAndroid Build Coastguard Worker ], 342*8d67ca89SAndroid Build Coastguard Worker 343*8d67ca89SAndroid Build Coastguard Worker system_shared_libs: [], 344*8d67ca89SAndroid Build Coastguard Worker 345*8d67ca89SAndroid Build Coastguard Worker // Opt out of native_coverage when opting out of system_shared_libs 346*8d67ca89SAndroid Build Coastguard Worker native_coverage: false, 347*8d67ca89SAndroid Build Coastguard Worker} 348*8d67ca89SAndroid Build Coastguard Worker 349*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 350*8d67ca89SAndroid Build Coastguard Worker// linker[_asan][64] binary 351*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 352*8d67ca89SAndroid Build Coastguard Worker 353*8d67ca89SAndroid Build Coastguard Workercc_binary { 354*8d67ca89SAndroid Build Coastguard Worker name: "linker", 355*8d67ca89SAndroid Build Coastguard Worker defaults: [ 356*8d67ca89SAndroid Build Coastguard Worker "linker_bin_template", 357*8d67ca89SAndroid Build Coastguard Worker "linux_bionic_supported", 358*8d67ca89SAndroid Build Coastguard Worker "linker_version_script_overlay", 359*8d67ca89SAndroid Build Coastguard Worker ], 360*8d67ca89SAndroid Build Coastguard Worker 361*8d67ca89SAndroid Build Coastguard Worker srcs: [ 362*8d67ca89SAndroid Build Coastguard Worker "linker_translate_path.cpp", 363*8d67ca89SAndroid Build Coastguard Worker ], 364*8d67ca89SAndroid Build Coastguard Worker 365*8d67ca89SAndroid Build Coastguard Worker symlinks: ["linker_asan"], 366*8d67ca89SAndroid Build Coastguard Worker arch: { 367*8d67ca89SAndroid Build Coastguard Worker arm64: { 368*8d67ca89SAndroid Build Coastguard Worker symlinks: ["linker_hwasan"], 369*8d67ca89SAndroid Build Coastguard Worker }, 370*8d67ca89SAndroid Build Coastguard Worker }, 371*8d67ca89SAndroid Build Coastguard Worker multilib: { 372*8d67ca89SAndroid Build Coastguard Worker lib64: { 373*8d67ca89SAndroid Build Coastguard Worker suffix: "64", 374*8d67ca89SAndroid Build Coastguard Worker }, 375*8d67ca89SAndroid Build Coastguard Worker }, 376*8d67ca89SAndroid Build Coastguard Worker 377*8d67ca89SAndroid Build Coastguard Worker compile_multilib: "both", 378*8d67ca89SAndroid Build Coastguard Worker 379*8d67ca89SAndroid Build Coastguard Worker recovery_available: true, 380*8d67ca89SAndroid Build Coastguard Worker vendor_ramdisk_available: true, 381*8d67ca89SAndroid Build Coastguard Worker apex_available: [ 382*8d67ca89SAndroid Build Coastguard Worker "//apex_available:platform", 383*8d67ca89SAndroid Build Coastguard Worker "com.android.runtime", 384*8d67ca89SAndroid Build Coastguard Worker ], 385*8d67ca89SAndroid Build Coastguard Worker 386*8d67ca89SAndroid Build Coastguard Worker target: { 387*8d67ca89SAndroid Build Coastguard Worker android: { 388*8d67ca89SAndroid Build Coastguard Worker srcs: [ 389*8d67ca89SAndroid Build Coastguard Worker "linker_debuggerd_android.cpp", 390*8d67ca89SAndroid Build Coastguard Worker ], 391*8d67ca89SAndroid Build Coastguard Worker static_libs: [ 392*8d67ca89SAndroid Build Coastguard Worker "libc++demangle_noexcept", 393*8d67ca89SAndroid Build Coastguard Worker "libdebuggerd_handler_fallback", 394*8d67ca89SAndroid Build Coastguard Worker ], 395*8d67ca89SAndroid Build Coastguard Worker }, 396*8d67ca89SAndroid Build Coastguard Worker linux_bionic: { 397*8d67ca89SAndroid Build Coastguard Worker static_libs: [ 398*8d67ca89SAndroid Build Coastguard Worker "liblinker_debuggerd_stub", 399*8d67ca89SAndroid Build Coastguard Worker ], 400*8d67ca89SAndroid Build Coastguard Worker }, 401*8d67ca89SAndroid Build Coastguard Worker }, 402*8d67ca89SAndroid Build Coastguard Worker 403*8d67ca89SAndroid Build Coastguard Worker afdo: true, 404*8d67ca89SAndroid Build Coastguard Worker} 405*8d67ca89SAndroid Build Coastguard Worker 406*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 407*8d67ca89SAndroid Build Coastguard Worker// assorted modules 408*8d67ca89SAndroid Build Coastguard Worker// ======================================================== 409*8d67ca89SAndroid Build Coastguard Worker 410*8d67ca89SAndroid Build Coastguard Workersh_binary { 411*8d67ca89SAndroid Build Coastguard Worker name: "ldd", 412*8d67ca89SAndroid Build Coastguard Worker src: "ldd.sh", 413*8d67ca89SAndroid Build Coastguard Worker} 414*8d67ca89SAndroid Build Coastguard Worker 415*8d67ca89SAndroid Build Coastguard Worker// Used to generate binaries that can be backed by transparent hugepages. 416*8d67ca89SAndroid Build Coastguard Workercc_defaults { 417*8d67ca89SAndroid Build Coastguard Worker name: "linker_hugepage_aligned", 418*8d67ca89SAndroid Build Coastguard Worker arch: { 419*8d67ca89SAndroid Build Coastguard Worker arm64: { 420*8d67ca89SAndroid Build Coastguard Worker ldflags: ["-z max-page-size=0x200000"], 421*8d67ca89SAndroid Build Coastguard Worker }, 422*8d67ca89SAndroid Build Coastguard Worker x86_64: { 423*8d67ca89SAndroid Build Coastguard Worker ldflags: ["-z max-page-size=0x200000"], 424*8d67ca89SAndroid Build Coastguard Worker }, 425*8d67ca89SAndroid Build Coastguard Worker }, 426*8d67ca89SAndroid Build Coastguard Worker} 427*8d67ca89SAndroid Build Coastguard Worker 428*8d67ca89SAndroid Build Coastguard Workercc_library { 429*8d67ca89SAndroid Build Coastguard Worker srcs: ["ld_android.cpp"], 430*8d67ca89SAndroid Build Coastguard Worker cflags: [ 431*8d67ca89SAndroid Build Coastguard Worker "-Wall", 432*8d67ca89SAndroid Build Coastguard Worker "-Wextra", 433*8d67ca89SAndroid Build Coastguard Worker "-Wunused", 434*8d67ca89SAndroid Build Coastguard Worker "-Werror", 435*8d67ca89SAndroid Build Coastguard Worker ], 436*8d67ca89SAndroid Build Coastguard Worker stl: "none", 437*8d67ca89SAndroid Build Coastguard Worker 438*8d67ca89SAndroid Build Coastguard Worker name: "ld-android", 439*8d67ca89SAndroid Build Coastguard Worker defaults: [ 440*8d67ca89SAndroid Build Coastguard Worker "linux_bionic_supported", 441*8d67ca89SAndroid Build Coastguard Worker "linker_version_script_overlay", 442*8d67ca89SAndroid Build Coastguard Worker ], 443*8d67ca89SAndroid Build Coastguard Worker ramdisk_available: true, 444*8d67ca89SAndroid Build Coastguard Worker vendor_ramdisk_available: true, 445*8d67ca89SAndroid Build Coastguard Worker recovery_available: true, 446*8d67ca89SAndroid Build Coastguard Worker native_bridge_supported: true, 447*8d67ca89SAndroid Build Coastguard Worker 448*8d67ca89SAndroid Build Coastguard Worker nocrt: true, 449*8d67ca89SAndroid Build Coastguard Worker system_shared_libs: [], 450*8d67ca89SAndroid Build Coastguard Worker header_libs: ["libc_headers"], 451*8d67ca89SAndroid Build Coastguard Worker 452*8d67ca89SAndroid Build Coastguard Worker // Opt out of native_coverage when opting out of system_shared_libs 453*8d67ca89SAndroid Build Coastguard Worker native_coverage: false, 454*8d67ca89SAndroid Build Coastguard Worker 455*8d67ca89SAndroid Build Coastguard Worker sanitize: { 456*8d67ca89SAndroid Build Coastguard Worker never: true, 457*8d67ca89SAndroid Build Coastguard Worker }, 458*8d67ca89SAndroid Build Coastguard Worker 459*8d67ca89SAndroid Build Coastguard Worker apex_available: [ 460*8d67ca89SAndroid Build Coastguard Worker "//apex_available:platform", 461*8d67ca89SAndroid Build Coastguard Worker "com.android.runtime", 462*8d67ca89SAndroid Build Coastguard Worker ], 463*8d67ca89SAndroid Build Coastguard Worker} 464*8d67ca89SAndroid Build Coastguard Worker 465*8d67ca89SAndroid Build Coastguard Workercc_test { 466*8d67ca89SAndroid Build Coastguard Worker name: "linker-unit-tests", 467*8d67ca89SAndroid Build Coastguard Worker test_suites: ["device-tests"], 468*8d67ca89SAndroid Build Coastguard Worker 469*8d67ca89SAndroid Build Coastguard Worker cflags: [ 470*8d67ca89SAndroid Build Coastguard Worker "-g", 471*8d67ca89SAndroid Build Coastguard Worker "-Wall", 472*8d67ca89SAndroid Build Coastguard Worker "-Wextra", 473*8d67ca89SAndroid Build Coastguard Worker "-Wunused", 474*8d67ca89SAndroid Build Coastguard Worker "-Werror", 475*8d67ca89SAndroid Build Coastguard Worker ], 476*8d67ca89SAndroid Build Coastguard Worker 477*8d67ca89SAndroid Build Coastguard Worker // We need to access Bionic private headers in the linker. 478*8d67ca89SAndroid Build Coastguard Worker include_dirs: ["bionic/libc"], 479*8d67ca89SAndroid Build Coastguard Worker 480*8d67ca89SAndroid Build Coastguard Worker srcs: [ 481*8d67ca89SAndroid Build Coastguard Worker // Tests. 482*8d67ca89SAndroid Build Coastguard Worker "linker_block_allocator_test.cpp", 483*8d67ca89SAndroid Build Coastguard Worker "linker_config_test.cpp", 484*8d67ca89SAndroid Build Coastguard Worker "linked_list_test.cpp", 485*8d67ca89SAndroid Build Coastguard Worker "linker_note_gnu_property_test.cpp", 486*8d67ca89SAndroid Build Coastguard Worker "linker_sleb128_test.cpp", 487*8d67ca89SAndroid Build Coastguard Worker "linker_utils_test.cpp", 488*8d67ca89SAndroid Build Coastguard Worker "linker_gnu_hash_test.cpp", 489*8d67ca89SAndroid Build Coastguard Worker "linker_crt_pad_segment_test.cpp", 490*8d67ca89SAndroid Build Coastguard Worker 491*8d67ca89SAndroid Build Coastguard Worker // Parts of the linker that we're testing. 492*8d67ca89SAndroid Build Coastguard Worker ":elf_note_sources", 493*8d67ca89SAndroid Build Coastguard Worker "linker_block_allocator.cpp", 494*8d67ca89SAndroid Build Coastguard Worker "linker_config.cpp", 495*8d67ca89SAndroid Build Coastguard Worker "linker_debug.cpp", 496*8d67ca89SAndroid Build Coastguard Worker "linker_note_gnu_property.cpp", 497*8d67ca89SAndroid Build Coastguard Worker "linker_test_globals.cpp", 498*8d67ca89SAndroid Build Coastguard Worker "linker_utils.cpp", 499*8d67ca89SAndroid Build Coastguard Worker "linker_phdr.cpp", 500*8d67ca89SAndroid Build Coastguard Worker "linker_mapped_file_fragment.cpp", 501*8d67ca89SAndroid Build Coastguard Worker "linker_sdk_versions.cpp", 502*8d67ca89SAndroid Build Coastguard Worker "linker_dlwarning.cpp", 503*8d67ca89SAndroid Build Coastguard Worker "linker_phdr_16kib_compat.cpp" 504*8d67ca89SAndroid Build Coastguard Worker ], 505*8d67ca89SAndroid Build Coastguard Worker 506*8d67ca89SAndroid Build Coastguard Worker static_libs: [ 507*8d67ca89SAndroid Build Coastguard Worker "libasync_safe", 508*8d67ca89SAndroid Build Coastguard Worker "libbase", 509*8d67ca89SAndroid Build Coastguard Worker "liblog_for_runtime_apex", 510*8d67ca89SAndroid Build Coastguard Worker "libprocinfo", // For procinfo::MappedFileSize() 511*8d67ca89SAndroid Build Coastguard Worker ], 512*8d67ca89SAndroid Build Coastguard Worker 513*8d67ca89SAndroid Build Coastguard Worker data_libs: [ 514*8d67ca89SAndroid Build Coastguard Worker "crt_pad_segment_disabled", 515*8d67ca89SAndroid Build Coastguard Worker "crt_pad_segment_enabled", 516*8d67ca89SAndroid Build Coastguard Worker "no_crt_pad_segment", 517*8d67ca89SAndroid Build Coastguard Worker ], 518*8d67ca89SAndroid Build Coastguard Worker 519*8d67ca89SAndroid Build Coastguard Worker arch: { 520*8d67ca89SAndroid Build Coastguard Worker arm: { 521*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/arm_neon/linker_gnu_hash_neon.cpp"], 522*8d67ca89SAndroid Build Coastguard Worker }, 523*8d67ca89SAndroid Build Coastguard Worker arm64: { 524*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/arm_neon/linker_gnu_hash_neon.cpp"], 525*8d67ca89SAndroid Build Coastguard Worker }, 526*8d67ca89SAndroid Build Coastguard Worker }, 527*8d67ca89SAndroid Build Coastguard Worker} 528*8d67ca89SAndroid Build Coastguard Worker 529*8d67ca89SAndroid Build Coastguard Workercc_benchmark { 530*8d67ca89SAndroid Build Coastguard Worker name: "linker-benchmarks", 531*8d67ca89SAndroid Build Coastguard Worker 532*8d67ca89SAndroid Build Coastguard Worker srcs: [ 533*8d67ca89SAndroid Build Coastguard Worker "linker_gnu_hash_benchmark.cpp", 534*8d67ca89SAndroid Build Coastguard Worker ], 535*8d67ca89SAndroid Build Coastguard Worker 536*8d67ca89SAndroid Build Coastguard Worker arch: { 537*8d67ca89SAndroid Build Coastguard Worker arm: { 538*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/arm_neon/linker_gnu_hash_neon.cpp"], 539*8d67ca89SAndroid Build Coastguard Worker }, 540*8d67ca89SAndroid Build Coastguard Worker arm64: { 541*8d67ca89SAndroid Build Coastguard Worker srcs: ["arch/arm_neon/linker_gnu_hash_neon.cpp"], 542*8d67ca89SAndroid Build Coastguard Worker }, 543*8d67ca89SAndroid Build Coastguard Worker }, 544*8d67ca89SAndroid Build Coastguard Worker} 545