diff --git a/src/ia64/tables-ia64.c b/src/ia64/tables-ia64.c
index 14c69b8f..8d0d92d2 100644
--- a/src/ia64/tables-ia64.c
+++ b/src/ia64/tables-ia64.c
@@ -153,7 +153,7 @@ tdep_put_unwind_info (unw_addr_space_t as, unw_proc_info_t *pi, void *arg)
 
 unw_word_t
 _Uia64_find_dyn_list (unw_addr_space_t as, void *table, size_t table_size,
-		      unw_word_t segbase, void *arg)
+		      unw_word_t segbase, unw_word_t gp, void *arg)
 {
   unw_word_t hdr_addr, info_addr, hdr, directives, pers, cookie, off;
   unw_accessors_t *a = unw_get_accessors (as);
@@ -193,7 +193,7 @@ _Uia64_find_dyn_list (unw_addr_space_t as, void *table, size_t table_size,
   if (((ret = (*a->access_mem) (as, info_addr, &directives, 0, arg)) < 0)
       || ((ret = (*a->access_mem) (as, info_addr + 0x08, &pers, 0, arg)) < 0)
       || ((ret = (*a->access_mem) (as, info_addr + 0x10, &cookie, 0, arg)) < 0)
-      || ((ret = (*a->access_mem) (as, info_addr + 0x10, &off, 0, arg)) < 0))
+      || ((ret = (*a->access_mem) (as, info_addr + 0x18, &off, 0, arg)) < 0))
     return 0;
 
   if (directives != 0 || pers != 0
@@ -202,7 +202,7 @@ _Uia64_find_dyn_list (unw_addr_space_t as, void *table, size_t table_size,
     return 0;
 
   /* OK, we ran the gauntlet and found it: */
-  return off + segbase;
+  return off + gp;
 }
 
 #ifndef UNW_REMOTE_ONLY