/* * Copyright (C) 2014 The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef __ANDROID_DLEXT_H__ #define __ANDROID_DLEXT_H__ #include #include __BEGIN_DECLS /* bitfield definitions for android_dlextinfo.flags */ enum { /* 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, the load * will fail. */ ANDROID_DLEXT_RESERVED_ADDRESS = 0x1, /* As DLEXT_RESERVED_ADDRESS, but if the reserved region is not large enough, * the linker will choose an available address instead. */ ANDROID_DLEXT_RESERVED_ADDRESS_HINT = 0x2, /* 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. */ ANDROID_DLEXT_WRITE_RELRO = 0x4, /* 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. */ ANDROID_DLEXT_USE_RELRO = 0x8, /* Instruct dlopen to use library_fd instead of opening file by name. * The filename parameter is still used to identify the library. */ ANDROID_DLEXT_USE_LIBRARY_FD = 0x10, /* Mask of valid bits */ 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, }; typedef struct { uint64_t flags; void* reserved_addr; size_t reserved_size; int relro_fd; int library_fd; } android_dlextinfo; extern void* android_dlopen_ext(const char* filename, int flag, const android_dlextinfo* extinfo); __END_DECLS #endif /* __ANDROID_DLEXT_H__ */