From 47359a8efab153e0ed904d27f2672ba8271693b1 Mon Sep 17 00:00:00 2001 From: Rainer Orth Date: Tue, 17 Aug 1999 22:46:02 +0000 Subject: [PATCH] gc_priv.h: Merged IRIX thread changes from include/private/gc_priv.h. Tue Aug 10 00:08:29 1999 Rainer Orth * gc_priv.h: Merged IRIX thread changes from include/private/gc_priv.h. From-SVN: r28740 --- boehm-gc/ChangeLog | 5 +++++ boehm-gc/gc_priv.h | 25 +++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/boehm-gc/ChangeLog b/boehm-gc/ChangeLog index acaa638b73b..8a55a5be300 100644 --- a/boehm-gc/ChangeLog +++ b/boehm-gc/ChangeLog @@ -1,3 +1,8 @@ +Tue Aug 10 00:08:29 1999 Rainer Orth + + * gc_priv.h: Merged IRIX thread changes from + include/private/gc_priv.h. + Mon Aug 9 18:33:38 1999 Rainer Orth * Makefile.in: Rebuilt. diff --git a/boehm-gc/gc_priv.h b/boehm-gc/gc_priv.h index 29035336f62..cda9c23bacb 100644 --- a/boehm-gc/gc_priv.h +++ b/boehm-gc/gc_priv.h @@ -520,14 +520,15 @@ void GC_print_callers (/* struct callinfo info[NFRAMES] */); } # define EXIT_GC() GC_collecting = 0; # endif /* LINUX_THREADS */ -# ifdef IRIX_THREADS +# if defined(IRIX_THREADS) || defined(IRIX_JDK_THREADS) # include # include -# if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64)) +# if __mips < 3 || !(defined (_ABIN32) || defined(_ABI64)) \ + || !defined(_COMPILER_VERSION) || _COMPILER_VERSION < 700 # define GC_test_and_set(addr, v) test_and_set(addr,v) # else -# define GC_test_and_set(addr, v) __test_and_set(addr,v) +# define GC_test_and_set(addr, v) __test_and_set(addr,v) # endif extern unsigned long GC_allocate_lock; /* This is not a mutex because mutexes that obey the (optional) */ @@ -546,10 +547,17 @@ void GC_print_callers (/* struct callinfo info[NFRAMES] */); # define UNLOCK() pthread_mutex_unlock(&GC_allocate_ml) # else # define LOCK() { if (GC_test_and_set(&GC_allocate_lock, 1)) GC_lock(); } -# if __mips >= 3 && (defined (_ABIN32) || defined(_ABI64)) +# if __mips >= 3 && (defined (_ABIN32) || defined(_ABI64)) \ + && defined(_COMPILER_VERSION) && _COMPILER_VERSION >= 700 # define UNLOCK() __lock_release(&GC_allocate_lock) # else -# define UNLOCK() GC_allocate_lock = 0 + /* The function call in the following should prevent the */ + /* compiler from moving assignments to below the UNLOCK. */ + /* This is probably not necessary for ucode or gcc 2.8. */ + /* It may be necessary for Ragnarok and future gcc */ + /* versions. */ +# define UNLOCK() { GC_noop1(&GC_allocate_lock); \ + *(volatile unsigned long *)(&GC_allocate_lock) = 0; } # endif # endif extern GC_bool GC_collecting; @@ -558,7 +566,7 @@ void GC_print_callers (/* struct callinfo info[NFRAMES] */); GC_collecting = 1; \ } # define EXIT_GC() GC_collecting = 0; -# endif /* IRIX_THREADS */ +# endif /* IRIX_THREADS || IRIX_JDK_THREADS */ # ifdef WIN32_THREADS # include GC_API CRITICAL_SECTION GC_allocate_ml; @@ -616,7 +624,7 @@ void GC_print_callers (/* struct callinfo info[NFRAMES] */); # if defined(SRC_M3) || defined(AMIGA) || defined(SOLARIS_THREADS) \ || defined(MSWIN32) || defined(MACOS) || defined(DJGPP) \ || defined(NO_SIGNALS) || defined(IRIX_THREADS) \ - || defined(LINUX_THREADS) + || defined(IRIX_JDK_THREADS) || defined(LINUX_THREADS) /* Also useful for debugging. */ /* Should probably use thr_sigsetmask for SOLARIS_THREADS. */ # define DISABLE_SIGNALS() @@ -644,7 +652,8 @@ void GC_print_callers (/* struct callinfo info[NFRAMES] */); PCR_waitForever); # else # if defined(SOLARIS_THREADS) || defined(WIN32_THREADS) \ - || defined(IRIX_THREADS) || defined(LINUX_THREADS) + || defined(IRIX_THREADS) || defined(LINUX_THREADS) \ + || defined(IRIX_JDK_THREADS) void GC_stop_world(); void GC_start_world(); # define STOP_WORLD() GC_stop_world()