]> granicus.if.org Git - gc/commitdiff
Fix 'undefined reference to __data_start' linker error (Android/aarch64)
authorIvan Maidanski <ivmai@mail.ru>
Fri, 25 Jan 2019 07:44:25 +0000 (10:44 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Fri, 25 Jan 2019 07:44:25 +0000 (10:44 +0300)
As of NDK r18b, __data_start symbol is only provided by bfd linker.

* include/private/gcconfig.h [AARCH64 && LINUX && HOST_ANDROID]
(__data_start): Do not declare extern variable.
* include/private/gcconfig.h [AARCH64 && LINUX && HOST_ANDROID]
(SEARCH_FOR_DATA_START): Define (instead of DATASTART); add comment.

include/private/gcconfig.h

index cb57ac1ca7f0068f223043f6299bc84234d70ad9..fe48e5bdaf34451095411215426189a805be8943 100644 (file)
@@ -2286,9 +2286,16 @@ EXTERN_C_BEGIN
 #     define OS_TYPE "LINUX"
 #     define LINUX_STACKBOTTOM
 #     define DYNAMIC_LOADING
-      extern int __data_start[];
+#     if defined(HOST_ANDROID)
+#       define SEARCH_FOR_DATA_START
+                        /* As of NDK r18b, __data_start is not provided */
+                        /* if "gold" linker is used.  But __dso_handle  */
+                        /* symbol should be usable instead.             */
+#     else
+        extern int __data_start[];
+#       define DATASTART ((ptr_t)__data_start)
+#     endif
       extern int _end[];
-#     define DATASTART ((ptr_t)__data_start)
 #     define DATAEND ((ptr_t)(&_end))
 #   endif
 #   ifdef DARWIN