diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 377c0a0747a1012c56db3bc027bc74f34877a386..362d8ca864c0846f24d25e6acb8916cd8f810478 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2001-10-22  Hans-Peter Nilsson  <hp@bitrange.com>
+
+	* unwind-dw2-fde.c (fde_unencoded_compare): Derefer pc_begin
+	fields when comparing.
+
 2001-10-22  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	* arm.h (HOST_INT, HOST_UINT): Delete.  Remove all uses.
diff --git a/gcc/unwind-dw2-fde.c b/gcc/unwind-dw2-fde.c
index 729adbbd4ab7201a7abbdda6141c0b659cb26a80..70526856a14dd992f53d2d4188ef4f6485be107b 100644
--- a/gcc/unwind-dw2-fde.c
+++ b/gcc/unwind-dw2-fde.c
@@ -297,9 +297,12 @@ static int
 fde_unencoded_compare (struct object *ob __attribute__((unused)),
 		       fde *x, fde *y)
 {
-  if (x->pc_begin > y->pc_begin)
+  _Unwind_Ptr x_ptr = *(_Unwind_Ptr *) x->pc_begin;
+  _Unwind_Ptr y_ptr = *(_Unwind_Ptr *) y->pc_begin;
+
+  if (x_ptr > y_ptr)
     return 1;
-  if (x->pc_begin < y->pc_begin)
+  if (x_ptr < y_ptr)
     return -1;
   return 0;
 }