| Index: android/linker/android_dlext.h
|
| diff --git a/android/linker/android_dlext.h b/android/linker/android_dlext.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4900f21c60dbbb19f4f15b992d36d27412130818
|
| --- /dev/null
|
| +++ b/android/linker/android_dlext.h
|
| @@ -0,0 +1,77 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Definitions for android_dlopen_ext().
|
| +//
|
| +// This function was added for Android L-MR1 and made available in android-21
|
| +// but we currently build Chromium with android-16. Placing the declarations
|
| +// we need here allows code that uses android_dlopen_ext() to build with
|
| +// android-16. At runtime we check the target's SDK_INT to ensure that we
|
| +// are on a system new enough to offer this function, and also only access
|
| +// it with dlsym so that the runtime linker on pre-Android L-MR1 targets will
|
| +// not complain about a missing symbol when loading our library.
|
| +//
|
| +// Details below taken from:
|
| +// third_party/android_tools/ndk/platforms/android-21
|
| +// /arch-arm/usr/include/android/dlext.h
|
| +//
|
| +// Although taken specifically from arch-arm, there are no architecture-
|
| +// specific elements in dlext.h. All android-21/arch-* directories contain
|
| +// identical copies of dlext.h.
|
| +
|
| +#ifndef BASE_ANDROID_LINKER_ANDROID_DLEXT_H_
|
| +#define BASE_ANDROID_LINKER_ANDROID_DLEXT_H_
|
| +
|
| +#include <stddef.h>
|
| +#include <stdint.h>
|
| +
|
| +/* 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;
|
| +
|
| +#endif // BASE_ANDROID_LINKER_ANDROID_DLEXT_H_
|
|
|