Roll src/third_party/WebKit d9c6159:8139f33 (svn 201974:201975)
[chromium-blink-merge.git] / base / android / linker / android_dlext.h
blobedf5180c20a0028e5d9aaba92d07ce472d2105ea
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Definitions for android_dlopen_ext().
6 //
7 // This function was added for Android L-MR1 and made available in android-21
8 // but we currently build Chromium with android-16. Placing the declarations
9 // we need here allows code that uses android_dlopen_ext() to build with
10 // android-16. At runtime we check the target's SDK_INT to ensure that we
11 // are on a system new enough to offer this function, and also only access
12 // it with dlsym so that the runtime linker on pre-Android L-MR1 targets will
13 // not complain about a missing symbol when loading our library.
15 // Details below taken from:
16 // third_party/android_tools/ndk/platforms/android-21
17 // /arch-arm/usr/include/android/dlext.h
19 // Although taken specifically from arch-arm, there are no architecture-
20 // specific elements in dlext.h. All android-21/arch-* directories contain
21 // identical copies of dlext.h.
23 #ifndef BASE_ANDROID_LINKER_ANDROID_DLEXT_H_
24 #define BASE_ANDROID_LINKER_ANDROID_DLEXT_H_
26 #include <stddef.h>
27 #include <stdint.h>
29 /* bitfield definitions for android_dlextinfo.flags */
30 enum {
31 /* When set, the reserved_addr and reserved_size fields must point to an
32 * already-reserved region of address space which will be used to load the
33 * library if it fits. If the reserved region is not large enough, the load
34 * will fail.
36 ANDROID_DLEXT_RESERVED_ADDRESS = 0x1,
38 /* As DLEXT_RESERVED_ADDRESS, but if the reserved region is not large enough,
39 * the linker will choose an available address instead.
41 ANDROID_DLEXT_RESERVED_ADDRESS_HINT = 0x2,
43 /* When set, write the GNU RELRO section of the mapped library to relro_fd
44 * after relocation has been performed, to allow it to be reused by another
45 * process loading the same library at the same address. This implies
46 * ANDROID_DLEXT_USE_RELRO.
48 ANDROID_DLEXT_WRITE_RELRO = 0x4,
50 /* When set, compare the GNU RELRO section of the mapped library to relro_fd
51 * after relocation has been performed, and replace any relocated pages that
52 * are identical with a version mapped from the file.
54 ANDROID_DLEXT_USE_RELRO = 0x8,
56 /* Instruct dlopen to use library_fd instead of opening file by name.
57 * The filename parameter is still used to identify the library.
59 ANDROID_DLEXT_USE_LIBRARY_FD = 0x10,
61 /* Mask of valid bits */
62 ANDROID_DLEXT_VALID_FLAG_BITS = ANDROID_DLEXT_RESERVED_ADDRESS |
63 ANDROID_DLEXT_RESERVED_ADDRESS_HINT |
64 ANDROID_DLEXT_WRITE_RELRO |
65 ANDROID_DLEXT_USE_RELRO |
66 ANDROID_DLEXT_USE_LIBRARY_FD,
69 typedef struct {
70 uint64_t flags;
71 void* reserved_addr;
72 size_t reserved_size;
73 int relro_fd;
74 int library_fd;
75 } android_dlextinfo;
77 #endif // BASE_ANDROID_LINKER_ANDROID_DLEXT_H_