platform_bionic/linker
Ryan Prichard 8f639a4096 Allow invoking the linker on an executable.
The executable can be inside a zip file using the same syntax used for
shared objects: path.zip!/libentry.so.

The linker currently requires an absolute path. This restriction could be
loosened, but it didn't seem important? If it allowed non-absolute paths,
we'd need to decide how to handle:
 - foo/bar      (relative to CWD?)
 - foo          (search PATH / LD_LIBRARY_PATH, or also relative to CWD?)
 - foo.zip!/bar (normalize_path() requires an absolute path)

The linker adjusts the argc/argv passed to main() and to constructor
functions to hide the initial linker argument, but doesn't adjust the auxv
vector or files like /proc/self/{exe,cmdline,auxv,stat}. Those files will
report that the kernel loaded the linker as an executable.

I think the linker_logger.cpp change guarding against (g_argv == NULL)
isn't actually necessary, but it seemed like a good idea given that I'm
delaying initialization of g_argv until after C++ constructors have run.

Bug: http://b/112050209
Test: bionic unit tests
Change-Id: I846faf98b16fd34218946f6167e8b451897debe5
2018-10-10 14:31:06 -07:00
..
arch Switch x86 begin.c to asm; align ESP correctly 2018-02-12 21:43:12 -08:00
tests Fix normalize_path's handling of "/.." 2018-10-08 13:27:16 -07:00
Android.bp Merge "Exclude libclang_rt.builtins symbols" 2018-10-04 22:09:55 +00:00
Android.mk Convert linker from Android.mk to Android.bp 2016-07-15 13:39:29 -07:00
dlfcn.cpp Fix linker's _r_debug (gdb) info 2018-08-21 17:20:07 -07:00
ld.config.format.md Load namespace configuration from ld.config.txt 2017-03-24 15:50:45 -07:00
ld_android.cpp Break libdl.so and ld-android.so's dependency on libc.so. 2018-03-30 13:56:03 -07:00
linked_list.h Add noexcept to move constructors and assignment operators. 2018-09-25 14:00:44 -07:00
linker.arm.map linker: Allow link namespaces without name filters 2018-01-25 14:45:29 +08:00
linker.cpp Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker.generic.map linker: Allow link namespaces without name filters 2018-01-25 14:45:29 +08:00
linker.h Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker_allocator.cpp Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to <sys/prctl.h>. 2018-08-22 10:36:23 -07:00
linker_allocator.h Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to <sys/prctl.h>. 2018-08-22 10:36:23 -07:00
linker_block_allocator.cpp Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to <sys/prctl.h>. 2018-08-22 10:36:23 -07:00
linker_block_allocator.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_cfi.cpp Add PR_SET_VMA and PR_SET_VMA_ANON_NAME to <sys/prctl.h>. 2018-08-22 10:36:23 -07:00
linker_cfi.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_common_types.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_config.cpp Don't emit warning on missing directories 2018-06-22 00:59:23 +09:00
linker_config.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_debug.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_dlwarning.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_dlwarning.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_exidx_static.c Implement __gnu_Unwind_Find_exidx/__cxa_type_match 2017-08-29 18:18:27 +02:00
linker_gdb_support.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_gdb_support.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_globals.cpp Be clearer about linker warnings. 2018-02-28 12:37:28 -08:00
linker_globals.h Be clearer about linker warnings. 2018-02-28 12:37:28 -08:00
linker_libc_support.c Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_libcxx_support.cpp Adapt to the new libc++/libc++abi update. 2018-01-08 14:44:42 -08:00
linker_logger.cpp Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker_logger.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_main.cpp Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker_main.h Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker_mapped_file_fragment.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_mapped_file_fragment.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_memory.cpp Add reallocarray(3). 2018-09-26 14:24:18 -07:00
linker_mips.cpp MIPS: Fix MIPS linker VDSO issues 2017-10-13 12:08:30 +02:00
linker_namespaces.cpp Be clearer about linker warnings. 2018-02-28 12:37:28 -08:00
linker_namespaces.h Libraries without dt_soname are inaccessible 2018-04-29 13:39:46 +02:00
linker_phdr.cpp State clearly that an ELF file has the wrong architecture. 2018-09-17 15:50:09 -07:00
linker_phdr.h Allow invoking the linker on an executable. 2018-10-10 14:31:06 -07:00
linker_reloc_iterators.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_relocs.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_sdk_versions.cpp Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
linker_sleb128.h Switch the rest of our internal headers to #pragma once. 2018-02-13 14:27:17 -08:00
linker_soinfo.cpp dynamic linker is running for init 2018-06-08 14:50:14 +09:00
linker_soinfo.h Fix linker's _r_debug (gdb) info 2018-08-21 17:20:07 -07:00
linker_utils.cpp Fix normalize_path's handling of "/.." 2018-10-08 13:27:16 -07:00
linker_utils.h dynamic linker is running for init 2018-06-08 14:50:14 +09:00
linker_wrapper.cpp Use an embedded linker for host bionic 2017-09-20 13:59:13 -07:00
MODULE_LICENSE_BSD Unify linker files under one license (BSD) 2017-02-15 15:35:33 -08:00
rt.cpp More dynamic linker cleanup. 2012-10-30 16:35:38 -07:00