From: Ivan Maidanski Date: Fri, 25 Jan 2019 07:44:25 +0000 (+0300) Subject: Fix 'undefined reference to __data_start' linker error (Android/aarch64) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fdf4b56cba6c7eec2b4459eee69ec63377e10571;p=gc Fix 'undefined reference to __data_start' linker error (Android/aarch64) 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. --- diff --git a/include/private/gcconfig.h b/include/private/gcconfig.h index cb57ac1c..fe48e5bd 100644 --- a/include/private/gcconfig.h +++ b/include/private/gcconfig.h @@ -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