This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[commit] Fix hppa-hpux-tdep.c


This wasn't properly gdb_byte'ified, and made some bad assumptions.
This compiles without warnings now on my HP-UX 11.00 system.

Mark


Index: ChangeLog
from  Mark Kettenis  <kettenis@gnu.org>

	* hppa-tdep.h (HPPA_INSN_SIZE): New define.
	* hppa-hpux-tdep.c (hppa_hpux_search_pattern)
	(hppa64_hpux_search_dummy_call_sequence): Rewrite to avoid
	assumption on sizeof(unsigned).

Index: hppa-tdep.h
===================================================================
RCS file: /cvs/src/src/gdb/hppa-tdep.h,v
retrieving revision 1.21
diff -u -p -r1.21 hppa-tdep.h
--- hppa-tdep.h 18 Jul 2005 20:34:09 -0000 1.21
+++ hppa-tdep.h 29 Oct 2005 21:30:12 -0000
@@ -75,6 +75,9 @@ enum hppa_regnum
   HPPA_ARG3_REGNUM = 23		/* The fourth argument of a callee. */
 };
 
+/* Instruction size.  */
+#define HPPA_INSN_SIZE 4
+
 /* Target-dependent structure in gdbarch.  */
 struct gdbarch_tdep
 {
Index: hppa-hpux-tdep.c
===================================================================
RCS file: /cvs/src/src/gdb/hppa-hpux-tdep.c,v
retrieving revision 1.42
diff -u -p -r1.42 hppa-hpux-tdep.c
--- hppa-hpux-tdep.c 18 Jul 2005 20:34:09 -0000 1.42
+++ hppa-hpux-tdep.c 29 Oct 2005 21:30:14 -0000
@@ -1,6 +1,6 @@
 /* Target-dependent code for HP-UX on PA-RISC.
 
-   Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -1309,32 +1309,31 @@ static CORE_ADDR
 hppa_hpux_search_pattern (CORE_ADDR start, CORE_ADDR end, 
 			  unsigned int *patterns, int count)
 {
-  unsigned int *buf;
+  int num_insns = (end - start + HPPA_INSN_SIZE) / HPPA_INSN_SIZE;
+  unsigned int *insns;
+  gdb_byte *buf;
   int offset, i;
-  int region, insns;
 
-  region = end - start + 4;
-  insns = region / 4;
-  buf = (unsigned int *) alloca (region);
+  buf = alloca (num_insns * HPPA_INSN_SIZE);
+  insns = alloca (num_insns * sizeof (unsigned int));
 
-  read_memory (start, (char *) buf, region);
+  read_memory (start, buf, num_insns * HPPA_INSN_SIZE);
+  for (i = 0; i < num_insns; i++, buf += HPPA_INSN_SIZE)
+    insns[i] = extract_unsigned_integer (buf, HPPA_INSN_SIZE);
 
-  for (i = 0; i < insns; i++)
-    buf[i] = extract_unsigned_integer (&buf[i], 4);
-
-  for (offset = 0; offset <= insns - count; offset++)
+  for (offset = 0; offset <= num_insns - count; offset++)
     {
       for (i = 0; i < count; i++)
         {
-	  if ((buf[offset + i] & patterns[i]) != patterns[i])
+	  if ((insns[offset + i] & patterns[i]) != patterns[i])
 	    break;
 	}
       if (i == count)
         break;
     }
-    
-  if (offset <= insns - count)
-    return start + offset * 4;
+
+  if (offset <= num_insns - count)
+    return start + offset * HPPA_INSN_SIZE;
   else
     return 0;
 }
@@ -1472,7 +1471,7 @@ hppa64_hpux_search_dummy_call_sequence (
     {
       CORE_ADDR begin, end;
       char *name;
-      unsigned int insns[2];
+      gdb_byte buf[2 * HPPA_INSN_SIZE];
       int offset;
 
       find_pc_partial_function (SYMBOL_VALUE_ADDRESS (msym), &name,
@@ -1481,16 +1480,16 @@ hppa64_hpux_search_dummy_call_sequence (
       if (name == NULL || begin == 0 || end == 0)
         continue;
 
-      if (target_read_memory (end - sizeof (insns), (char *)insns, sizeof (insns)) == 0)
+      if (target_read_memory (end - sizeof (buf), buf, sizeof (buf)) == 0)
         {
-	  for (offset = 0; offset < ARRAY_SIZE (insns); offset++)
+	  for (offset = 0; offset < sizeof (buf); offset++)
 	    {
 	      unsigned int insn;
 
-	      insn = extract_unsigned_integer (&insns[offset], 4);
+	      insn = extract_unsigned_integer (buf + offset, HPPA_INSN_SIZE);
 	      if (insn == 0xe840d002) /* bve,n (rp) */
 	        {
-		  addr = (end - sizeof (insns)) + (offset * 4);
+		  addr = (end - sizeof (buf)) + offset;
 		  goto found_pattern;
 		}
 	    }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]