summaryrefslogtreecommitdiff
path: root/os_dep.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2023-02-03 09:33:28 +0300
committerIvan Maidanski <ivmai@mail.ru>2023-02-03 09:48:25 +0300
commit703b3aace87f90c45ac10bcc618bd86d751540b5 (patch)
tree7190eb7d19566cf67fac0e6edbfa9d602efad53b /os_dep.c
parent4d3330726553a931e04ceb819063bb4fc5b6d9c5 (diff)
downloadbdwgc-703b3aace87f90c45ac10bcc618bd86d751540b5.tar.gz
Simplify MacOS-related code in GC_register_data_segments
(refactoring) * os_dep.c [!OS2 && !MSWIN32 && !MSWINCE && !CYGWIN32 && !AMIGA && !OPENBSD && !DYNAMIC_LOADING && GC_DONT_REGISTER_MAIN_STATIC_DATA && !PCR && MACOS] (GC_register_data_segments): Move code for handling MACOS upper (to be before GC_SOLARIS_THREADS case); reformat code and comments. * os_dep.c [!OS2 && !MSWIN32 && !MSWINCE && !CYGWIN32 && !AMIGA && !OPENBSD && !DYNAMIC_LOADING && GC_DONT_REGISTER_MAIN_STATIC_DATA && !PCR && MACOS && !THINK_C && __MWERKS__ && M68K] (GC_register_data_segments): Merge GC_add_roots_inner() calls for adjacent data regions. * os_dep.c [!OS2 && !MSWIN32 && !MSWINCE && !CYGWIN32 && !AMIGA && !OPENBSD && !DYNAMIC_LOADING && GC_DONT_REGISTER_MAIN_STATIC_DATA && !PCR && MACOS && !THINK_C && __MWERKS__] (GC_register_data_segments): Check POWERPC instead of __POWERPC__.
Diffstat (limited to 'os_dep.c')
-rw-r--r--os_dep.c69
1 files changed, 31 insertions, 38 deletions
diff --git a/os_dep.c b/os_dep.c
index 5619dedf..8be9459f 100644
--- a/os_dep.c
+++ b/os_dep.c
@@ -2072,8 +2072,36 @@ void GC_register_data_segments(void)
/* Avoid even referencing DATASTART and DATAEND as they are */
/* unnecessary and cause linker errors when bitcode is enabled. */
/* GC_register_data_segments() is not called anyway. */
-# elif !defined(PCR) && !defined(MACOS)
-# if defined(REDIRECT_MALLOC) && defined(GC_SOLARIS_THREADS)
+# elif defined(PCR)
+ /* No-op. */
+# elif defined(MACOS)
+ {
+# if defined(THINK_C)
+ extern void *GC_MacGetDataStart(void);
+
+ /* Globals begin above stack and end at a5. */
+ GC_add_roots_inner((ptr_t)GC_MacGetDataStart(),
+ (ptr_t)LMGetCurrentA5(), FALSE);
+# elif defined(__MWERKS__) && defined(M68K)
+ extern void *GC_MacGetDataStart(void);
+# if __option(far_data)
+ extern void *GC_MacGetDataEnd(void);
+
+ /* Handle Far Globals (CW Pro 3) located after the QD globals. */
+ GC_add_roots_inner((ptr_t)GC_MacGetDataStart(),
+ (ptr_t)GC_MacGetDataEnd(), FALSE);
+# else
+ GC_add_roots_inner((ptr_t)GC_MacGetDataStart(),
+ (ptr_t)LMGetCurrentA5(), FALSE);
+# endif
+# elif defined(__MWERKS__) && defined(POWERPC)
+ extern char __data_start__[], __data_end__[];
+
+ GC_add_roots_inner((ptr_t)&__data_start__,
+ (ptr_t)&__data_end__, FALSE);
+# endif
+ }
+# elif defined(REDIRECT_MALLOC) && defined(GC_SOLARIS_THREADS)
/* As of Solaris 2.3, the Solaris threads implementation */
/* allocates the data structure for the initial thread with */
/* sbrk at process startup. It needs to be scanned, so that */
@@ -2085,7 +2113,7 @@ void GC_register_data_segments(void)
if ((word)DATASTART < (word)p)
GC_add_roots_inner(DATASTART, p, FALSE);
}
-# else
+# else
if ((word)DATASTART - 1U >= (word)DATAEND) {
/* Subtract one to check also for NULL */
/* without a compiler warning. */
@@ -2099,42 +2127,7 @@ void GC_register_data_segments(void)
": %p .. %p", (void *)DATASTART2, (void *)DATAEND2);
GC_add_roots_inner(DATASTART2, DATAEND2, FALSE);
# endif
-# endif
# endif
-# if defined(MACOS)
- {
-# if defined(THINK_C)
- extern void* GC_MacGetDataStart(void);
- /* globals begin above stack and end at a5. */
- GC_add_roots_inner((ptr_t)GC_MacGetDataStart(),
- (ptr_t)LMGetCurrentA5(), FALSE);
-# else
-# if defined(__MWERKS__)
-# if !__POWERPC__
- extern void* GC_MacGetDataStart(void);
- /* MATTHEW: Function to handle Far Globals (CW Pro 3) */
-# if __option(far_data)
- extern void* GC_MacGetDataEnd(void);
-# endif
- /* globals begin above stack and end at a5. */
- GC_add_roots_inner((ptr_t)GC_MacGetDataStart(),
- (ptr_t)LMGetCurrentA5(), FALSE);
- /* MATTHEW: Handle Far Globals */
-# if __option(far_data)
- /* Far globals follow the QD globals: */
- GC_add_roots_inner((ptr_t)LMGetCurrentA5(),
- (ptr_t)GC_MacGetDataEnd(), FALSE);
-# endif
-# else
- extern char __data_start__[], __data_end__[];
- GC_add_roots_inner((ptr_t)&__data_start__,
- (ptr_t)&__data_end__, FALSE);
-# endif /* __POWERPC__ */
-# endif /* __MWERKS__ */
-# endif /* !THINK_C */
- }
-# endif /* MACOS */
-
/* Dynamic libraries are added at every collection, since they may */
/* change. */
}