commit | 0ec936efea41d37128daf31d274b28485d57ce33 | [log] [tgz] |
---|---|---|
author | Tarun Agarwal <tarunagar@meta.com> | Tue Sep 26 15:02:40 2023 -0700 |
committer | Kiyoung Kim <kiyoungkim@google.com> | Thu Oct 05 16:09:17 2023 +0900 |
tree | 42aeabca600de4f326f48435fc4999076e58fcd4 | |
parent | ed4a42403bd5285bad520741d84e4c6c56ecb5f1 [diff] |
fix handling of SP Hal libs in virtual odm partion LinkerConfig checks for SP Hal libs in sphal namespace search and permitted path locations. This works fine for cases until the SP Hal lib is located in a virutal ODM partition (/vendor/odm/lib{64}) In this case the paths /odm/lib* are softlinks into /vendor dir. The softlinks (/odm/lib*) are processed with libc realpath(), which gives back canonicalized abs path, which here becomes /vendor/odm/lib*, and are currently not part of the LinkerConfig's SP Hal namespace's permitted paths list. Resulting in failure to load SP Hal libs from virtual ODM partitions. This diff provides a fix for above situation, and adds /vendor/odm/lib{64} to sphal permitted paths list, to handle above mentioned cases properly. Test: backward_compatibility CTS test and golden_output data are updated using rundiff.sh. Following 5 CTS tests fully pass: atest linkerconfig_modules_unittest atest linkerconfig_backward_compatibility_test atest linkerconfig_generator_unittest atest linkerconfig_contents_fulltest atest linkerconfig_diff_test Change-Id: I5022bbdc2664f93e04568d17e0549aaf82c251cc
Linkerconfig is a program to generate linker configuration based on the runtime environment. Linkerconfig generates one or more ld.config.txt files and some other files under /linkerconfig during init. Linker will read this generated configuration file(s) to find out link relationship between libraries and executable.
TODO: explain inputs (e.g. /system/etc/public.libraries.txt, /apex/apex-info-list.xml, ..)
Linker configuration file can be used to add extra information while linkerconfig creates linker configuration with the module. This module can be defined as linker_config
from Soong, and it will be translated as protobuf file at build time.
A linker configuration file(linker.config.json) is compiled into a protobuf at build time by conv_linker_config
. You can find the compiled file under <base>/etc/linker.config.pb
. For example, /apex/com.android.art/etc/linker.config.pb
is a configuration for the com.android.art
APEX.
/system/etc/linker.config.pb
(or its source module system_linker_config
) is special because its provideLibs
key is generated at build time.
linker.config.json file is in json format which can contain properties as below.
Property Name | Type | Description | Allowed module |
---|---|---|---|
permittedPaths | List | Additional permitted paths | APEX |
visible | bool | Force APEX namespace to be visible from all sections if the value is true | APEX |
provideLibs | List | Libraries providing from the module | System |
requireLibs | List | Libraries required from the module | System |
{ "permittedPaths" : [ "/a", "/b/c", "/d/e/f"], "visible": true }
{ "provideLibs" : [ "a.so", "b.so", "c.so" ], "requireLibs" : [ "foo.so", "bar.so", "baz.so" ] }
TODO: a few words about the files
Check ld.config.format.md.
The file describes libraries exposed from APEXes. libnativeloader is the main consumer of this file.
# comment line jni com_android_foo libfoo_jni.so public com_android_bar libbar.so:libbaz.so
The file is line-based and each line consists of tag apex_namespace library_list
.
tag
explains what library_list
is.apex_namespace
is the namespace of the apex. Note that it is mangled like com_android_foo
for the APEX(“com.android.foo”).library_list
is colon-separated list of library names.tag
is jni
, library_list
is the list of JNI libraries exposed by apex_namespace
.tag
is public
, library_list
is the list of public libraries exposed by apex_namespace
. Here, public libraries are the libs listed in /system/etc/public.libraries.txt.