aosp12/system/linkerconfig
hcl 7be3fd486c init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
..
contents init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
generator init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
modules init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
testdata init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
testmodules init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
.clang-format init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
.gitignore init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
Android.bp init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
OWNERS init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
PREUPLOAD.cfg init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
README.md init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
TEST_MAPPING init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
linkerconfig_diff_test.xml init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
main.cc init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00
rundiff.sh init from android-12.1.0_r8 2023-01-09 17:11:35 +08:00

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.

  • 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.
    • if tag is jni, library_list is the list of JNI libraries exposed by apex_namespace.
    • if 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.