]> git.ipfire.org Git - people/arne_f/ipfire-3.x.git/blobdiff - gdb/patches/gdb-6.3-ia64-gcore-speedup-20050714.patch
gdb: Update to version 7.12
[people/arne_f/ipfire-3.x.git] / gdb / patches / gdb-6.3-ia64-gcore-speedup-20050714.patch
diff --git a/gdb/patches/gdb-6.3-ia64-gcore-speedup-20050714.patch b/gdb/patches/gdb-6.3-ia64-gcore-speedup-20050714.patch
deleted file mode 100644 (file)
index f902e62..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-2005-07-14  Jeff Johnsotn  <jjohnstn@redhat.com>
-
-       * linux-nat.c (linux_nat_xfer_memory): Incorporate Fujitsu
-       work-around to use /proc/mem for storage, but to fall-back
-       to PTRACE for ia64 rse register areas.
-       * ia64-linux-nat.c (ia64_rse_slot_num): New static function.
-       (ia64_rse_skip_regs): Ditto.
-       (ia64_linux_check_stack_region): New function.
-       
-Index: gdb-6.8.50.20090803/gdb/linux-nat.c
-===================================================================
---- gdb-6.8.50.20090803.orig/gdb/linux-nat.c   2009-08-04 06:29:55.000000000 +0200
-+++ gdb-6.8.50.20090803/gdb/linux-nat.c        2009-08-04 06:30:53.000000000 +0200
-@@ -4495,15 +4495,38 @@ linux_xfer_partial (struct target_ops *o
-       offset &= ((ULONGEST) 1 << addr_bit) - 1;
-     }
--#ifndef NATIVE_XFER_UNWIND_TABLE
--  /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
--          for accessing thread storage.  Revert when Bugzilla 147436
--          is fixed.  */
-   xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
-                                 offset, len);
-   if (xfer != 0)
--    return xfer;
-+    {
-+#ifdef NATIVE_XFER_UNWIND_TABLE
-+      struct mem_region range;
-+      range.lo = memaddr;
-+      range.hi = memaddr + len;
-+
-+      /* FIXME: For ia64, we cannot currently use
-+       linux_proc_xfer_partial for accessing rse register storage.
-+       Revert when Bugzilla 147436 is fixed.  */
-+#ifdef NATIVE_XFER_UNWIND_TABLE
-+      extern int ia64_linux_check_stack_region (struct lwp_info *lwp,
-+                                              void *range);
-+#endif
-+      if (iterate_over_lwps (ia64_linux_check_stack_region, &range) != NULL)
-+      { /* This region contains ia64 rse registers, we have to re-read.  */
-+        int xxfer;
-+
-+        /* Re-read register stack area.  */
-+        xxfer = super_xfer_partial (ops, object, annex,
-+                                    readbuf + (range.lo - memaddr),
-+                                    writebuf + (range.lo - memaddr),
-+                                    offset + (range.lo - memaddr),
-+                                    range.hi - range.lo);
-+        if (xxfer == 0)
-+          xfer = 0;
-+      }
- #endif
-+      return xfer;
-+    }
-   return super_xfer_partial (ops, object, annex, readbuf, writebuf,
-                            offset, len);
-Index: gdb-6.8.50.20090803/gdb/ia64-linux-nat.c
-===================================================================
---- gdb-6.8.50.20090803.orig/gdb/ia64-linux-nat.c      2009-02-23 01:03:49.000000000 +0100
-+++ gdb-6.8.50.20090803/gdb/ia64-linux-nat.c   2009-08-04 06:30:53.000000000 +0200
-@@ -809,6 +809,64 @@ ia64_linux_xfer_partial (struct target_o
- void _initialize_ia64_linux_nat (void);
-+/*
-+ * Note: taken from ia64_tdep.c
-+ *
-+ */
-+
-+static __inline__ unsigned long
-+ia64_rse_slot_num (unsigned long addr)
-+{
-+  return (addr >> 3) & 0x3f;
-+}
-+
-+/* Skip over a designated number of registers in the backing
-+   store, remembering every 64th position is for NAT.  */
-+static __inline__ unsigned long
-+ia64_rse_skip_regs (unsigned long  addr, long num_regs)
-+{
-+  long delta = ia64_rse_slot_num(addr) + num_regs;
-+
-+  if (num_regs < 0)
-+    delta -= 0x3e;
-+  return addr + ((num_regs + delta/0x3f) << 3);
-+}
-+
-+/*
-+ * Check mem_region is stack or not. If stack, /proc/<pid>/mem cannot return 
-+ * expected value.
-+ */
-+int ia64_linux_check_stack_region(struct lwp_info *ti, struct mem_region *range)
-+{
-+      CORE_ADDR addr;
-+      int error;
-+      unsigned long bsp, cfm, bspstore;
-+      long sof;
-+      pid_t pid = ptid_get_lwp(ti->ptid);
-+      bsp = ptrace(PTRACE_PEEKUSER, pid, PT_AR_BSP ,NULL);
-+      if (bsp == (unsigned long)-1) {
-+              return 1;
-+      }
-+      /* stack is allocated by one-segment, not separated into several segments.
-+         So, we only have to check whether bsp is in *range* or not. */               
-+      if((range->lo <= bsp) && (bsp <= range->hi)) {
-+              bspstore = ptrace(PTRACE_PEEKUSER, pid, PT_AR_BSPSTORE, NULL);
-+              cfm = ptrace(PTRACE_PEEKUSER, pid, PT_CFM, NULL);
-+              sof = cfm & 0x3f;
-+              bsp = ia64_rse_skip_regs(bsp, -sof);
-+              range->lo = bspstore;
-+              range->hi = bsp;
-+              /* we have to check the size of dirty register stack area */
-+              /*
-+              fprintf_unfiltered(gdb_stdlog, "<%d> <%p>  <%lx> <%p> <%p>\n",
-+                                 pid, bsp, sof, range->lo, range->hi);
-+              */
-+              return 1;
-+      }
-+      
-+      return 0;
-+}
-+
- void
- _initialize_ia64_linux_nat (void)
- {