Skip to content

Commit ed8e4e9

Browse files
authored
Merge pull request #740 from DanielSant0s/fix-erl-address-round-bit
fix: remove lower bit add redundancy
2 parents d7a6b35 + e539dfc commit ed8e4e9

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

ee/erl/src/erl.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ static int apply_reloc(u8 * reloc, int type, u32 addr) {
413413
newstate = (u_current_data & 0xfc000000) | (((u_current_data & 0x03ffffff) + (addr >> 2)) & 0x3ffffff);
414414
break;
415415
case R_MIPS_HI16:
416-
newstate = (u_current_data & 0xffff0000) | ((((s_current_data << 16) >> 16) + (addr >> 16) + ((addr & 0xffff) >= 0x8000 ? 1 : 0)) & 0xffff);
416+
newstate = (u_current_data & 0xffff0000) | ((((s_current_data << 16) >> 16) + (addr >> 16) + (((addr & 0xffff) >= 0x8000) && !(u_current_data & 0xf)? 1 : 0)) & 0xffff);
417417
break;
418418
case R_MIPS_LO16:
419419
newstate = (u_current_data & 0xffff0000) | ((((s_current_data << 16) >> 16) + (addr & 0xffff)) & 0xffff);
@@ -878,7 +878,7 @@ return code
878878
if ((reloc.r_info & 255) == R_MIPS_HI16 &&
879879
(has_next_reloc && ((next_reloc.r_info & 255) == R_MIPS_LO16)) &&
880880
(sec[sym[sym_n].st_shndx].sh_addr == sec[sym[next_sym_n].st_shndx].sh_addr) &&
881-
(*(u16*)(erl_record->bytes + sec[sec[i].sh_info].sh_addr + next_reloc.r_offset) + ((u32) (erl_record->bytes + sec[sym[sym_n].st_shndx].sh_addr) & 0x0000ffff)) >= 0x8000
881+
(*(u16*)(erl_record->bytes + sec[sec[i].sh_info].sh_addr + next_reloc.r_offset) + ((u32) (erl_record->bytes + sec[sym[sym_n].st_shndx].sh_addr) & 0x0000ffff)) >= 0x8000
882882
) {
883883
u32 data = *(u32*)(erl_record->bytes + sec[sec[i].sh_info].sh_addr + reloc.r_offset);
884884
*(u32*)(erl_record->bytes + sec[sec[i].sh_info].sh_addr + reloc.r_offset) = data + !(data & 0xf);

0 commit comments

Comments
 (0)