// Symbols that are extern, but private to the RTS, are declared
// with visibility "hidden" to hide them outside the RTS shared
// library.
+#if !defined(mingw32_HOST_OS)
#define RTS_PRIVATE GNUC3_ATTRIBUTE(visibility("hidden"))
+#else
+#define RTS_PRIVATE /* disabled: RTS_PRIVATE */
+#endif
+
+#if __GNUC__ > 4
+#define BEGIN_RTS_PRIVATE #pragma GCC visibility push(hidden)
+#define END_RTS_PRIVATE #pragma GCC visibility pop
+#else
+#define BEGIN_RTS_PRIVATE /* disabled: BEGIN_RTS_PRIVATE */
+#define END_RTS_PRIVATE /* disabled: END_RTS_PRIVATE */
+#endif
/* Fix for mingw stat problem (done here so it's early enough) */
#ifdef mingw32_HOST_OS
#include "Task.h"
#include "Sparks.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
struct Capability_ {
// State required by the STG virtual machine when running Haskell
cap->context_switch = 1;
}
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* CAPABILITY_H */
#ifndef FRONTPANEL_H
#define FRONTPANEL_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
#ifdef RTS_GTK_FRONTPANEL
#endif /* RTS_GTK_FRONTPANEL */
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* FRONTPANEL_H */
#ifndef GETTIME_H
#define GETTIME_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
// We'll use a fixed resolution of usec for now. The machine
// dependent implementation may have a different resolution, but we'll
// Not strictly timing, but related
nat getPageFaults (void);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* GETTIME_H */
#ifndef HASH_H
#define HASH_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
typedef struct hashtable HashTable; /* abstract */
void exitHashTable ( void );
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* HASH_H */
#ifndef PAPI_H
#define PAPI_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* Check the error value of a PAPI call, reporting an error, if needed */
extern int papi_error;
void papi_thread_start_gc1_count(int event_set);
void papi_thread_stop_gc1_count(int event_set);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PAPI_H */
#ifndef PRINTER_H
#define PRINTER_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
extern void printPtr ( StgPtr p );
extern void printObj ( StgClosure *obj );
extern char *what_next_strs[];
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PRINTER_H */
#ifndef PROFHEAP_H
#define PROFHEAP_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void heapCensus (void);
nat initHeapProfiling (void);
void LDV_recordDead (StgClosure *c, nat size);
rtsBool strMatchesSelector (char* str, char* sel);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PROFHEAP_H */
#include <stdio.h>
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void initProfiling1 (void);
void freeProfiling1 (void);
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PROFILING_H */
#ifndef PROFTIMER_H
#define PROFTIMER_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void initProfTimer ( void );
void handleProfTick ( void );
extern rtsBool performHeapProfile;
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PROFTIMER_H */
#ifndef RAISEASYNC_H
#define RAISEASYNC_H
-#pragma GCC visibility push(hidden)
-
#define THROWTO_SUCCESS 0
#define THROWTO_BLOCKED 1
#ifndef CMINUSMINUS
+
+BEGIN_RTS_PRIVATE
+
void throwToSingleThreaded (Capability *cap,
StgTSO *tso,
StgClosure *exception);
}
}
-#endif /* CMINUSMINUS */
+END_RTS_PRIVATE
-#pragma GCC visibility pop
+#endif /* CMINUSMINUS */
#endif /* RAISEASYNC_H */
#include "RetainerSet.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void initRetainerProfiling ( void );
void endRetainerProfiling ( void );
extern lnat retainerStackBlocks ( void );
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PROFILING */
#ifdef PROFILING
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/*
Type 'retainer' defines the retainer identity.
// the best place to define it.
void printRetainer(FILE *, retainer);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* PROFILING */
#endif /* RETAINERSET_H */
#if RTS_USER_SIGNALS
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/*
* Function: initUserSignals()
*/
void markSignalHandlers (evac_fn evac, void *user);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* RTS_USER_SIGNALS */
#ifndef RTSUTILS_H
#define RTSUTILS_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* -----------------------------------------------------------------------------
* (Checked) dynamic allocation
int rts_isProfiled(void);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* RTSUTILS_H */
#define STM_UNIPROC
#endif
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/*----------------------------------------------------------------------
/*----------------------------------------------------------------------*/
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* STM_H */
#ifdef DEBUG
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
# if defined(PAR)
# define PVM_PE_MASK 0xfffc0000
void checkBQ (StgTSO *bqe, StgClosure *closure);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* DEBUG */
#include "Capability.h"
#include "Trace.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* initScheduler(), exitScheduler()
* Called from STG : no
#endif /* !IN_STG_CODE */
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SCHEDULE_H */
#include "WSDeque.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* typedef for SparkPool in RtsTypes.h */
#endif // THREADED_RTS
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SPARKS_H */
#include "sm/GC.h" // for evac_fn below
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void freeStablePtr ( StgStablePtr sp );
void stablePtrPreGC ( void );
void stablePtrPostGC ( void );
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* STABLE_H */
#include "GetTime.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void stat_startInit(void);
void stat_endInit(void);
void statsPrintf( char *s, ... )
GNUC3_ATTRIBUTE(format (printf, 1, 2));
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* STATS_H */
#ifndef STGPRIMFLOAT_H
#define STGPRIMFLOAT_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* grimy low-level support functions defined in StgPrimFloat.c */
void __decodeDouble_2Int (I_ *man_sign, W_ *man_high, W_ *man_low, I_ *exp, StgDouble dbl);
// __int_encodeDouble and __int_encodeFloat are public, declared in
// includes/rts/PrimFloat.h.
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* STGPRIMFLOAT_H */
#include "GetTime.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/*
Definition of a Task
setMyTask(task);
}
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* TASK_H */
#ifndef THREADLABELS_H
#define THREADLABELS_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
#if defined(DEBUG)
void initThreadLabelTable (void);
void labelThread (StgPtr tso, char *label);
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* THREADLABELS_H */
#ifndef THREADS_H
#define THREADS_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
StgTSO * unblockOne (Capability *cap, StgTSO *tso);
StgTSO * unblockOne_ (Capability *cap, StgTSO *tso, rtsBool allow_migrate);
void printThreadQueue (StgTSO *t);
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* THREADS_H */
#ifndef TICKER_H
#define TICKER_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
typedef void (*TickProc)(int);
void stopTicker (void);
void exitTicker (void);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* TICKER_H */
#include "rts/EventLogFormat.h"
#include "Capability.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
// -----------------------------------------------------------------------------
// Posting events
#endif /* TRACING */
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* TRACE_H */
#ifndef UPDATES_H
#define UPDATES_H
-#pragma GCC visibility push(hidden)
+#ifndef CMINUSMINUS
+BEGIN_RTS_PRIVATE
+#endif
/* -----------------------------------------------------------------------------
Updates
}
#endif /* CMINUSMINUS */
-#pragma GCC visibility pop
+#ifndef CMINUSMINUS
+END_RTS_PRIVATE
+#endif
#endif /* UPDATES_H */
#include "Capability.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
extern rtsBool running_finalizers;
extern StgWeak * weak_ptr_list;
void scheduleFinalizers(Capability *cap, StgWeak *w);
void markWeakList(void);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* WEAK_H */
#include "rts/EventLogFormat.h"
#include "Capability.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
#ifdef TRACING
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* TRACING_H */
# include <signal.h>
#endif
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
rtsBool anyUserHandlers(void);
extern StgInt *signal_handlers;
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* POSIX_SIGNALS_H */
#ifndef BLOCK_ALLOC_H
#define BLOCK_ALLOC_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* Debugging -------------------------------------------------------------- */
extern lnat n_alloc_blocks; // currently allocated blocks
extern lnat hw_alloc_blocks; // high-water allocated blocks
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* BLOCK_ALLOC_H */
#ifndef SM_COMPACT_H
#define SM_COMPACT_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
INLINE_HEADER rtsBool
mark_stack_empty(void)
void compact (StgClosure *static_objects);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_COMPACT_H */
#ifndef SM_EVAC_H
#define SM_EVAC_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
// Use a register argument for evacuate, if available.
// Earlier, the regparm attribute was used whenever __GNUC__ >= 2, but this
extern lnat thunk_selector_depth;
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_EVAC_H */
#ifndef SM_GC_H
#define SM_GC_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void GarbageCollect(rtsBool force_major_gc, nat gc_type, Capability *cap);
#define WORK_UNIT_WORDS 128
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_GC_H */
#include "WSDeque.h"
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* -----------------------------------------------------------------------------
General scheme
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif // SM_GCTHREAD_H
#ifndef SM_GCUTILS_H
#define SM_GCUTILS_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
bdescr *allocBlock_sync(void);
void freeChain_sync(bdescr *bd);
*bd->free++ = (StgWord)p;
}
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_GCUTILS_H */
#ifndef SM_MARKWEAK_H
#define SM_MARKWEAK_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
extern StgWeak *old_weak_ptr_list;
extern StgTSO *resurrected_threads;
void markWeakPtrList ( void );
rtsBool traverseBlackholeQueue ( void );
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_MARKWEAK_H */
#ifndef SM_OSMEM_H
#define SM_OSMEM_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void osMemInit(void);
void *osGetMBlocks(nat n);
lnat getPageSize (void);
void setExecutable (void *p, lnat len, rtsBool exec);
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_OSMEM_H */
#ifndef SM_SCAV_H
#define SM_SCAV_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
void scavenge_loop (void);
void scavenge_mutable_list (bdescr *bd, generation *gen);
void scavenge_capability_mut_Lists1 (Capability *cap);
#endif
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_SCAV_H */
#ifndef SM_STORAGE_H
#define SM_STORAGE_H
-#pragma GCC visibility push(hidden)
+BEGIN_RTS_PRIVATE
/* -----------------------------------------------------------------------------
Initialisation / De-initialisation
extern StgClosure * caf_list;
extern StgClosure * revertible_caf_list;
-#pragma GCC visibility pop
+END_RTS_PRIVATE
#endif /* SM_STORAGE_H */