|
|
||
|---|---|---|
| .. | ||
| contents | ||
| generator | ||
| modules | ||
| testdata | ||
| testmodules | ||
| .clang-format | ||
| .gitignore | ||
| Android.bp | ||
| OWNERS | ||
| PREUPLOAD.cfg | ||
| README.md | ||
| TEST_MAPPING | ||
| linkerconfig_diff_test.xml | ||
| main.cc | ||
| rundiff.sh | ||
README.md
LinkerConfig
Introduction
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.
Inputs
TODO: explain inputs (e.g. /system/etc/public.libraries.txt, /apex/apex-info-list.xml, ..)
linker.config.json
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.
Format
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 |
Example
APEX module
{
"permittedPaths" : [ "/a", "/b/c", "/d/e/f"],
"visible": true
}
System
{
"provideLibs" : [ "a.so", "b.so", "c.so" ],
"requireLibs" : [ "foo.so", "bar.so", "baz.so" ]
}
Outputs
/linkerconfig/ld.config.txt & /linkerconfig/*/ld.config.txt
TODO: a few words about the files
Check ld.config.format.md.
/linkerconfig/apex.libraries.txt
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.
tagexplains whatlibrary_listis.apex_namespaceis the namespace of the apex. Note that it is mangled likecom_android_foofor the APEX("com.android.foo").library_listis colon-separated list of library names.- if
tagisjni,library_listis the list of JNI libraries exposed byapex_namespace. - if
tagispublic,library_listis the list of public libraries exposed byapex_namespace. Here, public libraries are the libs listed in/system/etc/public.libraries.txt.
- if