]> granicus.if.org Git - gc/commitdiff
Workaround 'ELF_DATA/EM_ALPHA redefined' warning in Android link.h
authorIvan Maidanski <ivmai@mail.ru>
Mon, 11 Nov 2013 18:32:18 +0000 (22:32 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 11 Nov 2013 18:32:18 +0000 (22:32 +0400)
(revert part of commit a6e4ee9)

* dyn_load.c: Include asm/elf.h and linux/elf-em.h explicitly, and
undefine ELF_DATA and EM_ALPHA (if PLATFORM_ANDROID and
BIONIC_ELFDATA_REDEF_BUG are defined) to avoid "macro redefined"
warnings reported for link.h of Android Bionic.

dyn_load.c

index 866d73f6ff2b3dfd58ac1067e12568b5eda8f2d6..2c866cd2e7cd6d52e86e96365371d29fff9b7ca3 100644 (file)
@@ -96,27 +96,40 @@ STATIC GC_has_static_roots_func GC_has_static_roots = 0;
     /* Exclude Android because linker.h below includes its own version. */
 #   include <elf.h>
 # endif
-# include <link.h>
-# if defined(PLATFORM_ANDROID) && !defined(GC_DONT_DEFINE_LINK_MAP)
+# ifdef PLATFORM_ANDROID
     /* If you don't need the "dynamic loading" feature, you may build   */
     /* the collector with -D IGNORE_DYNAMIC_LOADING.                    */
-    /* Otherwise, link_map and r_debug should be defined explicitly,    */
-    /* as only bionic/linker/linker.h defines them but the header       */
-    /* itself is a C++ one starting from Android 4.3.                   */
-    struct link_map {
-      uintptr_t l_addr;
-      char* l_name;
-      uintptr_t l_ld;
-      struct link_map* l_next;
-      struct link_map* l_prev;
-    };
-    struct r_debug {
-      int32_t r_version;
-      struct link_map* r_map;
-      void (*r_brk)(void);
-      int32_t r_state;
-      uintptr_t r_ldbase;
-    };
+#   ifdef BIONIC_ELFDATA_REDEF_BUG
+      /* Workaround a problem in Bionic (as of Android 4.2) which has   */
+      /* mismatching ELF_DATA definitions in sys/exec_elf.h and         */
+      /* asm/elf.h included from linker.h file (similar to EM_ALPHA).   */
+#     include <asm/elf.h>
+#     include <linux/elf-em.h>
+#     undef ELF_DATA
+#     undef EM_ALPHA
+#   endif
+#   include <link.h>
+#   if !defined(GC_DONT_DEFINE_LINK_MAP)
+      /* link_map and r_debug should be defined explicitly,             */
+      /* as only bionic/linker/linker.h defines them but the header     */
+      /* itself is a C++ one starting from Android 4.3.                 */
+      struct link_map {
+        uintptr_t l_addr;
+        char* l_name;
+        uintptr_t l_ld;
+        struct link_map* l_next;
+        struct link_map* l_prev;
+      };
+      struct r_debug {
+        int32_t r_version;
+        struct link_map* r_map;
+        void (*r_brk)(void);
+        int32_t r_state;
+        uintptr_t r_ldbase;
+      };
+#   endif
+# else
+#   include <link.h>
 # endif
 #endif