diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 85656806e975760e93dbb0e620051621f5a95440..7d88606727379499a3a1c451e62db26a5594279e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,12 @@
+2007-07-04  Nick Clifton  <nickc@redhat.com>
+
+	Import this patch from an internal tree:
+	
+	2001-07-17  Richard Henderson  <rth@redhat.com>
+
+	* elf32-mep.c (mep_final_link_relocate) [R_MEP_HI16S]: Correctly
+	compensate for high bit set in R_MEP_LOW16.
+
 2007-07-03  Joseph Myers  <joseph@codesourcery.com>
 
 	* elf32-arm.c (elf32_arm_merge_eabi_attributes): Copy type from
diff --git a/bfd/elf32-mep.c b/bfd/elf32-mep.c
index 0bba7e5010f7865a87613bd1386c02c4ebcab895..d1ee6a96952c81024bccad8c54aee7120b4d9027 100644
--- a/bfd/elf32-mep.c
+++ b/bfd/elf32-mep.c
@@ -333,6 +333,8 @@ mep_final_link_relocate
       byte[3^e2] = ((u >> 16) & 0xff);
       break;
     case R_MEP_HI16S: /* ----------------vutsrqponmlkjihg */
+      if (s & 0x8000)
+	s += 0x10000;
       byte[2^e2] = ((s >> 24) & 0xff);
       byte[3^e2] = ((s >> 16) & 0xff);
       break;