# include <mach-o/loader.h>
# include <mach-o/nlist.h>
# include <mach-o/reloc.h>
+#if !defined(HAVE_DLFCN_H)
# include <mach-o/dyld.h>
+#endif
#if defined(powerpc_HOST_ARCH)
# include <mach-o/ppc/reloc.h>
#endif
SymX(rts_getDouble) \
SymX(rts_getFloat) \
SymX(rts_getInt) \
+ SymX(rts_getInt8) \
+ SymX(rts_getInt16) \
SymX(rts_getInt32) \
+ SymX(rts_getInt64) \
SymX(rts_getPtr) \
SymX(rts_getFunPtr) \
SymX(rts_getStablePtr) \
SymX(rts_getThreadId) \
SymX(rts_getWord) \
+ SymX(rts_getWord8) \
+ SymX(rts_getWord16) \
SymX(rts_getWord32) \
+ SymX(rts_getWord64) \
SymX(rts_lock) \
SymX(rts_mkBool) \
SymX(rts_mkChar) \
SymX(rts_mkDouble) \
SymX(rts_mkFloat) \
SymX(rts_mkInt) \
+ SymX(rts_mkInt8) \
SymX(rts_mkInt16) \
SymX(rts_mkInt32) \
SymX(rts_mkInt64) \
- SymX(rts_mkInt8) \
SymX(rts_mkPtr) \
SymX(rts_mkFunPtr) \
SymX(rts_mkStablePtr) \
SymX(rts_mkString) \
SymX(rts_mkWord) \
+ SymX(rts_mkWord8) \
SymX(rts_mkWord16) \
SymX(rts_mkWord32) \
SymX(rts_mkWord64) \
- SymX(rts_mkWord8) \
SymX(rts_unlock) \
SymX(rtsSupportsBoundThreads) \
SymX(__hscore_get_saved_termios) \
SymX(rts_breakpoint_io_action) \
SymX(rts_stop_next_breakpoint) \
SymX(rts_stop_on_exception) \
+ SymX(stopTimer) \
RTS_USER_SIGNALS_SYMBOLS
#ifdef SUPPORT_LONG_LONGS
return dlsym(dl_prog_handle, lbl);
# endif
# elif defined(OBJFORMAT_MACHO)
+# if HAVE_DLFCN_H
+ /* On OS X 10.3 and later, we use dlsym instead of the old legacy
+ interface.
+
+ HACK: On OS X, global symbols are prefixed with an underscore.
+ However, dlsym wants us to omit the leading underscore from the
+ symbol name. For now, we simply strip it off here (and ONLY
+ here).
+ */
+ ASSERT(lbl[0] == '_');
+ return dlsym(dl_prog_handle, lbl+1);
+# else
if(NSIsSymbolNameDefined(lbl)) {
NSSymbol symbol = NSLookupAndBindSymbol(lbl);
return NSAddressOfSymbol(symbol);
} else {
return NULL;
}
+# endif /* HAVE_DLFCN_H */
# elif defined(OBJFORMAT_PEi386)
OpenedDLL* o_dll;
void* sym;