projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix indexing error in archive loader
[ghc-hetmet.git]
/
rts
/
Linker.c
diff --git
a/rts/Linker.c
b/rts/Linker.c
index
715731b
..
33daea3
100644
(file)
--- a/
rts/Linker.c
+++ b/
rts/Linker.c
@@
-1669,6
+1669,8
@@
loadArchive( char *path )
int isObject;
char tmp[12];
int isObject;
char tmp[12];
+ IF_DEBUG(linker, debugBelch("loadArchive `%s'\n", path));
+
fileSize = 32;
file = stgMallocBytes(fileSize, "loadArchive(file)");
fileSize = 32;
file = stgMallocBytes(fileSize, "loadArchive(file)");
@@
-1727,7
+1729,7
@@
loadArchive( char *path )
file = stgReallocBytes(file, fileSize, "loadArchive(file)");
}
n = fread ( file, 1, fileNameSize, f );
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 {
barf("loadArchive: Failed reading filename from `%s'", path);
}
else {
@@
-1735,8
+1737,8
@@
loadArchive( char *path )
}
isObject = 0;
}
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;
}
isObject = 1;
break;
}
@@
-1918,6
+1920,8
@@
static HsInt
loadOc( ObjectCode* oc ) {
int r;
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) {
# if defined(OBJFORMAT_MACHO) && (defined(powerpc_HOST_ARCH) || defined(x86_64_HOST_ARCH))
r = ocAllocateSymbolExtras_MachO ( oc );
if (!r) {
@@
-4859,6
+4863,8
@@
static int ocGetNames_MachO(ObjectCode* oc)
char *commonStorage = NULL;
unsigned long commonCounter;
char *commonStorage = NULL;
unsigned long commonCounter;
+ IF_DEBUG(linker,debugBelch("ocGetNames_MachO\n"));
+
for(i=0;i<header->ncmds;i++)
{
if(lc->cmd == LC_SEGMENT || lc->cmd == LC_SEGMENT_64)
for(i=0;i<header->ncmds;i++)
{
if(lc->cmd == LC_SEGMENT || lc->cmd == LC_SEGMENT_64)
@@
-4948,6
+4954,7
@@
static int ocGetNames_MachO(ObjectCode* oc)
; // weak definition, and we already have a definition
else
{
; // 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
ghciInsertStrHashTable(oc->fileName, symhash, nm,
image
+ sections[nlist[i].n_sect-1].offset
@@
-4974,6
+4981,7
@@
static int ocGetNames_MachO(ObjectCode* oc)
nlist[i].n_value = commonCounter;
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;
ghciInsertStrHashTable(oc->fileName, symhash, nm,
(void*)commonCounter);
oc->symbols[curSymbol++] = nm;