diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2023-02-03 09:33:28 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2023-02-03 09:48:25 +0300 |
commit | 703b3aace87f90c45ac10bcc618bd86d751540b5 (patch) | |
tree | 7190eb7d19566cf67fac0e6edbfa9d602efad53b /os_dep.c | |
parent | 4d3330726553a931e04ceb819063bb4fc5b6d9c5 (diff) | |
download | bdwgc-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.c | 69 |
1 files changed, 31 insertions, 38 deletions
@@ -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. */ } |