summaryrefslogtreecommitdiff
path: root/os_dep.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2022-03-10 09:18:20 +0300
committerIvan Maidanski <ivmai@mail.ru>2022-03-10 23:18:52 +0300
commit0ed6cc4e3155cbe17a8aad0a50fcca7062080830 (patch)
tree61f90945f28424c9fff1a0313dbeaa94b6a8ea4f /os_dep.c
parent8bdc557f5c4efa0f510210c897c9a7bf007d6771 (diff)
downloadbdwgc-0ed6cc4e3155cbe17a8aad0a50fcca7062080830.tar.gz
Replace GC_init_netbsd_elf with GC_init_linux_data_start on NetBSD
(refactoring) * include/private/gc_priv.h [NETBSD && __ELF__] (GC_init_netbsd_elf, GC_find_limit): Do not declare. * include/private/gcconfig.h [NETBSD && __ELF__] (GC_data_start): Likewise. * include/private/gcconfig.h [NETBSD && __ELF__] (DATASTART): Do not define. * include/private/gcconfig.h [NETBSD && __ELF__] (SEARCH_FOR_DATA_START): Define. * misc.c [NETBSD && __ELF__] (GC_init): Do not call GC_init_netbsd_elf. * os_dep.c [NETBSD] (environ): Declare C extern variable only if SEARCH_FOR_DATA_START (regardless of __ELF__). * os_dep.c [SEARCH_FOR_DATA_START && NETBSD] (GC_init_linux_data_start): Pass &environ to GC_find_limit (as in deleted GC_init_netbsd_elf) instead of data_end. * os_dep.c [NETBSD && __ELF__] (GC_data_start, GC_init_netbsd_elf): Do not define.
Diffstat (limited to 'os_dep.c')
-rw-r--r--os_dep.c29
1 files changed, 12 insertions, 17 deletions
diff --git a/os_dep.c b/os_dep.c
index 25037aa6..d646c6e7 100644
--- a/os_dep.c
+++ b/os_dep.c
@@ -432,7 +432,11 @@ GC_INNER const char * GC_get_maps(void)
# pragma weak data_start
extern int __data_start[], data_start[];
EXTERN_C_END
-# endif /* LINUX */
+# elif defined(NETBSD)
+ EXTERN_C_BEGIN
+ extern char **environ;
+ EXTERN_C_END
+# endif
ptr_t GC_data_start = NULL;
@@ -469,7 +473,13 @@ GC_INNER const char * GC_get_maps(void)
return;
}
- GC_data_start = (ptr_t)GC_find_limit(data_end, FALSE);
+# ifdef NETBSD
+ /* This may need to be environ, without the underscore, for */
+ /* some versions. */
+ GC_data_start = (ptr_t)GC_find_limit(&environ, FALSE);
+# else
+ GC_data_start = (ptr_t)GC_find_limit(data_end, FALSE);
+# endif
}
#endif /* SEARCH_FOR_DATA_START */
@@ -499,21 +509,6 @@ GC_INNER const char * GC_get_maps(void)
# define sbrk tiny_sbrk
#endif /* ECOS */
-#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)
- {
- /* This may need to be environ, without the underscore, for */
- /* some versions. */
- GC_data_start = (ptr_t)GC_find_limit(&environ, FALSE);
- }
-#endif /* NETBSD */
-
#if defined(ADDRESS_SANITIZER) && (defined(UNIX_LIKE) \
|| defined(NEED_FIND_LIMIT) || defined(MPROTECT_VDB)) \
&& !defined(CUSTOM_ASAN_DEF_OPTIONS)