summaryrefslogtreecommitdiff
path: root/linker/linker.cpp
AgeCommit message (Collapse)Author
2019-02-04Allow dlopen("/system/lib/<soname>") for pre-QVictor Chang
It's enabled for the following .so libraries libicuuc.so libicui18n.so This CL does not move the .so files into a APEX. Thus, no visible effect before moving .so files. Bug: 121248172 Test: Perform the following test after moving libicuuc to /apex dlopen("/system/lib64/libicuuc.so") for targetSdkVersion < Q Change-Id: Ic00d281d59de924c01582c48d2a946e3f5f33a09
2019-01-30Purge linker block allocators before leaving linkerVic Yang
This is the second attempt to purge linker block allocators. Unlike the previously reverted change which purge allocators whenever all objects are freed, we only purge right before control leaves the linker. This limits the performance impact to one munmap() call per dlopen(), in most cases. Bug: 112073665 Test: Boot and check memory usage with 'showmap'. Test: Run camear cold start performance test. Change-Id: I02c7c44935f768e065fbe7ff0389a84bd44713f0
2019-01-29Implement arm64 TLSDESCRyan Prichard
Each TLSDESC relocation relocates a 2-word descriptor in the GOT that contains: - the address of a TLS resolver function - an argument to pass (indirectly) to the resolver function (Specifically, the address of the 2-word descriptor is passed to the resolver.) The loader resolves R_GENERIC_TLSDESC relocations using one of three resolver functions that it defines: - tlsdesc_resolver_static - tlsdesc_resolver_dynamic - tlsdesc_resolver_unresolved_weak The resolver functions are written in assembly because they have a restrictive calling convention. They're only allowed to modify x0 and (apparently) the condition codes. For a relocation to memory in static TLS (i.e. the executable or an solib loaded initially), the loader uses a simple resolver function, tlsdesc_resolver_static, that returns the static offset it receives from the loader. For relocations to dynamic TLS memory (i.e. memory in a dlopen'ed solib), the loader uses tlsdesc_resolver_dynamic, which allocates TLS memory on demand. It inlines the fast path of __tls_get_addr, then falls back to __tls_get_addr when it needs to allocate memory. The loader handles these dynamic TLS relocations in two passes: - In the first pass, it allocates a table of TlsDynamicResolverArg objects, one per dynamic TLSDESC relocation. - In the second pass, once the table is finalized, it writes the addresses of the TlsDynamicResolverArg objects into the TLSDESC relocations. tlsdesc_resolver_unresolved_weak returns a negated thread pointer so that taking the address of an unresolved weak TLS symbols produces NULL. The loader handles R_GENERIC_TLSDESC in a target-independent way, but only for arm64, because Bionic has only implemented the resolver functions for arm64. Bug: http://b/78026329 Test: bionic unit tests Test: check that backtrace works inside a resolver function and inside __tls_get_addr called from a resolver (gdbclient.py, b __tls_get_addr, bt) Merged-In: I752e59ff986292449892c449dad2546e6f0ff7b6 Change-Id: I752e59ff986292449892c449dad2546e6f0ff7b6
2019-01-25Implement TLS_DTPMOD and TLS_DTPREL relocationsRyan Prichard
Generalize the omitted symbol and missing-TLS-segment behaviors to all TLS relocations. R_GENERIC_TLS_DTPMOD is a module ID, which starts at 1 for the executable. R_GENERIC_TLS_DTPREL is an offset from the start of a module to a specific TLS symbol. binutils currently disagrees with Bionic about the values of R_AARCH64_TLS_DTPMOD64 and R_AARCH64_TLS_DTPREL64, so disable DTPMOD/DTPREL for now on arm64. Bug: http://b/78026329 Test: bionic unit tests (Tests for dynamic TLS will be added later) Change-Id: I05c28d6a1036bdd6127f605036679b7475689445
2019-01-25Ignore DT_TLSDESC_GOT / DT_TLSDESC_PLTRyan Prichard
These dynamic table entries are used for lazy relocation of TLSDESC relocations. Bionic relocates everything eagerly and can ignore these entries. Bug: http://b/78026329 Test: bionic unit tests Test: manual Change-Id: I788c4a95041fae66de2fbeab3babe0205631999c
2019-01-17Fix soinfo_tls::module dangling referenceRyan Prichard
The field was pointing into an element of an std::vector, but the address of a vector element is invalidated when the vector is resized. This bug was caught by the new elftls.shared_ie and elftls_dl.dlopen_shared_var_ie tests. Bug: http://b/78026329 Test: bionic unit tests Change-Id: I7232f6d703a9e339fe8966a95b7a68bae2c9c420
2019-01-17Merge changes Ia08e1b5c,I60e589dd,Ib7edb665,Ibf1bf5ec,Ibd623857Ryan Prichard
* changes: Handle R_GENERIC_TLS_TPREL relocations Avoid a dlopen abort on an invalid TLS alignment Initialize static TLS memory using module list Record TLS modules and layout static TLS memory StaticTlsLayout: add exe/tcb and solib layout
2019-01-17Handle R_GENERIC_TLS_TPREL relocationsRyan Prichard
This relocation is used for static TLS's initial-exec (IE) accesses. A TLS symbol's value is its offset from the start of the ELF module's TLS segment. It doesn't make sense to add the load_bias to this value, so skip the call to soinfo::resolve_symbol_address. Allow TLS relocations to refer to an unresolved weak symbol. In that case, sym will be non-zero, but lsi will be nullptr. The dynamic linker resolves the TPREL relocation to 0, making &missing_weak_symbol equal the thread pointer. Recognize Gold-style relocations to STB_LOCAL TLS symbols/sections and issue an error. Remove the "case R_AARCH64_TLS_TPREL64", because the R_GENERIC_TLS_TPREL case handles it. Remove the no-op R_AARCH64_TLSDESC handler. It's better to issue an error. dlopen_library_with_ELF_TLS now fails with a consistent error about an unimplemented dynamic TLS relocation. Bug: http://b/78026329 Test: bionic unit tests (elftls tests are added in a later CL) Change-Id: Ia08e1b5c8098117e12143d3b4ebb4dfaa5ca46ec
2019-01-16Avoid a dlopen abort on an invalid TLS alignmentRyan Prichard
If the alignment of a TLS segment in a shared object is invalid, return an error through dlerror() rather than aborting the process. Bug: http://b/78026329 Test: bionic unit tests Change-Id: I60e589ddd8ca897f485d55af089f08bd3ff5b1fa
2019-01-16Record TLS modules and layout static TLS memoryRyan Prichard
Bug: http://b/78026329 Test: bionic unit tests Change-Id: Ibf1bf5ec864c7830e4cd1cb882842b644e6182ae
2019-01-17Fix fd leak in android_dlopen_ext.Martin Stjernholm
It can happen e.g. if android_dlopen_ext is called with an absolute path to a file that is not accessible in the current namespace. The first load_library call in find_library_internal will then open the file and assign its fd to the task and return false. Then linked namespaces are searched, and load_library gets called again and opens the same file and overwrites the fd in the task without closing it first. (In one of the later calls the namespace config might very well allow the file to be loaded and the android_dlopen_ext call eventually returns successfully, and the process continues with the leaked fd.) The code could perhaps be changed to avoid opening the file repeatedly in these cases, but the LoadTask class should arguably keep its state clean anyway. Bug: 113373927 Test: Flash and boot device with (and without) http://r.android.com/812674, which moves libart.so to the runtime namespace and thus makes it load /system/framework/*/boot*.oat files across the namespace boundary from runtime to default. Change-Id: Iae91b7c743c5f3f973506153ba52898ae72e6fee
2018-12-11Fix performance-for-range-copy warningsChih-Hung Hsieh
Bug: 30413223 Test: make with WITH_TIDY=1 DEFAULT_GLOBAL_TIDY_CHECKS=-*,performance* Change-Id: I41cc70d161468c5586ca8be3185578e65681a9c5
2018-11-29Merge "linker: changes to init work arounds"Tom Cherry
2018-11-26Revert "Add Android Runtime APEX directories to Bionic search paths."Andreas Gampe
This reverts commit d2dd37936111937c3662c0dd697142b9cc059643. Reason for revert: Breaks vm-tests. Bug: 119949783 Bug: 113373927 Change-Id: I2b23285ba98422a23da653d7ea99d9034000f6d6
2018-11-20Add Android Runtime APEX directories to Bionic search paths.Roland Levillain
- Insert /apex/com.android.runtime/lib(64) before /system/lib(64) in the default library search paths (`kDefaultLdPaths`, `kAsanDefaultLdPaths`). - Insert apex/com.android.runtime/bin before /system/bin in the default shell search path (`_PATH_DEFPATH`). Test: Device boot test with Android Runtime APEX. Test: Device boot test without Android Runtime APEX. Bug: 113373927 Change-Id: I9ae6bfe6939f63e7d76e7b3c9b21d8b698bd8fda
2018-11-08linker: changes to init work aroundsTom Cherry
Change three things regarding the work around to the fact that init is special: 1) Only first stage init is special, so we change the check to include accessing /proc/self/exe, which if is available, means that we're not first stage init and do not need any work arounds. 2) Fix the fact that /init may be a symlink and may need readlink() 3) Suppress errors from realpath_fd() since these are expected to fail due to /proc not being mounted. Bug: 80395578 Test: sailfish boots without the audit generated from calling stat() on /init and without the errors from realpath_fd() Change-Id: I266f1486b142cb9a41ec791eba74122bdf38cf12
2018-11-06ART isn't using the ART-specific linker features any more.Elliott Hughes
Bug: N/A Test: ran tests Change-Id: Ide3c295035687019608a2c4716a4a21cb889d121
2018-10-31ld.config.txt for APEXJiyong Park
When executing an executable in an APEX (i.e., /apex/<name>/bin), ld.config.txt file is read from the same APEX, not from /system/etc. Bug: 115787633 Test: m apex.test; adb push ...apex.test.apex /data/apex; adb reboot Test: adb root; adb shell /apex/com.android.example.apex/bin/dex2oat is runnable. Change-Id: I6400251f99d24f2379dbaf655ecd84da02490617
2018-10-24linker: Fix fd leakVic Yang
Close the file descriptor before throwing it away. Test: mmma bionic Change-Id: I1690c1bb8b619f82070503151b1de73302882310
2018-10-22Workaround host bionic libs that are missing DT_RUNPATHDan Willemsen
We don't have a host bionic version of libclang_rt.asan-x86_64-android.so, so I'm using the android version, which can't load liblog.so, since it's missing DT_RUNPATH that would normally load liblog.so from a relative path to the .so. Bug: 118058804 Test: run ASAN host_bionic Change-Id: I58badcd5ed35bd1c7b786b4f1e2367a1011ff08d
2018-10-10Allow invoking the linker on an executable.Ryan Prichard
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-08linker: fix invalid zip file handlingRyan Prichard
The argument to CloseArchive has type ZipArchiveHandle, but we're passing it a ZipArchiveHandle*. The compiler doesn't detect the type mismatch because ZipArchiveHandle is a typedef for void*. Remove a duplicate close() call: The fourth argument to OpenArchiveFd is "bool assume_ownership = true". Even if the function fails, ownership of the fd is still transferred to a ZipArchive object that's deleted when this code calls CloseArchive. AFAIK, this code path is rarely or never hit. Bug: none Test: manual (eventually, 'linker64 /system!/foo') Change-Id: I95d79809b6e118fb3c39c7b98b8055c8e324db1a
2018-08-03Remove old workaround for unloading unversioned soinfoRyan Prichard
This code path is/was a workaround for poorly-behaved apps. AFAIK it isn't needed anymore. The (needed != nullptr) condition should have been (needed == nullptr), so rather than unload a library, it tends to do nothing instead. If it can't find the library, it would segfault. Bug: http://b/112154263 Test: /data/nativetest/bionic-unit-tests/bionic-unit-tests Test: /data/nativetest/linker-unit-tests/linker-unit-tests32 Test: apply patch to pi-dev, verify that apps from b/72143978 still work Change-Id: Ic598cb3dcead9f88005764a9b8746ed6b35f5f38
2018-08-02Modernize codebase by replacing NULL with nullptrYi Kong
Fixes -Wzero-as-null-pointer-constant warning. Test: m Bug: 68236239 Change-Id: I5b4123bc6709641315120a191e36cc57541349b2
2018-07-30Fix arm32/64 dynamic TLS relocationsRyan Prichard
arm32: Add a relocation for TLS descriptors (e.g. gcc's -mtls-dialect=gnu2). arm64: Add all the dynamic TLS relocations. Two of the relocations here are obsolete: - ARM documents R_ARM_SWI24 as an obsolete static relocation without saying what it did. It's been replaced by R_ARM_TLS_DESC, a dynamic relocation. We could probably remove it, but I left it because arm32 is old, and I see the macro in other libc's. It's probably analogous to R_ARM_THM_SWI8, which is also an obsolete relocation reserved for a future dynamic relocation. - I couldn't find any ARM documentation at all for R_AARCH64_TLS_DTPREL32. It seems to have been part of three relocations: - R_AARCH64_TLS_DTPREL32 1031 - R_AARCH64_TLS_DTPMOD32 1032 - R_AARCH64_TLS_TPREL32 1033 Bug: b/78026329 Test: run bionic unit tests Change-Id: I5e7432f6e3e906152dc489be5e812fd8defcbafd
2018-06-08dynamic linker is running for initJiyong Park
init is now built as a dynamic executable, so the dynamic linker has to be able to run in the init process. However, since init is launched so early, even /dev/* and /proc/* file systems are not mounted and thus some APIs that rely on the paths do not work. The dynamic linker now goes alternative path when it is running in the init process. For example, /proc/self/exe is not read for the init since we always now the path of the init (/init). Also, arc4random* APIs are not used since the APIs rely on /dev/urandom. Linker now does not randomize library loading order and addresses when running in the init process. Bug: 80454183 Test: `adb reboot recovery; adb devices` shows the device ID Change-Id: I29b6d70e4df5f7f690876126d5fe81258c1d3115
2018-05-30Merge "Add secondary counter in place of tls_nodelete flag"Dimitry Ivanov
2018-05-30Add secondary counter in place of tls_nodelete flagdimitry
The tls_nodelete state should apply to load_group not isolated soinfo. This actually also means that multiple soinfos may have tls_counter on their dso_handles. This change replaces TLS_NODELETE flag with secondary counter. Note that access to the secondary counter (located inside soinfo) is pretty expensive because it requires soinfo lookup by dso_handle whereas dso_handle counter is much faster. This is why it is updated only when dso_handle counter starts or hits 0. Bug: http://b/80278285 Test: bionic-unit-tests --gtest_filter=dl* Change-Id: I535583f6714e45fa2a7eaf7bb3126da20ee7cba9
2018-05-25Remove libskia.so from the greylistdimitry
The library is no longer available on the devices. Bug: http://b/31971097 Test: make Change-Id: Ie87bb8a8c200d086d272ca923242bfbab6397126
2018-05-17Use ro.vndk.lite to determine the ld.config.txtLogan Chien
This commit adds an extra check on `ro.vndk.lite`. If `ro.vndk.lite` is true, the linker will pick `/system/etc/ld.config.vndk_lite.txt`. The purpose of this change is to distinguish: 1. Master-GSI + Master-VENDOR (w/o BOARD_VNDK_VERSION for upgrading devices) 2. Master-GSI + O-MR1-VENDOR (w/ BOARD_VNDK_VERSION) Bug: 78605339 Test: aosp_sailfish Master-SYSTEM + Master-VENDOR boots Test: aosp_sailfish Master-GSI + Master-VENDOR boots Test: aosp_walleye Master-SYSTEM + Master-VENDOR boots Test: aosp_walleye Master-GSI + Master-VENDOR boots Test: aosp_walleye Master-GSI + O-MR1-VENDOR boots Change-Id: I34f243f73c173ca2e882d3738ccb81e3fad3a9da Merged-In: I34f243f73c173ca2e882d3738ccb81e3fad3a9da (cherry picked from commit dd18472e56340e87a421546f2b3660d1d1ad09e2)
2018-05-17Extract ld.config.txt lookup codeLogan Chien
This commit extracts ld.config.txt lookup code into `get_ld_config_file_path()`. Bug: 78605339 Test: aosp_walleye-userdebug builds and boots Change-Id: I129f19cd032de02a56bda57231521c02a4b4e4c0 Merged-In: I129f19cd032de02a56bda57231521c02a4b4e4c0 (cherry picked from commit 21e496cf2916d8361f378ed96357bf806b0f198c)
2018-05-12vdso should be available in all namespacesdimitry
vdso should be available in all namespaces when present. This bug went undetected because the way libc currently uses vdso (it does all the lookups itself). This makes it available for the programs that want to take advantage by dlopening it. Bug: http://b/73105445 Bug: http://b/79561555 Test: adb shell /data/nativetest/arm/bionic-unit-tests/bionic-unit-tests --gtest_filter=dl.exec_with_ld_config_file Test: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests --gtest_filter=dl* Change-Id: I8eae0c9848f256190d1c9ec85d10dc6ce383a8bc (cherry picked from commit 69c68c46ac18a440bf1c0447d8343a6dbad595f1)
2018-05-09Remove obsolete workaround.Elliott Hughes
We removed the cast in question in d390df1dbc038843889946555c3ea53548dcab5d. Bug: N/A Test: builds Change-Id: I56a034432fd11aeca00c09cb11226bdae465366f
2018-03-23Reject .so files using ELF TLS.Elliott Hughes
Bug: http://b/74361956 Test: ran tests Change-Id: I53e71252eb08c607c2c436dcba433374c8c53887
2018-02-28Be clearer about linker warnings.Elliott Hughes
Explicitly say "warning" for warnings, explicitly say what action we're going to take (such as "(ignoring)"), always provide a link to our documentation when there is one, explicitly say what API level the behavior changes at, and explicitly say why we're allowing the misbehavior for now. Bug: http://b/71852862 Test: ran tests, looked at logcat Change-Id: I1795a5af45deb904332b866d7d666690dae4340b
2018-02-20Fix RTLD_NEXT/DEFAULT lookupdimitry
RTLD_NEXT/DEFAULT lookup should not skip handle lookup in the case when the load group is RTLD_GLOBAL. Note that there is a difference between load group is local group. The local group includes externally referenced libraries where the load group does not. The external reference in this context is a DT_NEEDED library that belongs to a previously loaded group. Bug: http://b/72237367 Test: bionic-unit-tests --gtest_filter=dl* Change-Id: I8997cc961c13a5396f1756161798b45ed1cab16c
2018-01-27Merge "linker: simpler encoding for SHT_RELR sections."Treehugger Robot
2018-01-26linker: simpler encoding for SHT_RELR sections.Rahul Chaudhry
This change modifies the encoding used in SHT_RELR sections to a simpler version that gives better results. This encoding was suggested by Andrew Grieve and is described in this post on generic-abi@googlegroups.com: https://groups.google.com/d/msg/generic-abi/bX460iggiKg/Pi9aSwwABgAJ Bug: None Test: Built image for marlin, flashed on device, ran arm and aarch64 binaries containing '.relr.dyn' sections using the new encoding. Change-Id: I266affe0fbad91dc375995985a221cb02499447b
2018-01-25linker: Allow link namespaces without name filtersLogan Chien
This commit allows users to create a link without soname filters between two linker namespaces. The motivation is to establish one-way shared library isolation. For example, assume that there are two linker namespaces `default` and `vndk`. We would like to limit the shared libraries that can be used by the `default` namespace. In the meanwhile, we would like to allow the `vndk` namespace to use shared libs from the `default` namespace if the soname cannot be find in the search path or loaded sonames of the `vndk` namespace. shared_libs = %VNDK_CORE_LIBRARIES% shared_libs += %VNDK_SAMEPROCESS_LIBRARIES% vndk <-------------------------------------------- default \_______________________________________________/^ allow_all_shared_libs = true android_link_namespaces_all_libs() is added to libdl, but it is versioned as LIBC_PRIVATE. android_link_namespaces_all_libs() is only for unit tests. Bug: 69824336 Test: adb shell /data/nativetest/linker-unit-tests/linker-unit-tests32 Test: adb shell /data/nativetest64/linker-unit-tests/linker-unit-tests64 Test: adb shell /data/nativetest/bionic-unit-tests/bionic-unit-tests Test: adb shell /data/nativetest64/bionic-unit-tests/bionic-unit-tests Test: Update /system/etc/ld.config*.txt and check whether the vndk linker namespace of the vendor process can access the shared libs from the default linker namespace. Change-Id: I2879f0c5f5af60c7e56f8f743ebd2872e552286b
2018-01-23Merge "linker: add experimental support for SHT_RELR sections."Elliott Hughes
2018-01-22linker: add experimental support for SHT_RELR sections.Rahul Chaudhry
This change adds experimental support for SHT_RELR sections, proposed here: https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg Definitions for the new ELF section type and dynamic array tags, as well as the encoding used in the new section are all under discussion and are subject to change. Use with caution! Bug: None Test: Built image for marlin, flashed on device, ran arm and aarch64 binaries containing '.relr.dyn' sections. Change-Id: I2953ae932d3c42ae394e71f8fa058013758a1778
2018-01-19Address a bunch of clang-tidy complaints.Elliott Hughes
There were a bunch more unreasonable/incorrect ones, but these ones seemed legit. Nothing very interesting, though. Bug: N/A Test: ran tests, benchmarks Change-Id: If66971194d4a7b4bf6d0251bedb88e8cdc88a76f
2018-01-10Fix dlclose for libraries with thread_local dtorsdimitry
Introduce new flag to mark soinfo as TLS_NODELETE when there are thread_local dtors associated with dso_handle belonging to it. Test: bionic-unit-tests --gtest_filter=dl* Test: bionic-unit-tests-glibc --gtest_filter=dl* Bug: https://github.com/android-ndk/ndk/issues/360 Change-Id: I724ef89fc899788f95c47e6372c38b3313f18fed
2017-12-10Fix logic in loading dependencies crossing namespace boundariesdimitry
This change addresses multiple problems introduced by 02586a2a34e6acfccf359b94db840f422b6c0231 1. In the case of unsuccessful dlopen the failure guard is triggered for two namespaces which leads to double unload. 2. In the case where load_tasks includes libraries from 3 and more namespaces it results in incorrect linking of libraries shared between second and third/forth and so on namespaces. The root cause of these problems was recursive call to find_libraries. It does not do what it is expected to do. It does not form new load_tasks list and immediately jumps to linking local_group. Not only this skips reference counting it also will include unlinked but accessible library from third (and fourth and fifth) namespaces in invalid local group. The best case scenario here is that for 3 or more namesapces this will fail to link. The worse case scenario it will link the library incorrectly with will lead to very hard to catch bugs. This change removes recursive call and replaces it with explicit list of local_groups which should be linked. It also revisits the way we do reference counting - with this change the reference counts are updated after after libraries are successfully loaded. Also update soinfo_free to abort in case when linker tries to free same soinfo for the second time - this makes linker behavior less undefined. Test: bionic-unit-tests Bug: http://b/69787209 Change-Id: Iea25ced181a98c6503cce6e2b832c91d697342d5
2017-12-06Merge "linker: add support for odm partition"Alin Jerpelea
am: 7b5073767d Change-Id: I0c1356f53cd33e0cd6a78f0798fed8b395893859
2017-12-06Merge "linker: add support for odm partition"Treehugger Robot
2017-12-03Merge "Use ld.config.$VER.txt when current VNDK version is $VER"Justin Yun
am: 86a3803799 Change-Id: I350a75a183717e3cd0a68d3a9ed524f19f077a2f
2017-12-03Use ld.config.$VER.txt when current VNDK version is $VERJustin Yun
When ro.vndk.version is set to a specific version, not "current", use ld.config.$VER.txt as a linker namespace configuration file, where $VER is the VNDK version set by ro.vndk.version. Because ro.vndk.version is set by the vendor partition, the configuration file will be automatically selected by the VNDK version of vendor patition. If ro.vndk.version is current or not set, ld.config.txt will be used as before. Bug: 69531793 Test: Build for a Pixel2 device. In the out/target/product/<device> directory, rename system/etc/ld.config.txt to system/etc/ld.config.27.1.0.txt rename system/lib[64]/vndk to system/lib[64]/vndk-27.1.0 copy system/lib[64]/vndk-sp to system/lib[64]/vndk-sp-27.1.0 set ro.vndk.version to 27.1.0 in vendor/default.prop Build system and vendor images with "make snod" and "make vnod". Disble vbmeta using avbtool. Flash a device and check boot. Change-Id: Ic55bb0a741d434e5fa93e109be15df9d9de3f105
2017-12-01linker: add support for odm partitionAlin Jerpelea
If libraries are on the odm partition they will fail to load This patch adds the odm path as a search path for linker. Test: libraries load from the odm partition Change-Id: Ia7786e047cc565d74d25c025dacf9266b3763650 Signed-off-by: Alin Jerpelea <alin.jerpelea@son.com>
2017-11-29Merge "Revert "Fix bug with double unload on unsuccessful dlopen""Elliott Hughes
am: 4eb332439a Change-Id: I21ba611931b2e5794ef49cae9bcafc8748ebe804