unsigned long r_symbolnum = array_to_integer (input_reloc->r_symbolnum, 4, 0);
unsigned long r_address = array_to_integer (input_reloc->r_address, 4, 0);
- long symbolnum = (r_symbolnum & 0xffffff);
+ unsigned long symbolnum = (r_symbolnum & 0xffffff);
if ((r_symbolnum >> 27) & 1) { /* ext */
reloc->offset = r_address;
reloc->n_type = ((r_symbolnum >> 24) & 0xff);
- reloc->n_type &= ~(1 << 3);
+ reloc->n_type &= ~(1L << 3);
reloc->r_symbolnum = r_symbolnum;
reloc->n_ext = ((r_symbolnum >> 27) & 1);
if ((r_symbolnum >> 24) & 1) {
reloc->howto = &reloc_howtos[RELOC_TYPE_PC8];
- reloc->addend += reloc->offset + 4;
+ reloc->addend += reloc->offset + 1;
} else {
reloc->howto = &reloc_howtos[RELOC_TYPE_8];
unsigned long r_symbolnum = array_to_integer (input_reloc->r_symbolnum, 4, 0);
unsigned long r_address = array_to_integer (input_reloc->r_address, 4, 0);
- long symbolnum = (r_symbolnum & 0x7ffffff);
+ unsigned long symbolnum = (r_symbolnum & 0x7ffffff);
if ((r_symbolnum >> 31) & 1) { /* ext */
if ((r_symbolnum >> 28) & 1) {
reloc->howto = &reloc_howtos[RELOC_TYPE_PC8];
- reloc->addend += reloc->offset + 4;
+ reloc->addend += reloc->offset + 1;
} else {
reloc->howto = &reloc_howtos[RELOC_TYPE_8];
static void reloc_generic (struct section_part *part, struct reloc_entry *rel, struct symbol *symbol) {
unsigned char opcode = (part->content + rel->offset - 1)[0];
- int size = rel->howto->size;
-
uint64_t result = 0, offset = rel->offset;
- switch (size) {
+ switch (rel->howto->size) {
case 8: {
if (rel->howto->pc_rel) {
result -= (part->rva + offset);
- result -= size;
+ result -= rel->howto->size;
}
}
- if ((unsigned long) size < sizeof (result)) {
+ if ((unsigned long) rel->howto->size < sizeof (result)) {
- unsigned long mask = (((uint64_t) 1) << (CHAR_BIT * size)) - 1;
+ unsigned long mask = (((uint64_t) 1) << (CHAR_BIT * rel->howto->size)) - 1;
result &= mask;
}
}
/*printf ("relocating: %s: %lx, %lx, %lx\n", rel->symbol->name, part->rva + offset + 0x60, result, size);*/
- size = 4;
+ rel->howto->size = 4;
} else if (opcode == 0x9A || opcode == 0xFF) {
*(p + 3) = 0x90;
result -= part->rva + offset;
- result -= size;
+ result -= 4;
- while (size > 2) {
- size--;
+ while (rel->howto->size > 2) {
+ rel->howto->size--;
}
offset++;
*(p + 1) = 0xE8;
result -= part->rva + offset;
- result -= size;
-
- while (size > 2) {
-
- offset++;
- size--;
+ result -= 4;
+ while (rel->howto->size > 2) {
+ rel->howto->size--;
}
+
+ offset += 2;
}
}
- switch (size) {
+ switch (rel->howto->size) {
case 8: {