[project @ 2002-04-23 17:33:54 by ken]
[ghc-hetmet.git] / ghc / rts / Linker.c
index 7fbeee0..29dafaf 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Linker.c,v 1.85 2002/03/29 20:46:50 krasimir Exp $
+ * $Id: Linker.c,v 1.88 2002/04/23 17:33:54 ken Exp $
  *
  * (c) The GHC Team, 2000, 2001
  *
@@ -216,6 +216,7 @@ typedef struct _RtsSymbolVal {
       SymX(divExactIntegerzh_fast)             \
       SymX(divModIntegerzh_fast)               \
       SymX(forkzh_fast)                                \
+      SymX(forkProcesszh_fast)                  \
       SymX(freeHaskellFunctionPtr)             \
       SymX(freeStablePtr)                      \
       SymX(gcdIntegerzh_fast)                  \
@@ -240,6 +241,7 @@ typedef struct _RtsSymbolVal {
       SymX(minusIntegerzh_fast)                        \
       SymX(mkApUpd0zh_fast)                    \
       SymX(myThreadIdzh_fast)                  \
+      SymX(labelThreadzh_fast)                  \
       SymX(newArrayzh_fast)                    \
       SymX(newBCOzh_fast)                      \
       SymX(newByteArrayzh_fast)                        \
@@ -1703,7 +1705,7 @@ findElfSection ( void* objImage, Elf32_Word sh_type )
           && i != ehdr->e_shstrndx
          /* Ignore string tables named .stabstr, as they contain
              debugging info. */
-          && 0 != strncmp(".stabstr", sh_strtab + shdr[i].sh_name, 8)
+          && 0 != memcmp(".stabstr", sh_strtab + shdr[i].sh_name, 8)
          ) {
          ptr = ehdrC + shdr[i].sh_offset;
          break;
@@ -1813,7 +1815,7 @@ ocVerifyImage_ELF ( ObjectCode* oc )
           && i != ehdr->e_shstrndx
          /* Ignore string tables named .stabstr, as they contain
              debugging info. */
-          && 0 != strncmp(".stabstr", sh_strtab + shdr[i].sh_name, 8)
+          && 0 != memcmp(".stabstr", sh_strtab + shdr[i].sh_name, 8)
          ) {
          IF_DEBUG(linker,belch("   section %d is a normal string table", i ));
          strtab = ehdrC + shdr[i].sh_offset;
@@ -2144,9 +2146,11 @@ do_Elf32_Rela_relocations ( ObjectCode* oc, char* ehdrC,
    for (j = 0; j < nent; j++) {
       Elf32_Addr  offset = rtab[j].r_offset;
       Elf32_Word  info   = rtab[j].r_info;
+#     if defined(sparc_TARGET_ARCH) || defined(DEBUG)
       Elf32_Sword addend = rtab[j].r_addend;
+      Elf32_Addr  A  = addend;
+#     endif
       Elf32_Addr  P  = ((Elf32_Addr)targ) + offset;
-      Elf32_Addr  A  = addend; /* Do not delete this; it is used on sparc. */
       Elf32_Addr  S;
 #     if defined(sparc_TARGET_ARCH)
       /* This #ifdef only serves to avoid unused-var warnings. */
@@ -2268,7 +2272,7 @@ ocResolve_ELF ( ObjectCode* oc )
          relocation entries that, when done, make the stabs debugging
          info point at the right places.  We ain't interested in all
          dat jazz, mun. */
-      if (0 == strncmp(".rel.stab", sh_strtab + shdr[shnum].sh_name, 9))
+      if (0 == memcmp(".rel.stab", sh_strtab + shdr[shnum].sh_name, 9))
          continue;
 
       if (shdr[shnum].sh_type == SHT_REL ) {