183ad9df536ab04ef35a397a1f4724e4e401d11f |
|
27-Feb-2014 |
Torne (Richard Coles) <torne@google.com> |
Allow sharing the RELRO section via a file. Add flags and a file descriptor to android_dlopen_ext() to allow writing the RELRO section of the loaded library to a file after relocation processing, and to allow mapping identical pages from the file over the top of relocated memory in another process. Explicitly comparing the pages is required in case a page contains a reference to a symbol defined in another library loaded at a random base address. Bug: 13005501 Change-Id: Ibb5b2d384edfaa5acf3e97a5f8b6115c10497a1e
|
12bbb9164578b6512b8b07a3fb093858244b7c7b |
|
06-Feb-2014 |
Torne (Richard Coles) <torne@google.com> |
Support loading libraries to a reserved address. Add flags and parameters to android_dlopen_ext() to allow loading a library at an already-reserved fixed address. If the library to be loaded will not fit within the space reserved, then the linker will either fail, or allocate its own address space as usual, according to which flag has been specified. This behaviour only applies to the specific library requested; any other libraries loaded as dependencies will be loaded in the normal fashion. There is a new gtest included to cover the functionality added. Bug: 13005501 Change-Id: I5d1810375b20fc51ba6a9b3191a25f9792c687f1
|
0266ae5f884d72da58f33a072e865ba131234a5e |
|
11-Feb-2014 |
Elliott Hughes <enh@google.com> |
Switch <elf.h> over to linux uapi under the covers. Remove the linker's reliance on BSD cruft and use the glibc-style ElfW macro. (Other code too, but the linker contains the majority of the code that needs to work for Elf32 and Elf64.) All platforms need dl_iterate_phdr_static, so it doesn't make sense to have that part of the per-architecture configuration. Bug: 12476126 Change-Id: I1d7f918f1303a392794a6cd8b3512ff56bd6e487
|
4eeb1f12a8b63afc0d0ad4d466b16fbffb21cd5a |
|
26-Oct-2013 |
Elliott Hughes <enh@google.com> |
Clean up linker architecture macros. We don't need our own architecture macros; the standard ones will do. This patch also fixes some __x86_64__ tests to be USE_RELA tests instead, because they're not actually x86_64-specific. I've cleaned up architecture-specific code slightly so where possible all the code corresponding to a particular architecture is together. This patch also fixes a bug in LP64 DT_PLTGOT handling, which should be an error rather than falling through into DT_DEBUG! There was another #ifdef bug where we'd only report unexpected DT_ entries on MIPS. Change-Id: Id1d04e372611f641c1aa278a18e379f28af9eaf5
|
c00f2cb587630d5e954c7f548749f1e3170b3cb1 |
|
05-Oct-2013 |
Elliott Hughes <enh@google.com> |
x86_64 linker. Based on I8dc3e2cb596f75dc58ae82e4dc58f8c177dd3323 by Pavel Chupin <pavel.v.chupin@intel.com>. Change-Id: Icd582d277cbe273477b450f2848343d72c86ec9f
|
c620059479c47a78d57086d73726c9adc2f337ad |
|
01-Oct-2013 |
Elliott Hughes <enh@google.com> |
Remove 32-bit assumptions from the ELF code. Change-Id: I2c1f3d34c33685799aade8866eec44479ff9f963
|
e7dffe150b3c1c835c669ec03965e37fead13de7 |
|
11-Jan-2013 |
Brian Carlstrom <bdc@google.com> |
Honor p_vaddr if set (cherry picked from commit 88ff15c2c279d2bbe3569101b36cd2aa0931a0a9) Change-Id: I4aabbe911d30aea8ace69e29bb6e980a4e89de90
|
650be4e584eeab3591b9e273bfd6d169eea60853 |
|
06-Mar-2013 |
Elliott Hughes <enh@google.com> |
More linker cleanup. Change-Id: I9fb3c7c0d4b4ffef0eeaf092d4e30ffe63a08671
|
d4ee82dfa3ba01baa10e3ca48fcb31a27b8a4e81 |
|
01-Mar-2013 |
Brian Carlstrom <bdc@google.com> |
Minor linker cleanup, primarily to use Elf32_Dyn Change-Id: Ifa9408e9859c6f79444715bed4808b7c13fdced5
|
cf23905a4bcc7bfdd109be5b6d69ad06877aa217 |
|
12-Jan-2013 |
Chris Dearman <chris@mips.com> |
[MIPS] Set DT_DEBUG dyntab entry if it is writable This is primarily for MIPS exutables that do not have a DT_MIPS_RLD_MAP entry. Change-Id: I4c221d92debcfed961eeee2515123f3fb21ec8e6 Signed-off-by: Chris Dearman <chris@mips.com>
|
18a206c81d9743481e364384affd43306911283d |
|
30-Oct-2012 |
Elliott Hughes <enh@google.com> |
More dynamic linker cleanup. I still want to break linker_format out into its own library so we can reuse it for malloc debugging and so forth. (There are many similar pieces of code in bionic, but the linker's one seems to be the most complete/functional.) Change-Id: If3721853d28937c8e821ca1d23cf200e228a409a
|
12c78bbded8ec03f821dfa09174464c04836e4ea |
|
14-Aug-2012 |
Ard Biesheuvel <ard.biesheuvel@gmail.com> |
linker: avoid clobbering the .dynamic section of shared libs This patch removes the DT_NEEDED hack which stores pointers to soinfo structs in the .dynamic section of the library being loaded. Instead, it caches the soinfo struct pointers on the stack during relocation time. After relocation time, i.e. when calling constructors and destructors of the shared library and its dependencies, uncached access is used instead, doing lookups using the string table entries pointed to by the DT_NEEDED entries. By removing this hack, it is no longer needed to undo the PT_GNURELRO protection, i.e., all non-writable mappings can remain non-writable during their entire lifespan. Even though, strictly speaking, the algorithmic complexity has increased somewhat, the real-world adverse effect is negligible on the systems I have tested. Change-Id: I2361502560b96b5878f7f94a8e8a215350d70d64 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@gmail.com>
|
4688279db5dcc4004941e7f133c4a1c3617d842c |
|
04-Aug-2012 |
Elliott Hughes <enh@google.com> |
Clean up the linker a bit, remove prelinking support. Also make the errors more readable, since none of us seemed to know what they actually meant. The new style is still as verbose as the old, but that's probably necessary in the absence of chained exceptions in C. Here's what you'd see if you try to boot after removing libsurfaceflinger.so: 32267 32267 E AndroidRuntime: java.lang.UnsatisfiedLinkError: Cannot load library: (linker.c:1629, pid 32259) soinfo_link_image: could not load library "libsystem_server.so" needed by "libandroid_servers.so"; caused by (linker.c:1629, pid 32259) soinfo_link_image: could not load library "libsurfaceflinger.so" needed by "libsystem_server.so"; caused by (linker.c:709, pid 32259) load_library: library "libsurfaceflinger.so" not found This patch also fixes almost all of the compiler warnings. Change-Id: I64bb59aed6d4e039c15ea45be2367f319ef879f8
|
c1bd559d5b0fdcc25db2b6ae2705914103b24699 |
|
19-Jun-2012 |
David 'Digit' Turner <digit@google.com> |
linker: New sources to manage the ELF program header table. This patch introduces two new source files containing a set of functions to manage the program header table in an ELF binary, including the ability to load PT_LOAD segments, and apply PT_GNU_RELRO protection. Note: the files are not used currently, this will appear in a series of future patches that will gradually modify linker.c to use the phdr_table_xxx functions properly. Change-Id: Ia3d4c1ff5fc3e265d8258b64b492f4e643f51bdc
|