/* -----------------------------------------------------------------------------
- * $Id: Linker.c,v 1.107 2002/12/11 15:36:42 simonmar Exp $
+ * $Id: Linker.c,v 1.110 2003/01/13 14:02:07 simonmar Exp $
*
* (c) The GHC Team, 2000, 2001
*
SymX(ErrorHdrHook) \
MAIN_CAP_SYM \
SymX(MallocFailHook) \
- SymX(NoRunnableThreadsHook) \
SymX(OnExitHook) \
SymX(OutOfHeapHook) \
SymX(PatErrorHdrHook) \
SymX(newArrayzh_fast) \
SymX(newBCOzh_fast) \
SymX(newByteArrayzh_fast) \
- SymX(newCAF) \
+ SymX_redirect(newCAF, newDynCAF) \
SymX(newMVarzh_fast) \
SymX(newMutVarzh_fast) \
SymX(atomicModifyMutVarzh_fast) \
/* entirely bogus claims about types of these symbols */
#define Sym(vvv) extern void (vvv);
#define SymX(vvv) /**/
+#define SymX_redirect(vvv,xxx) /**/
RTS_SYMBOLS
RTS_LONG_LONG_SYMS
RTS_EXTRA_SYMBOLS
RTS_CYGWIN_ONLY_SYMBOLS
#undef Sym
#undef SymX
+#undef SymX_redirect
#ifdef LEADING_UNDERSCORE
#define MAYBE_LEADING_UNDERSCORE_STR(s) ("_" s)
(void*)(&(vvv)) },
#define SymX(vvv) Sym(vvv)
+// SymX_redirect allows us to redirect references to one symbol to
+// another symbol. See newCAF/newDynCAF for an example.
+#define SymX_redirect(vvv,xxx) \
+ { MAYBE_LEADING_UNDERSCORE_STR(#vvv), \
+ (void*)(&(xxx)) },
+
static RtsSymbolVal rtsSyms[] = {
RTS_SYMBOLS
RTS_LONG_LONG_SYMS