Mach-O Linker: eradicate some warnings
MERGE TO STABLE
// symbol, so we don't have to allocate too many
// jump islands.
struct symtab_command *symLC = (struct symtab_command *) lc;
// symbol, so we don't have to allocate too many
// jump islands.
struct symtab_command *symLC = (struct symtab_command *) lc;
- int min = symLC->nsyms, max = 0;
+ unsigned min = symLC->nsyms, max = 0;
struct nlist *nlist =
symLC ? (struct nlist*) ((char*) oc->image + symLC->symoff)
: NULL;
struct nlist *nlist =
symLC ? (struct nlist*) ((char*) oc->image + symLC->symoff)
: NULL;
return ocAllocateJumpIslands(oc,0,0);
}
return ocAllocateJumpIslands(oc,0,0);
}
-static int ocVerifyImage_MachO(ObjectCode* oc)
+static int ocVerifyImage_MachO(ObjectCode* oc STG_UNUSED)
{
// FIXME: do some verifying here
return 1;
{
// FIXME: do some verifying here
return 1;
-static char* relocateAddress(
+static unsigned long relocateAddress(
ObjectCode* oc,
int nSections,
struct section* sections,
ObjectCode* oc,
int nSections,
struct section* sections,
if(sections[i].addr <= address
&& address < sections[i].addr + sections[i].size)
{
if(sections[i].addr <= address
&& address < sections[i].addr + sections[i].size)
{
- return oc->image + sections[i].offset + address - sections[i].addr;
+ return (unsigned long)oc->image
+ + sections[i].offset + address - sections[i].addr;
}
}
barf("Invalid Mach-O file:"
"Address out of bounds while relocating object file");
}
}
barf("Invalid Mach-O file:"
"Address out of bounds while relocating object file");
}
static int relocateSection(
}
static int relocateSection(
{
unsigned long word = 0;
unsigned long jumpIsland = 0;
{
unsigned long word = 0;
unsigned long jumpIsland = 0;
- long offsetToJumpIsland;
+ long offsetToJumpIsland = 0xBADBAD42; // initialise to bad value
+ // to avoid warning and to catch
+ // bugs.
unsigned long* wordPtr = (unsigned long*) (image + sect->offset + reloc->r_address);
checkProddableBlock(oc,wordPtr);
unsigned long* wordPtr = (unsigned long*) (image + sect->offset + reloc->r_address);
checkProddableBlock(oc,wordPtr);
{
struct nlist *symbol = &nlist[reloc->r_symbolnum];
char *nm = image + symLC->stroff + symbol->n_un.n_strx;
{
struct nlist *symbol = &nlist[reloc->r_symbolnum];
char *nm = image + symLC->stroff + symbol->n_un.n_strx;
- unsigned long symbolAddress = (unsigned long) (lookupSymbol(nm));
+ void *symbolAddress = lookupSymbol(nm);
if(!symbolAddress)
{
errorBelch("\nunknown symbol `%s'", nm);
if(!symbolAddress)
{
errorBelch("\nunknown symbol `%s'", nm);
// In the .o file, this should be a relative jump to NULL
// and we'll change it to a jump to a relative jump to the symbol
ASSERT(-word == reloc->r_address);
// In the .o file, this should be a relative jump to NULL
// and we'll change it to a jump to a relative jump to the symbol
ASSERT(-word == reloc->r_address);
+ word = (unsigned long) symbolAddress;
jumpIsland = makeJumpIsland(oc,reloc->r_symbolnum,word);
word -= ((long)image) + sect->offset + reloc->r_address;
if(jumpIsland != 0)
jumpIsland = makeJumpIsland(oc,reloc->r_symbolnum,word);
word -= ((long)image) + sect->offset + reloc->r_address;
if(jumpIsland != 0)
+ word += (unsigned long) symbolAddress;
char *image = (char*) oc->image;
struct mach_header *header = (struct mach_header*) image;
struct load_command *lc = (struct load_command*) (image + sizeof(struct mach_header));
char *image = (char*) oc->image;
struct mach_header *header = (struct mach_header*) image;
struct load_command *lc = (struct load_command*) (image + sizeof(struct mach_header));
+ unsigned i,curSymbol = 0;
struct segment_command *segLC = NULL;
struct section *sections;
struct symtab_command *symLC = NULL;
struct segment_command *segLC = NULL;
struct section *sections;
struct symtab_command *symLC = NULL;
for(i=0;i<symLC->nsyms;i++)
{
if(nlist[i].n_type & N_STAB)
for(i=0;i<symLC->nsyms;i++)
{
if(nlist[i].n_type & N_STAB)