From 0fc6d0c8dfbb6e4226fd79c622b701a62c901f14 Mon Sep 17 00:00:00 2001 From: Thomas Zimmermann Date: Wed, 3 Aug 2016 15:28:43 +0100 Subject: [PATCH] Don't define |r_debug| and |link_map| on Android releases 21 and later NDKs for Android 21 and later have the data structures |r_debug| and |link_map| defined in their header files. Defining them multiple times generates a compiler error. This patch protects both data structures from definition on Android 21 and later. BUG=629088 R=rmcilroy@chromium.org Review URL: https://codereview.chromium.org/2156173002 . Patch from Thomas Zimmermann . Committed: https://chromium.googlesource.com/breakpad/breakpad/+/0ebdc4a10a506e2a4a3a039c479b40219a84b760 --- src/common/android/include/link.h | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/common/android/include/link.h b/src/common/android/include/link.h index e7ff8e2d..75e3bb2c 100644 --- a/src/common/android/include/link.h +++ b/src/common/android/include/link.h @@ -30,15 +30,30 @@ #ifndef GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H #define GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H -/* Android doesn't provide all the data-structures required in its . - Provide custom version here. */ -#include_next - // TODO(rmcilroy): Remove this file once the ndk is updated for other // architectures - crbug.com/358831 + +// Android doesn't provide all the data-structures required in +// its before release 21. Provide custom version here and +// rename Bionic-provided structures to avoid conflicts. + #if !defined(__aarch64__) && !defined(__x86_64__) && \ !(defined(__mips__) && _MIPS_SIM == _ABI64) +#define r_debug __bionic_r_debug +#define link_map __bionic_link_map + +#endif // !defined(__aarch64__) && !defined(__x86_64__) && \ + !(defined(__mips__) && _MIPS_SIM == _ABI64) + +#include_next + +#if !defined(__aarch64__) && !defined(__x86_64__) && \ + !(defined(__mips__) && _MIPS_SIM == _ABI64) + +#undef r_debug +#undef link_map + #ifdef __cplusplus extern "C" { #endif // __cplusplus @@ -66,6 +81,7 @@ struct link_map { } // extern "C" #endif // __cplusplus -#endif // !defined(__aarch64__) && !defined(__x86_64__) +#endif // !defined(__aarch64__) && !defined(__x86_64__) && \ + !(defined(__mips__) && _MIPS_SIM == _ABI64) #endif /* GOOGLE_BREAKPAD_ANDROID_INCLUDE_LINK_H */