Dynamic Linker

#include <dlext.h>

Summary

Enumerations

Anonymous Enum 25{
  ANDROID_DLEXT_RESERVED_ADDRESS = 0x1,
  ANDROID_DLEXT_RESERVED_ADDRESS_HINT = 0x2,
  ANDROID_DLEXT_WRITE_RELRO = 0x4,
  ANDROID_DLEXT_USE_RELRO = 0x8,
  ANDROID_DLEXT_USE_LIBRARY_FD = 0x10,
  ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET = 0x20,
  ANDROID_DLEXT_FORCE_LOAD = 0x40,
  ANDROID_DLEXT_USE_NAMESPACE = 0x200,
  ANDROID_DLEXT_RESERVED_ADDRESS_RECURSIVE = 0x400,
  ANDROID_DLEXT_VALID_FLAG_BITS = ANDROID_DLEXT_RESERVED_ADDRESS | ANDROID_DLEXT_RESERVED_ADDRESS_HINT | ANDROID_DLEXT_WRITE_RELRO | ANDROID_DLEXT_USE_RELRO | ANDROID_DLEXT_USE_LIBRARY_FD | ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET | ANDROID_DLEXT_FORCE_LOAD | ANDROID_DLEXT_USE_NAMESPACE | ANDROID_DLEXT_RESERVED_ADDRESS_RECURSIVE
}
enum
Bitfield definitions for android_dlextinfo::flags.

Functions

android_dlopen_ext(const char *_Nullable __filename, int __flags, const android_dlextinfo *_Nullable __info)
void *_Nullable
Opens the given library.

Structs

android_dlextinfo

Used to pass Android-specific arguments to android_dlopen_ext().

Enumerations

Anonymous Enum 25

 Anonymous Enum 25

Bitfield definitions for android_dlextinfo::flags.

Properties
ANDROID_DLEXT_FORCE_LOAD

When set, do not use stat(2) to check if the library has already been loaded.

This flag allows forced loading of the library in the case when for some reason multiple ELF files share the same filename (because the already-loaded library has been removed and overwritten, for example).

Note that if the library has the same DT_SONAME as an old one and some other library has the soname in its DT_NEEDED list, the first one will be used to resolve any dependencies.

ANDROID_DLEXT_RESERVED_ADDRESS

When set, the reserved_addr and reserved_size fields must point to an already-reserved region of address space which will be used to load the library if it fits.

If the reserved region is not large enough, loading will fail.

ANDROID_DLEXT_RESERVED_ADDRESS_HINT

Like ANDROID_DLEXT_RESERVED_ADDRESS, but if the reserved region is not large enough, the linker will choose an available address instead.

ANDROID_DLEXT_RESERVED_ADDRESS_RECURSIVE

Instructs dlopen() to apply ANDROID_DLEXT_RESERVED_ADDRESS, ANDROID_DLEXT_RESERVED_ADDRESS_HINT, ANDROID_DLEXT_WRITE_RELRO and ANDROID_DLEXT_USE_RELRO to any libraries loaded as dependencies of the main library as well.

This means that if the main library depends on one or more not-already-loaded libraries, they will be loaded consecutively into the region starting at reserved_addr, and reserved_size must be large enough to contain all of the libraries. The libraries will be loaded in the deterministic order constructed from the DT_NEEDED entries, rather than the more secure random order used by default.

Each library's GNU RELRO sections will be written out to relro_fd in the same order they were loaded. This will mean that the resulting file is dependent on which of the libraries were already loaded, as only the newly loaded libraries will be included, not any already-loaded dependencies. The caller should ensure that the set of libraries newly loaded is consistent for this to be effective.

This is mainly useful for the system WebView implementation.

ANDROID_DLEXT_USE_LIBRARY_FD

Use library_fd instead of opening the file by name.

The filename parameter is still used to identify the library.

ANDROID_DLEXT_USE_LIBRARY_FD_OFFSET

If opening a library using library_fd read it starting at library_fd_offset.

This is mainly useful for loading a library stored within another file (such as uncompressed inside a ZIP archive). This flag is only valid when ANDROID_DLEXT_USE_LIBRARY_FD is set.

ANDROID_DLEXT_USE_NAMESPACE

This flag used to load library in a different namespace.

The namespace is specified in library_namespace.

This flag is for internal use only (since there is no NDK API for namespaces).

ANDROID_DLEXT_USE_RELRO

When set, compare the GNU RELRO section of the mapped library to relro_fd after relocation has been performed, and replace any relocated pages that are identical with a version mapped from the file.

This is mainly useful for the system WebView implementation.

ANDROID_DLEXT_VALID_FLAG_BITS

Mask of valid bits.

ANDROID_DLEXT_WRITE_RELRO

When set, write the GNU RELRO section of the mapped library to relro_fd after relocation has been performed, to allow it to be reused by another process loading the same library at the same address.

This implies ANDROID_DLEXT_USE_RELRO.

This is mainly useful for the system WebView implementation.

Functions

android_dlopen_ext

void *_Nullable android_dlopen_ext(
  const char *_Nullable __filename,
  int __flags,
  const android_dlextinfo *_Nullable __info
)

Opens the given library.

The __filename and __flags arguments are the same as for dlopen(3), with the Android-specific flags supplied via the flags member of __info.