| commit | 0e5ff0b97f7c75790db6e752b2ed2ed4d6b03eab | [log] [tgz] |
|---|---|---|
| author | Martin Stjernholm <mast@google.com> | Fri Jun 11 14:18:31 2021 +0100 |
| committer | Martin Stjernholm <mast@google.com> | Thu Jun 17 16:31:10 2021 +0100 |
| tree | 6a1024d5b708af16b875ea78c11664c62a4c18b8 | |
| parent | 8e4d95768e32a150f02e0d76e0cffcf16aa5fb97 [diff] |
Use the same set of permitted paths for the "system" namespace for
APEXes.
E.g. /apex/com.android.art/bin/dalvikvm{32,64} relies on permitted
paths in it to load oat and odex files in the system/product/vendor
images.
Cherry-picked from https://r.android.com/1734696.
Test: adb logcat -c
atest art-run-test-615-checker-arm64-store-zero
adb logcat -d
Check that no "E linker" lines are logged.
Test: system/linkerconfig/rundiff.sh
Bug: 190807485
Change-Id: I2feb9deb86c9a6aefe9612d4bda8f5c8700d9864
Merged-In: I2feb9deb86c9a6aefe9612d4bda8f5c8700d9864
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.