X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=rts%2FLinker.c;h=81e3f3cc61f9f418bc9594c58b610ee33f1c1b35;hb=ec064b6d9d43b1655dd24df06d29b5e43940c7d6;hp=715731bc33ac84c80df54a8377f6d3dd8dad19b0;hpb=cfb90f76b6c6f124ff0c449c7d08342953c2992c;p=ghc-hetmet.git diff --git a/rts/Linker.c b/rts/Linker.c index 715731b..81e3f3c 100644 --- a/rts/Linker.c +++ b/rts/Linker.c @@ -354,15 +354,6 @@ typedef struct _RtsSymbolVal { #define RTS_POSIX_ONLY_SYMBOLS /**/ #define RTS_CYGWIN_ONLY_SYMBOLS /**/ -/* Extra syms gen'ed by mingw-2's gcc-3.2: */ -#if __GNUC__>=3 -#define RTS_MINGW_EXTRA_SYMS \ - SymI_NeedsProto(_imp____mb_cur_max) \ - SymI_NeedsProto(_imp___pctype) -#else -#define RTS_MINGW_EXTRA_SYMS -#endif - #if HAVE_GETTIMEOFDAY #define RTS_MINGW_GETTIMEOFDAY_SYM SymI_NeedsProto(gettimeofday) #else @@ -463,11 +454,14 @@ typedef struct _RtsSymbolVal { SymI_NeedsProto(opendir) \ SymI_NeedsProto(readdir) \ SymI_NeedsProto(rewinddir) \ - RTS_MINGW_EXTRA_SYMS \ + SymI_NeedsProto(_imp____mb_cur_max) \ + SymI_NeedsProto(_imp___pctype) \ + SymI_NeedsProto(__chkstk) \ RTS_MINGW_GETTIMEOFDAY_SYM \ SymI_NeedsProto(closedir) #endif + #if defined(darwin_HOST_OS) && HAVE_PRINTF_LDBLSTUB #define RTS_DARWIN_ONLY_SYMBOLS \ SymI_NeedsProto(asprintf$LDBLStub) \ @@ -1669,6 +1663,8 @@ loadArchive( char *path ) int isObject; char tmp[12]; + IF_DEBUG(linker, debugBelch("loadArchive `%s'\n", path)); + fileSize = 32; file = stgMallocBytes(fileSize, "loadArchive(file)"); @@ -1727,7 +1723,7 @@ loadArchive( char *path ) file = stgReallocBytes(file, fileSize, "loadArchive(file)"); } n = fread ( file, 1, fileNameSize, f ); - if (n != fileNameSize) + if (n != (int)fileNameSize) barf("loadArchive: Failed reading filename from `%s'", path); } else { @@ -1735,8 +1731,8 @@ loadArchive( char *path ) } isObject = 0; - for (n = 0; n < fileNameSize - 1; n++) { - if ((file[n] == '.') && (file[n] == 'o')) { + for (n = 0; n < (int)fileNameSize - 1; n++) { + if ((file[n] == '.') && (file[n + 1] == 'o')) { isObject = 1; break; } @@ -1918,6 +1914,8 @@ static HsInt loadOc( ObjectCode* oc ) { int r; + IF_DEBUG(linker, debugBelch("loadOc\n")); + # if defined(OBJFORMAT_MACHO) && (defined(powerpc_HOST_ARCH) || defined(x86_64_HOST_ARCH)) r = ocAllocateSymbolExtras_MachO ( oc ); if (!r) { @@ -4859,6 +4857,8 @@ static int ocGetNames_MachO(ObjectCode* oc) char *commonStorage = NULL; unsigned long commonCounter; + IF_DEBUG(linker,debugBelch("ocGetNames_MachO\n")); + for(i=0;incmds;i++) { if(lc->cmd == LC_SEGMENT || lc->cmd == LC_SEGMENT_64) @@ -4948,6 +4948,7 @@ static int ocGetNames_MachO(ObjectCode* oc) ; // weak definition, and we already have a definition else { + IF_DEBUG(linker,debugBelch("Adding symbol 1 %s\n", nm)); ghciInsertStrHashTable(oc->fileName, symhash, nm, image + sections[nlist[i].n_sect-1].offset @@ -4974,6 +4975,7 @@ static int ocGetNames_MachO(ObjectCode* oc) nlist[i].n_value = commonCounter; + IF_DEBUG(linker,debugBelch("Adding symbol 2 %s\n", nm)); ghciInsertStrHashTable(oc->fileName, symhash, nm, (void*)commonCounter); oc->symbols[curSymbol++] = nm;