--- 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);
