Stay organized with collections
Save and categorize content based on your preferences.
Dynamic Linker
#include <dlext.h>
Summary
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
.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2024-10-01 UTC.
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"Missing the information I need"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"Too complicated / too many steps"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"Out of date"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"Samples / code issue"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"Other"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"Easy to understand"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"Solved my problem"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"Other"
}]
{"lastModified": "Last updated 2024-10-01 UTC."}
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-01 UTC."]]