]> granicus.if.org Git - gc/commitdiff
Fix static data roots registration on Android (if GC is shared
authorIvan Maidanski <ivmai@mail.ru>
Thu, 26 Jan 2012 16:36:57 +0000 (20:36 +0400)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 26 Jan 2012 16:36:57 +0000 (20:36 +0400)
library) by defining GC_INIT_CONF_ROOTS

* include/gc.h (GC_INIT_CONF_ROOTS): Define to register static data
root in range from "__data_start" to "_end" on Android (unless
explicitly prohibited by client via GC_NOT_DLL macro) since the client
data root is not registered automatically if GC is build as a shared
library.
* tests/test.c (GC_COND_INIT): Invoke GC_INIT also on Android.

include/gc.h
tests/test.c

index cdaf39e403139d106c4657c616386a1cfd923d2e..5f06c384b6db2e43281c525ccf60fb07231f5568 100644 (file)
@@ -1439,6 +1439,11 @@ GC_API int GC_CALL GC_get_force_unmap_on_gcollect(void);
 # define GC_DATASTART ((void *)((ulong)_data))
 # define GC_DATAEND ((void *)((ulong)_end))
 # define GC_INIT_CONF_ROOTS GC_add_roots(GC_DATASTART, GC_DATAEND)
+#elif (defined(PLATFORM_ANDROID) || defined(__ANDROID__)) \
+      && !defined(GC_NOT_DLL)
+  /* Required if GC is built as shared library. */
+  extern int __data_start[], _end[];
+# define GC_INIT_CONF_ROOTS GC_add_roots(__data_start, _end)
 #else
 # define GC_INIT_CONF_ROOTS /* empty */
 #endif
index 863d0c971ce254b0f6a9d3040e7e613548cf8633..22e5118ac36d0a78bb2dcc5c5ad7fbdafd9e222b 100644 (file)
@@ -92,7 +92,7 @@
 /* Call GC_INIT only on platforms on which we think we really need it,  */
 /* so that we can test automatic initialization on the rest.            */
 #if defined(CYGWIN32) || defined (AIX) || defined(DARWIN) \
-        || defined(THREAD_LOCAL_ALLOC) \
+        || defined(PLATFORM_ANDROID) || defined(THREAD_LOCAL_ALLOC) \
         || (defined(MSWINCE) && !defined(GC_WINMAIN_REDIRECT))
 #  define GC_COND_INIT() GC_INIT(); CHECH_GCLIB_VERSION
 #else