2a6955e040
Some versions of kernel set AT_BASE to 0 if dynamic loader does not have PT_INTERP set. Bug: http://b/30739481 Test: run /system/bin/linker64 and /system/bin/linker Change-Id: I1b67777166fe917d3ee1a97277045ca6f5db0084
173 lines
4.4 KiB
Text
173 lines
4.4 KiB
Text
cc_library_static {
|
|
name: "liblinker_malloc",
|
|
defaults: ["linux_bionic_supported"],
|
|
|
|
srcs: [
|
|
"linker_allocator.cpp",
|
|
"linker_memory.cpp",
|
|
],
|
|
|
|
// We need to access Bionic private headers in the linker.
|
|
include_dirs: ["bionic/libc"],
|
|
}
|
|
|
|
cc_binary {
|
|
defaults: ["linux_bionic_supported"],
|
|
srcs: [
|
|
"dlfcn.cpp",
|
|
"linker.cpp",
|
|
"linker_block_allocator.cpp",
|
|
"linker_dlwarning.cpp",
|
|
"linker_cfi.cpp",
|
|
"linker_gdb_support.cpp",
|
|
"linker_globals.cpp",
|
|
"linker_libc_support.c",
|
|
"linker_libcxx_support.cpp",
|
|
"linker_main.cpp",
|
|
"linker_namespaces.cpp",
|
|
"linker_logger.cpp",
|
|
"linker_mapped_file_fragment.cpp",
|
|
"linker_phdr.cpp",
|
|
"linker_sdk_versions.cpp",
|
|
"linker_soinfo.cpp",
|
|
"linker_utils.cpp",
|
|
"rt.cpp",
|
|
],
|
|
|
|
arch: {
|
|
arm: {
|
|
srcs: ["arch/arm/begin.S"],
|
|
|
|
cflags: ["-D__work_around_b_24465209__"],
|
|
ldflags: ["-Wl,-dynamic-linker,/system/bin/linker"],
|
|
},
|
|
arm64: {
|
|
srcs: ["arch/arm64/begin.S"],
|
|
ldflags: ["-Wl,-dynamic-linker,/system/bin/linker64"],
|
|
},
|
|
x86: {
|
|
srcs: ["arch/x86/begin.c"],
|
|
|
|
cflags: ["-D__work_around_b_24465209__"],
|
|
ldflags: ["-Wl,-dynamic-linker,/system/bin/linker"],
|
|
},
|
|
x86_64: {
|
|
srcs: ["arch/x86_64/begin.S"],
|
|
ldflags: ["-Wl,-dynamic-linker,/system/bin/linker64"],
|
|
},
|
|
mips: {
|
|
srcs: [
|
|
"arch/mips/begin.S",
|
|
"linker_mips.cpp",
|
|
],
|
|
ldflags: ["-Wl,-dynamic-linker,/system/bin/linker"],
|
|
},
|
|
mips64: {
|
|
srcs: [
|
|
"arch/mips64/begin.S",
|
|
"linker_mips.cpp",
|
|
],
|
|
ldflags: ["-Wl,-dynamic-linker,/system/bin/linker64"],
|
|
},
|
|
},
|
|
|
|
// We need to access Bionic private headers in the linker.
|
|
include_dirs: ["bionic/libc"],
|
|
|
|
// -shared is used to overwrite the -Bstatic and -static
|
|
// flags triggered by LOCAL_FORCE_STATIC_EXECUTABLE.
|
|
// This dynamic linker is actually a shared object linked with static libraries.
|
|
ldflags: [
|
|
"-shared",
|
|
"-Wl,-Bsymbolic",
|
|
"-Wl,--exclude-libs,ALL",
|
|
],
|
|
|
|
cflags: [
|
|
"-fno-stack-protector",
|
|
"-Wstrict-overflow=5",
|
|
"-fvisibility=hidden",
|
|
"-Wall",
|
|
"-Wextra",
|
|
"-Wunused",
|
|
"-Werror",
|
|
],
|
|
|
|
// TODO: split out the asflags.
|
|
asflags: [
|
|
"-fno-stack-protector",
|
|
"-Wstrict-overflow=5",
|
|
"-fvisibility=hidden",
|
|
"-Wall",
|
|
"-Wextra",
|
|
"-Wunused",
|
|
"-Werror",
|
|
],
|
|
|
|
cppflags: ["-Wold-style-cast"],
|
|
|
|
// we are going to link libc++_static manually because
|
|
// when stl is not set to "none" build system adds libdl
|
|
// to the list of static libraries which needs to be
|
|
// avoided in the case of building loader.
|
|
stl: "none",
|
|
|
|
// we don't want crtbegin.o (because we have begin.o), so unset it
|
|
// just for this module
|
|
nocrt: true,
|
|
|
|
static_libs: [
|
|
"libc_nomalloc",
|
|
"libm",
|
|
"libziparchive",
|
|
"libutils",
|
|
"libbase",
|
|
"libz",
|
|
|
|
"libdebuggerd_handler_core",
|
|
"libdebuggerd_handler_fallback",
|
|
"libdebuggerd",
|
|
"libbacktrace",
|
|
"libunwind",
|
|
"liblzma",
|
|
"libcutils",
|
|
|
|
"liblog",
|
|
"libc++_static",
|
|
|
|
// Important: The liblinker_malloc should be the last library in the list
|
|
// to overwrite any other malloc implementations by other static libraries.
|
|
"liblinker_malloc"
|
|
],
|
|
static_executable: true,
|
|
|
|
name: "linker",
|
|
symlinks: ["linker_asan"],
|
|
multilib: {
|
|
lib64: {
|
|
suffix: "64",
|
|
},
|
|
},
|
|
target: {
|
|
android: {
|
|
static_libs: ["libdebuggerd_client"],
|
|
},
|
|
android64: {
|
|
cflags: ["-DTARGET_IS_64_BIT"],
|
|
},
|
|
linux_bionic: {
|
|
cflags: ["-DTARGET_IS_64_BIT"],
|
|
},
|
|
},
|
|
compile_multilib: "both",
|
|
|
|
// Leave the symbols in the shared library so that stack unwinders can produce
|
|
// meaningful name resolution.
|
|
strip: {
|
|
keep_symbols: true,
|
|
},
|
|
|
|
// Insert an extra objcopy step to add prefix to symbols. This is needed to prevent gdb
|
|
// looking up symbols in the linker by mistake.
|
|
prefix_symbols: "__dl_",
|
|
}
|