remove debugging code
[ghc-hetmet.git] / rts / Linker.c
index 672828c..c212c0f 100644 (file)
@@ -532,6 +532,7 @@ typedef struct _RtsSymbolVal {
       SymX(hs_perform_gc)                      \
       SymX(hs_free_stable_ptr)                 \
       SymX(hs_free_fun_ptr)                    \
+      SymX(hs_hpc_rootModule)                  \
       SymX(initLinker)                         \
       SymX(unpackClosurezh_fast)                \
       SymX(getApStackValzh_fast)                \
@@ -598,32 +599,38 @@ typedef struct _RtsSymbolVal {
       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)         \
@@ -766,7 +773,7 @@ typedef struct _RtsSymbolVal {
 
 /* entirely bogus claims about types of these symbols */
 #define Sym(vvv)  extern void vvv(void);
-#ifdef ENABLE_WIN32_DLL_SUPPORT
+#if defined(__PIC__) && defined(mingw32_TARGET_OS)
 #define SymExtern(vvv)  extern void _imp__ ## vvv (void);
 #else
 #define SymExtern(vvv)  SymX(vvv)
@@ -795,12 +802,8 @@ RTS_LIBGCC_SYMBOLS
 #define Sym(vvv) { MAYBE_LEADING_UNDERSCORE_STR(#vvv), \
                     (void*)(&(vvv)) },
 #define SymX(vvv) Sym(vvv)
-#ifdef ENABLE_WIN32_DLL_SUPPORT
 #define SymExtern(vvv) { MAYBE_LEADING_UNDERSCORE_STR(#vvv), \
-           (void*)(_imp__ ## vvv) },
-#else
-#define SymExtern(vvv) Sym(vvv)
-#endif
+           (void*)DLL_IMPORT_DATA_REF(vvv) },
 
 // SymX_redirect allows us to redirect references to one symbol to
 // another symbol.  See newCAF/newDynCAF for an example.
@@ -2538,13 +2541,16 @@ ocResolve_PEi386 ( ObjectCode* oc )
 #endif
 
 #if !defined(openbsd_HOST_OS)
-#include <elf.h>
+#  include <elf.h>
+#  ifndef R_X86_64_PC64     /* If elf.h doesn't define it */
+#    define R_X86_64_PC64 24
+#  endif
 #else
 /* openbsd elf has things in different places, with diff names */
-#include <elf_abi.h>
-#include <machine/reloc.h>
-#define R_386_32    RELOC_32
-#define R_386_PC32  RELOC_PC32
+#  include <elf_abi.h>
+#  include <machine/reloc.h>
+#  define R_386_32    RELOC_32
+#  define R_386_PC32  RELOC_PC32
 #endif
 
 /*
@@ -3488,6 +3494,13 @@ do_Elf_Rela_relocations ( ObjectCode* oc, char* ehdrC,
          break;
       }
 
+      case R_X86_64_PC64:
+      {
+         StgInt64 off = value - P;
+         *(Elf64_Word *)P = (Elf64_Word)off;
+         break;
+      }
+
       case R_X86_64_32:
          if (value >= 0x7fffffffL) {
              barf("R_X86_64_32 relocation out of range: %s = %p\n",