From 84b695d01906db2877e1af519aeb363ba12470ae Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 2 Mar 2018 01:38:10 +0300 Subject: [PATCH] Wrap remaining extern symbols in .c files into EXTERN_C_BEGIN/END Issue #206 (bdwgc). * dyn_load.c [SOLARISDL && !USE_PROC_FOR_LIBRARIES] (_DYNAMIC): Move the extern symbol declaration out of a function body. * os_dep.c [!PCR && !MACOS && REDIRECT_MALLOC && GC_SOLARIS_THREADS] (sbrk): Likewise. * dyn_load.c [SOLARISDL && !USE_PROC_FOR_LIBRARIES] (_DYNAMIC): Wrap into EXTERN_C_BEGIN/END block. * dyn_load.c [__ELF__ && LINUX && HOST_ANDROID || HAVE_DL_ITERATE_PHDR] (dl_iterate_phdr): Likewise. * dyn_load.c [!USE_PROC_FOR_LIBRARIES] (_DYNAMIC): Likewise. * dyn_load.c [ALPHA && OSF1 || HPUX] (sys_errlist, sys_nerr, errno): Likewise. * os_dep.c [SEARCH_FOR_DATA_START && (LINUX || HURD)] (__data_start, data_start): Likewise. * os_dep.c [SEARCH_FOR_DATA_START && LINUX && HOST_ANDROID] (_etext, __dso_handle): Likewise. * os_dep.c [NETBSD && __ELF__] (environ): Likewise. * os_dep.c [OPENBSD && THREADS] (__syscall): Likewise. * os_dep.c [LINUX_STACKBOTTOM && USE_LIBC_PRIVATES] (__libc_stack_end): Likewise. * os_dep.c [LINUX_STACKBOTTOM && USE_LIBC_PRIVATES && IA64] (__libc_ia64_register_backing_store_base): Likewise. * os_dep.c [SYMBIAN] (GC_get_main_symbian_stack_base): Likewise. * os_dep.c [!PCR && !MACOS && REDIRECT_MALLOC && GC_SOLARIS_THREADS] (sbrk): Likewise. * os_dep.c [MMAP_SUPPORTED && SYMBIAN] (GC_get_private_path_and_zero_file): Likewise. * pthread_stop_world.c [USE_TKILL_ON_ANDROID] (tkill): Likewise. * pthread_stop_world.c [NACL] (nacl_interface_query): Likewise. * pthread_support.c [PTHREAD_REGISTER_CANCEL_WEAK_STUBS] (__pthread_register_cancel, __pthread_unregister_cancel): Likewise. * pthread_support.c [PTHREAD_REGISTER_CANCEL_WEAK_STUBS] (__pthread_register_cancel, __pthread_unregister_cancel): Use "void" to denote empty arguments list. --- dyn_load.c | 28 +++++++++++++++++++++------- os_dep.c | 45 +++++++++++++++++++++++++++++++-------------- pthread_stop_world.c | 4 ++++ pthread_support.c | 11 +++++++---- 4 files changed, 63 insertions(+), 25 deletions(-) diff --git a/dyn_load.c b/dyn_load.c index 330cd86..110d9b1 100644 --- a/dyn_load.c +++ b/dyn_load.c @@ -161,10 +161,13 @@ STATIC GC_has_static_roots_func GC_has_static_roots = 0; #if defined(SOLARISDL) && !defined(USE_PROC_FOR_LIBRARIES) -STATIC struct link_map * -GC_FirstDLOpenedLinkMap(void) -{ - extern ElfW(Dyn) _DYNAMIC; + EXTERN_C_BEGIN + extern ElfW(Dyn) _DYNAMIC; + EXTERN_C_END + + STATIC struct link_map * + GC_FirstDLOpenedLinkMap(void) + { ElfW(Dyn) *dp; static struct link_map * cachedResult = 0; static ElfW(Dyn) *dynStructureAddr = 0; @@ -202,7 +205,7 @@ GC_FirstDLOpenedLinkMap(void) } } return cachedResult; -} + } #endif /* SOLARISDL ... */ @@ -419,8 +422,11 @@ GC_INNER GC_bool GC_register_main_static_data(void) # endif # ifdef HOST_ANDROID /* Android headers might have no such definition for some targets. */ - int dl_iterate_phdr(int (*cb)(struct dl_phdr_info *, size_t, void *), - void *data); + EXTERN_C_BEGIN + extern int dl_iterate_phdr(int (*cb)(struct dl_phdr_info *, + size_t, void *), + void *data); + EXTERN_C_END # endif #endif /* __GLIBC__ >= 2 || HOST_ANDROID */ @@ -435,7 +441,9 @@ GC_INNER GC_bool GC_register_main_static_data(void) /* We have the header files for a glibc that includes dl_iterate_phdr.*/ /* It may still not be available in the library on the target system. */ /* Thus we also treat it as a weak symbol. */ + EXTERN_C_BEGIN # pragma weak dl_iterate_phdr + EXTERN_C_END #endif #if defined(HAVE_DL_ITERATE_PHDR) @@ -682,10 +690,12 @@ STATIC GC_bool GC_register_dynamic_libraries_dl_iterate_phdr(void) #endif /* !HAVE_DL_ITERATE_PHDR */ +EXTERN_C_BEGIN #ifdef __GNUC__ # pragma weak _DYNAMIC #endif extern ElfW(Dyn) _DYNAMIC[]; +EXTERN_C_END STATIC struct link_map * GC_FirstDLOpenedLinkMap(void) @@ -1051,9 +1061,11 @@ GC_INNER void GC_register_dynamic_libraries(void) #include +EXTERN_C_BEGIN extern char *sys_errlist[]; extern int sys_nerr; extern int errno; +EXTERN_C_END GC_INNER void GC_register_dynamic_libraries(void) { @@ -1139,8 +1151,10 @@ GC_INNER void GC_register_dynamic_libraries(void) #include #include +EXTERN_C_BEGIN extern char *sys_errlist[]; extern int sys_nerr; +EXTERN_C_END GC_INNER void GC_register_dynamic_libraries(void) { diff --git a/os_dep.c b/os_dep.c index 2485882..75dc95b 100644 --- a/os_dep.c +++ b/os_dep.c @@ -412,6 +412,7 @@ GC_INNER char * GC_get_maps(void) /* broken, since the user program may define data_start, in which */ /* case we lose. Nonetheless, we try both, preferring __data_start.*/ /* We assume gcc-compatible pragmas. */ + EXTERN_C_BEGIN # pragma weak __data_start # pragma weak data_start extern int __data_start[], data_start[]; @@ -420,6 +421,7 @@ GC_INNER char * GC_get_maps(void) # pragma weak __dso_handle extern int _etext[], __dso_handle[]; # endif + EXTERN_C_END # endif /* LINUX */ ptr_t GC_data_start = NULL; @@ -497,7 +499,9 @@ GC_INNER char * GC_get_maps(void) #if defined(NETBSD) && defined(__ELF__) ptr_t GC_data_start = NULL; + EXTERN_C_BEGIN extern char **environ; + EXTERN_C_END GC_INNER void GC_init_netbsd_elf(void) { @@ -524,7 +528,9 @@ GC_INNER char * GC_get_maps(void) # ifdef THREADS # include + EXTERN_C_BEGIN extern sigset_t __syscall(quad_t, ...); + EXTERN_C_END # endif /* Don't use GC_find_limit() because siglongjmp() outside of the */ @@ -1055,16 +1061,17 @@ GC_INNER size_t GC_page_size = 0; /* field in /proc/self/stat */ # ifdef USE_LIBC_PRIVATES + EXTERN_C_BEGIN # pragma weak __libc_stack_end extern ptr_t __libc_stack_end; -# endif - -# ifdef IA64 -# ifdef USE_LIBC_PRIVATES +# ifdef IA64 # pragma weak __libc_ia64_register_backing_store_base extern ptr_t __libc_ia64_register_backing_store_base; # endif + EXTERN_C_END +# endif +# ifdef IA64 GC_INNER ptr_t GC_get_register_stack_base(void) { ptr_t result; @@ -1190,7 +1197,10 @@ GC_INNER size_t GC_page_size = 0; } # define GET_MAIN_STACKBASE_SPECIAL #elif defined(SYMBIAN) + EXTERN_C_BEGIN extern int GC_get_main_symbian_stack_base(void); + EXTERN_C_END + ptr_t GC_get_main_stack_base(void) { return (ptr_t)GC_get_main_symbian_stack_base(); @@ -2015,8 +2025,15 @@ void GC_register_data_segments(void) # else /* !OS2 && !Windows && !AMIGA && !OPENBSD */ -void GC_register_data_segments(void) -{ +# if !defined(PCR) && !defined(MACOS) && defined(REDIRECT_MALLOC) \ + && defined(GC_SOLARIS_THREADS) + EXTERN_C_BEGIN + extern caddr_t sbrk(int); + EXTERN_C_END +# endif + + void GC_register_data_segments(void) + { # if !defined(PCR) && !defined(MACOS) # if defined(REDIRECT_MALLOC) && defined(GC_SOLARIS_THREADS) /* As of Solaris 2.3, the Solaris threads implementation */ @@ -2024,8 +2041,6 @@ void GC_register_data_segments(void) /* sbrk at process startup. It needs to be scanned, so that */ /* we don't lose some malloc allocated data structures */ /* hanging from it. We're on thin ice here ... */ - extern caddr_t sbrk(int); - GC_ASSERT(DATASTART); { ptr_t p = (ptr_t)sbrk(0); @@ -2084,7 +2099,7 @@ void GC_register_data_segments(void) /* Dynamic libraries are added at every collection, since they may */ /* change. */ -} + } # endif /* !AMIGA */ # endif /* !MSWIN32 && !MSWINCE */ @@ -2124,10 +2139,6 @@ void GC_register_data_segments(void) # define OPT_MAP_ANON 0 #endif -#ifdef SYMBIAN - extern char* GC_get_private_path_and_zero_file(void); -#endif - # ifdef MSWIN_XBOX1 void *durango_get_mem(size_t bytes, size_t page_size) { @@ -2137,6 +2148,12 @@ void GC_register_data_segments(void) } # else +# if defined(SYMBIAN) && !defined(USE_MMAP_ANON) + EXTERN_C_BEGIN + extern char *GC_get_private_path_and_zero_file(void); + EXTERN_C_END +# endif + STATIC ptr_t GC_unix_mmap_get_mem(size_t bytes) { void *result; @@ -2147,7 +2164,7 @@ void GC_register_data_segments(void) if (!EXPECT(initialized, TRUE)) { # ifdef SYMBIAN - char* path = GC_get_private_path_and_zero_file(); + char *path = GC_get_private_path_and_zero_file(); zero_fd = open(path, O_RDWR | O_CREAT, 0666); free(path); # else diff --git a/pthread_stop_world.c b/pthread_stop_world.c index 938a384..454eb42 100644 --- a/pthread_stop_world.c +++ b/pthread_stop_world.c @@ -406,7 +406,9 @@ STATIC void GC_restart_handler(int sig) } # ifdef USE_TKILL_ON_ANDROID + EXTERN_C_BEGIN extern int tkill(pid_t tid, int sig); /* from sys/linux-unistd.h */ + EXTERN_C_END static int android_thread_kill(pid_t tid, int sig) { @@ -982,8 +984,10 @@ GC_INNER void GC_stop_world(void) int (*register_block_hooks)(void (*pre)(void), void (*post)(void)); }; + EXTERN_C_BEGIN extern size_t nacl_interface_query(const char *interface_ident, void *table, size_t tablesize); + EXTERN_C_END GC_INNER void GC_nacl_initialize_gc_thread(void) { diff --git a/pthread_support.c b/pthread_support.c index 7705e1f..032818e 100644 --- a/pthread_support.c +++ b/pthread_support.c @@ -2273,10 +2273,13 @@ GC_INNER void GC_notify_all_marker(void) #ifdef PTHREAD_REGISTER_CANCEL_WEAK_STUBS /* Workaround "undefined reference" linkage errors on some targets. */ - void __pthread_register_cancel() __attribute__((__weak__)); - void __pthread_unregister_cancel() __attribute__((__weak__)); - void __pthread_register_cancel() {} - void __pthread_unregister_cancel() {} + EXTERN_C_BEGIN + extern void __pthread_register_cancel(void) __attribute__((__weak__)); + extern void __pthread_unregister_cancel(void) __attribute__((__weak__)); + EXTERN_C_END + + void __pthread_register_cancel(void) {} + void __pthread_unregister_cancel(void) {} #endif #endif /* GC_PTHREADS */ -- 2.7.4