Refactor (again) the handling of default methods
[ghc-hetmet.git] / rts / Linker.c
index 4e8baff..9833b31 100644 (file)
@@ -877,7 +877,10 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(stable_ptr_table)                  \
       SymI_HasProto(stackOverflow)                     \
       SymI_HasProto(stg_CAF_BLACKHOLE_info)            \
+      SymI_HasProto(stg_BLACKHOLE_info)                        \
       SymI_HasProto(__stg_EAGER_BLACKHOLE_info)                \
+      SymI_HasProto(stg_BLOCKING_QUEUE_CLEAN_info)      \
+      SymI_HasProto(stg_BLOCKING_QUEUE_DIRTY_info)     \
       SymI_HasProto(startTimer)                         \
       SymI_HasProto(stg_MVAR_CLEAN_info)               \
       SymI_HasProto(stg_MVAR_DIRTY_info)               \
@@ -941,6 +944,7 @@ typedef struct _RtsSymbolVal {
       SymI_HasProto(stg_sel_8_upd_info)                        \
       SymI_HasProto(stg_sel_9_upd_info)                        \
       SymI_HasProto(stg_upd_frame_info)                        \
+      SymI_HasProto(stg_bh_upd_frame_info)             \
       SymI_HasProto(suspendThread)                     \
       SymI_HasProto(stg_takeMVarzh)                    \
       SymI_HasProto(stg_threadStatuszh)                        \
@@ -1226,11 +1230,12 @@ static OpenedDLL* opened_dlls = NULL;
 
 #  if defined(OBJFORMAT_ELF) || defined(OBJFORMAT_MACHO)
 
-static char *
+static const char *
 internal_dlopen(const char *dll_name)
 {
    void *hdl;
-   char *errmsg, *errmsg_copy;
+   const char *errmsg;
+   char *errmsg_copy;
 
    // omitted: RTLD_NOW
    // see http://www.haskell.org/pipermail/cvs-ghc/2007-September/038570.html
@@ -1270,7 +1275,7 @@ addDLL( char *dll_name )
 
 #define NMATCH 5
    regmatch_t match[NMATCH];
-   char *errmsg;
+   const char *errmsg;
    FILE* fp;
    size_t match_length;
 #define MAXLINE 1000
@@ -2949,10 +2954,18 @@ ocResolve_PEi386 ( ObjectCode* oc )
 #define Elf_Sym     Elf64_Sym
 #define Elf_Rel     Elf64_Rel
 #define Elf_Rela    Elf64_Rela
+#ifndef ELF_ST_TYPE
 #define ELF_ST_TYPE ELF64_ST_TYPE
+#endif
+#ifndef ELF_ST_BIND
 #define ELF_ST_BIND ELF64_ST_BIND
+#endif
+#ifndef ELF_R_TYPE
 #define ELF_R_TYPE  ELF64_R_TYPE
+#endif
+#ifndef ELF_R_SYM
 #define ELF_R_SYM   ELF64_R_SYM
+#endif
 #else
 #define ELFCLASS    ELFCLASS32
 #define Elf_Addr    Elf32_Addr