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_ |