--- binutils-2.16.1-atmel.0.99.2.old/bfd/elf32-avr32.c 2006-10-10 13:14:46.000000000 +0200 +++ binutils-2.16.1-atmel.0.99.2.new/bfd/elf32-avr32.c 2007-01-20 23:43:56.000000000 +0100 @@ -1918,7 +1918,7 @@ allocate_reloc_data(bfd *abfd, asection if (!contents) goto out; - diff = bfd_get_32(abfd, contents + rel->r_offset); + diff = bfd_get_signed_32(abfd, contents + rel->r_offset); frag = find_frag(sym_sec, sym_value + rel->r_addend + diff); BFD_ASSERT(frag); rd->reloc_data[i].sub_frag = frag; @@ -2659,7 +2659,7 @@ adjust_relocs(bfd *abfd, asection *sec, /* I realize now that sub_frag is misnamed. It's actually add_frag which is subtracted in this case... */ - diff = bfd_get_32(abfd, contents + rela->r_offset); + diff = bfd_get_signed_32(abfd, contents + rela->r_offset); diff += (r_data->sub_frag->offset_adjust - r_data->add_frag->offset_adjust); bfd_put_32(abfd, diff, contents + rela->r_offset);