From 743b930b5935b474bec050a1598344b8580eaab9 Mon Sep 17 00:00:00 2001
From: Kevin Buettner <kevinb@redhat.com>
Date: Sat, 21 Dec 2002 06:43:25 +0000
Subject: Add DT_MIPS_RLD_MAP case for 64-bit targets.

---
 gdb/solib-svr4.c | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

(limited to 'gdb/solib-svr4.c')

diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c
index 78161e0..8ced5f0 100644
--- a/gdb/solib-svr4.c
+++ b/gdb/solib-svr4.c
@@ -446,15 +446,16 @@ elf_locate_base (void)
 	  else if (dyn_tag == DT_MIPS_RLD_MAP)
 	    {
 	      char *pbuf;
+	      int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
 
-	      pbuf = alloca (TARGET_PTR_BIT / HOST_CHAR_BIT);
+	      pbuf = alloca (pbuf_size);
 	      /* DT_MIPS_RLD_MAP contains a pointer to the address
 		 of the dynamic link structure.  */
 	      dyn_ptr = bfd_h_get_32 (exec_bfd, 
 				      (bfd_byte *) x_dynp->d_un.d_ptr);
-	      if (target_read_memory (dyn_ptr, pbuf, sizeof (pbuf)))
+	      if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
 		return 0;
-	      return extract_unsigned_integer (pbuf, sizeof (pbuf));
+	      return extract_unsigned_integer (pbuf, pbuf_size);
 	    }
 	}
     }
@@ -477,6 +478,20 @@ elf_locate_base (void)
 				      (bfd_byte *) x_dynp->d_un.d_ptr);
 	      return dyn_ptr;
 	    }
+	  else if (dyn_tag == DT_MIPS_RLD_MAP)
+	    {
+	      char *pbuf;
+	      int pbuf_size = TARGET_PTR_BIT / HOST_CHAR_BIT;
+
+	      pbuf = alloca (pbuf_size);
+	      /* DT_MIPS_RLD_MAP contains a pointer to the address
+		 of the dynamic link structure.  */
+	      dyn_ptr = bfd_h_get_64 (exec_bfd, 
+				      (bfd_byte *) x_dynp->d_un.d_ptr);
+	      if (target_read_memory (dyn_ptr, pbuf, pbuf_size))
+		return 0;
+	      return extract_unsigned_integer (pbuf, pbuf_size);
+	    }
 	}
     }
 
-- 
cgit v1.1