diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 86217ace13664097aada6078d81ee242c6fa1cc3..5cc050226b57e226b726615389693ead838c2712 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-09-20  Paul Brook  <paul@codesourcery.com>
+
+	gcc/
+	* config/arm/unwind-arm.c (selfrel_offset31): Clear top bit for
+	positive offsets.
+
 2006-09-20  Janis Johnson  <janis187@us.ibm.com>
 
 	* doc/extend.texi (Decimal Float): Update for latest draft TR,
diff --git a/gcc/config/arm/unwind-arm.c b/gcc/config/arm/unwind-arm.c
index b3f8a00dcb59a87bf44aacd713c99561bb1e07a9..9d2513b689794c1f2c20867adc79aad420735846 100644
--- a/gcc/config/arm/unwind-arm.c
+++ b/gcc/config/arm/unwind-arm.c
@@ -337,6 +337,8 @@ selfrel_offset31 (const _uw *p)
   /* Sign extend to 32 bits.  */
   if (offset & (1 << 30))
     offset |= 1u << 31;
+  else
+    offset &= ~(1u << 31);
 
   return offset + (_uw) p;
 }