Index: elfxx-mips.c =================================================================== RCS file: /cvs/src/src/bfd/elfxx-mips.c,v retrieving revision 1.297 diff -u -p -r1.297 elfxx-mips.c --- elfxx-mips.c 8 Dec 2011 20:47:24 -0000 1.297 +++ elfxx-mips.c 10 Dec 2011 09:21:06 -0000 @@ -5553,7 +5553,9 @@ mips_elf_calculate_relocation (bfd *abfd /* See the comment for R_MIPS16_HI16 above for the reason for this conditional. */ if (r_type == R_MIPS16_LO16) - value = addend + gp - p; + /* MIPS16 addiupc clears the lower two PC address bits + before adding. */ + value = addend + gp - (p & ~(bfd_vma) 0x3); else if (r_type == R_MICROMIPS_LO16 || r_type == R_MICROMIPS_HI0_LO16) value = addend + gp - p + 3;