2009-06-07 Pedro Alves <pedro@codesourcery.com>
authorPedro Alves <palves@redhat.com>
Sun, 7 Jun 2009 22:33:25 +0000 (22:33 +0000)
committerPedro Alves <palves@redhat.com>
Sun, 7 Jun 2009 22:33:25 +0000 (22:33 +0000)
* procfs.h: New.
* proc-utils.h (procfs_first_available): Don't declare here.
* sol-thread.c: Include procfs.h instead of sys/procfs.h and
proc-utils.h.
* procfs.c: Include procfs.h.
(procfs_target): Make it public.  Don't register
procfs_can_use_hw_breakpoint here.
(proc_set_watchpoint): Check for PCWATCH or PIOCSWATCH being
defined instead of TARGET_HAS_HARDWARE_WATCHPOINTS.
(procfs_can_use_hw_breakpoint): Remove check of
TARGET_HAS_HARDWARE_WATCHPOINTS.
(procfs_use_watchpoints): Register procfs_can_use_hw_breakpoint
here.
(_initialize_procfs): Don't add the procfs target here.

* i386-sol2-nat.c: Include target.h and procfs.h.
(_initialize_amd64_sol2_nat): Install the procfs target here,
customized with watchpoints support.
* irix5-nat.c: Include target.h.
(_initialize_core_irix5): Rename to ...
(_initialize_irix5_nat): ... this.  Install the procfs target
here, customized with watchpoints support.
* alpha-nat.c: Include procfs.h.
(_initialize_core_alpha): Rename to...
(_initialize_alpha_nat): ... this.  Install the procfs target
here, customized with watchpoints support.
* sparc-sol2-nat.c: Include target.h and procfs.h.
(_initialize_sparc_sol2_nat): New.

* config/i386/nm-i386sol2.h (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete.
* config/sparc/nm-sol2.h (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete.
* config/mips/irix5.mh (NAT_FILE): Delete.
* config/mips/irix6.mh (NAT_FILE): Delete.
* config/mips/nm-irix5.h: Delete.

2009-06-07  Pedro Alves  <pedro@codesourcery.com>

* gdbint.texinfo (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete all
references.

16 files changed:
gdb/ChangeLog
gdb/alpha-nat.c
gdb/config/i386/nm-i386sol2.h
gdb/config/mips/irix5.mh
gdb/config/mips/irix6.mh
gdb/config/mips/nm-irix5.h [deleted file]
gdb/config/sparc/nm-sol2.h
gdb/doc/ChangeLog
gdb/doc/gdbint.texinfo
gdb/i386-sol2-nat.c
gdb/irix5-nat.c
gdb/proc-utils.h
gdb/procfs.c
gdb/procfs.h [new file with mode: 0644]
gdb/sol-thread.c
gdb/sparc-sol2-nat.c

index a804dadaa71bd2e79cac102379de7b6a410d52dd..74f0071d1ce448e03330725fc4b193fce17a24d7 100644 (file)
@@ -1,3 +1,40 @@
+2009-06-07  Pedro Alves  <pedro@codesourcery.com>
+
+       * procfs.h: New.
+       * proc-utils.h (procfs_first_available): Don't declare here.
+       * sol-thread.c: Include procfs.h instead of sys/procfs.h and
+       proc-utils.h.
+       * procfs.c: Include procfs.h.
+       (procfs_target): Make it public.  Don't register
+       procfs_can_use_hw_breakpoint here.
+       (proc_set_watchpoint): Check for PCWATCH or PIOCSWATCH being
+       defined instead of TARGET_HAS_HARDWARE_WATCHPOINTS.
+       (procfs_can_use_hw_breakpoint): Remove check of
+       TARGET_HAS_HARDWARE_WATCHPOINTS.
+       (procfs_use_watchpoints): Register procfs_can_use_hw_breakpoint
+       here.
+       (_initialize_procfs): Don't add the procfs target here.
+
+       * i386-sol2-nat.c: Include target.h and procfs.h.
+       (_initialize_amd64_sol2_nat): Install the procfs target here,
+       customized with watchpoints support.
+       * irix5-nat.c: Include target.h.
+       (_initialize_core_irix5): Rename to ...
+       (_initialize_irix5_nat): ... this.  Install the procfs target
+       here, customized with watchpoints support.
+       * alpha-nat.c: Include procfs.h.
+       (_initialize_core_alpha): Rename to...
+       (_initialize_alpha_nat): ... this.  Install the procfs target
+       here, customized with watchpoints support.
+       * sparc-sol2-nat.c: Include target.h and procfs.h.
+       (_initialize_sparc_sol2_nat): New.
+
+       * config/i386/nm-i386sol2.h (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete.
+       * config/sparc/nm-sol2.h (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete.
+       * config/mips/irix5.mh (NAT_FILE): Delete.
+       * config/mips/irix6.mh (NAT_FILE): Delete.
+       * config/mips/nm-irix5.h: Delete.
+
 20009-06-07  Pedro  Alves  <pedro@codesourcery.com>
 
        * auxv.c (procfs_xfer_auxv): Change type of the `object' argument
index ff8897f82e6ea05e43ed7272935dbe9419b761b2..7417776b9126594d934251346ffc283b99373c96 100644 (file)
@@ -22,6 +22,7 @@
 #include "inferior.h"
 #include "gdbcore.h"
 #include "target.h"
+#include "procfs.h"
 #include "regcache.h"
 
 #include "alpha-tdep.h"
@@ -183,8 +184,16 @@ static struct core_fns alpha_osf_core_fns =
   NULL                                 /* next */
 };
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_alpha_nat;
+
 void
-_initialize_core_alpha (void)
+_initialize_alpha_nat (void)
 {
+  struct target_ops *t;
+
+  t = procfs_target ();
+  add_target (t);
+
   deprecated_add_core_fns (&alpha_osf_core_fns);
 }
index ab8ff19cc3f19880765dc27a4c659e2f792e1462..495bd64292fb744a30e093f9383b764c6228987b 100644 (file)
@@ -18,8 +18,6 @@
 
 #ifdef NEW_PROC_API    /* Solaris 6 and above can do HW watchpoints */
 
-#define TARGET_HAS_HARDWARE_WATCHPOINTS
-
 /* Solaris x86 2.6 and 2.7 targets have a kernel bug when stepping
    over an instruction that causes a page fault without triggering
    a hardware watchpoint. The kernel properly notices that it shouldn't
index 38c9b3045ed5fc02b3ed6750481836fe92db4153..8d07221dedcd214a25fa956d443f1b3add1efc1b 100644 (file)
@@ -1,4 +1,3 @@
 # Host: SGI Iris running irix 5.x
-NAT_FILE= nm-irix5.h
 NATDEPFILES= fork-child.o irix5-nat.o corelow.o procfs.o \
        proc-api.o proc-events.o proc-flags.o proc-why.o
index de14401d6a6aa6d0ebf713dbdb036104dea1cbc6..de212b2ca5cdd97557d35397df27a1db9b615f30 100644 (file)
@@ -1,4 +1,3 @@
 # Host: SGI Iris running irix 6.x
-NAT_FILE= nm-irix5.h
 NATDEPFILES= fork-child.o irix5-nat.o corelow.o procfs.o \
        proc-api.o proc-events.o proc-flags.o proc-why.o
diff --git a/gdb/config/mips/nm-irix5.h b/gdb/config/mips/nm-irix5.h
deleted file mode 100644 (file)
index 98ff77a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Definitions for native support of irix5.
-
-   Copyright 1993, 1996, 1998, 1999, 2000, 2007, 2008, 2009
-   Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#define TARGET_HAS_HARDWARE_WATCHPOINTS
index 14fb975159ec271049b048b84d588d6377cc22db..3398e2b0ef893b2c704ae694d4b3bc3311e949d0 100644 (file)
 #define GDB_GREGSET_T prgregset_t
 #define GDB_FPREGSET_T prfpregset_t
 
-/* Hardware wactchpoints.  */
-
-/* Solaris 2.6 and above can do HW watchpoints.  */
-#ifdef NEW_PROC_API
-
-#define TARGET_HAS_HARDWARE_WATCHPOINTS
-
-#endif /* NEW_PROC_API */
-
 #endif /* nm-sol2.h */
index 8f51f179f293e075b6e226a75e6eedfc17059797..d4c574a98b63a06f35f2c6346c3d773c40151e74 100644 (file)
@@ -1,3 +1,8 @@
+2009-06-07  Pedro Alves  <pedro@codesourcery.com>
+
+       * gdbint.texinfo (TARGET_HAS_HARDWARE_WATCHPOINTS): Delete all
+       references.
+
 2009-06-04  Ulrich Weigand  <uweigand@de.ibm.com>
 
        * gdbint.texinfo: Rename formal parameters to gdbarch function
index 7acdf2c13025aff72b7895bf9490b8b37b4f6b33..b5771ccf21c602f77164bec7de0d57e7850f97b4 100644 (file)
@@ -694,11 +694,6 @@ changed are announced as hit.
 watchpoints:
 
 @table @code
-@findex TARGET_HAS_HARDWARE_WATCHPOINTS
-@item TARGET_HAS_HARDWARE_WATCHPOINTS
-If defined, the target supports hardware watchpoints.
-(Currently only used for several native configs.)
-
 @findex TARGET_CAN_USE_HARDWARE_WATCHPOINT
 @item TARGET_CAN_USE_HARDWARE_WATCHPOINT (@var{type}, @var{count}, @var{other})
 Return the number of hardware watchpoints of type @var{type} that are
index 7d6d07b8cf7a68e9c45dd4c6ea17002cabee4ab0..68be98d15b21fed61ac335ffef8bf9a3ccd3e656 100644 (file)
@@ -22,6 +22,8 @@
 
 #include <sys/procfs.h>
 #include "gregset.h"
+#include "target.h"
+#include "procfs.h"
 
 /* This file provids the (temporary) glue between the Solaris x86
    target dependent code and the machine independent SVR4 /proc
@@ -134,6 +136,15 @@ extern void _initialize_amd64_sol2_nat (void);
 void
 _initialize_amd64_sol2_nat (void)
 {
+  struct target_ops *t;
+
+  /* Fill in the generic procfs methods.  */
+  t = procfs_target ();
+
+#ifdef NEW_PROC_API    /* Solaris 6 and above can do HW watchpoints */
+  procfs_use_watchpoints (t);
+#endif
+
 #if defined (PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
   amd64_native_gregset32_reg_offset = amd64_sol2_gregset32_reg_offset;
   amd64_native_gregset32_num_regs =
@@ -142,4 +153,6 @@ _initialize_amd64_sol2_nat (void)
   amd64_native_gregset64_num_regs =
     ARRAY_SIZE (amd64_sol2_gregset64_reg_offset);
 #endif
+
+  add_target (t);
 }
index c53c11581897e744291ea5e423f7cbc6e5af8896..91ea948e3d9979c9a25144118f775d5ad0715cd5 100644 (file)
@@ -29,6 +29,7 @@
 #include "gdbcore.h"
 #include "target.h"
 #include "regcache.h"
+#include "procfs.h"
 
 #include "gdb_string.h"
 #include <sys/time.h>
@@ -256,8 +257,17 @@ static struct core_fns irix5_core_fns =
   NULL                                 /* next */
 };
 
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_irix5_nat;
+
 void
-_initialize_core_irix5 (void)
+_initialize_irix5_nat (void)
 {
+  struct target_ops *t;
+
+  t = procfs_target ();
+  procfs_use_watchpoints (t);
+  add_target (t);
+
   deprecated_add_core_fns (&irix5_core_fns);
 }
index cf52ff60cd7f183de989488ed4538f3b757389c7..01e33ee6e9923c1b8017c5438c9ff0c62f482ab4 100644 (file)
@@ -96,8 +96,3 @@ typedef PROC_CTL_WORD_TYPE procfs_ctl_t;
 #else
 typedef long procfs_ctl_t;
 #endif
-
-
-/* From procfs.c */
-
-extern ptid_t procfs_first_available (void);
index 1e246bec53d07f8c67726833375a11cba2d20376..37074b2aac322a598c67c1bf4e4010705dae6935 100644 (file)
@@ -50,6 +50,7 @@
 #include "gdb_assert.h"
 #include "inflow.h"
 #include "auxv.h"
+#include "procfs.h"
 
 /*
  * PROCFS.C
@@ -181,7 +182,7 @@ procfs_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
 }
 #endif
 
-static struct target_ops *
+struct target_ops *
 procfs_target (void)
 {
   struct target_ops *t = inf_child_target ();
@@ -212,7 +213,6 @@ procfs_target (void)
   t->to_has_thread_control  = tc_schedlock;
   t->to_find_memory_regions = proc_find_memory_regions;
   t->to_make_corefile_notes = procfs_make_note_section;
-  t->to_can_use_hw_breakpoint = procfs_can_use_hw_breakpoint;
 
 #if defined(PR_MODEL_NATIVE) && (PR_MODEL_NATIVE == PR_MODEL_LP64)
   t->to_auxv_parse = procfs_auxv_parse;
@@ -2902,7 +2902,10 @@ procfs_address_to_host_pointer (CORE_ADDR addr)
 int
 proc_set_watchpoint (procinfo *pi, CORE_ADDR addr, int len, int wflags)
 {
-#if !defined (TARGET_HAS_HARDWARE_WATCHPOINTS)
+#if !defined (PCWATCH) && !defined (PIOCSWATCH)
+  /* If neither or these is defined, we can't support watchpoints.
+     This just avoids possibly failing to compile the below on such
+     systems.  */
   return 0;
 #else
 /* Horrible hack!  Detect Solaris 2.5, because this doesn't work on 2.5 */
@@ -5294,9 +5297,6 @@ procfs_set_watchpoint (ptid_t ptid, CORE_ADDR addr, int len, int rwflag,
 static int
 procfs_can_use_hw_breakpoint (int type, int cnt, int othertype)
 {
-#ifndef TARGET_HAS_HARDWARE_WATCHPOINTS
-  return 0;
-#else
   /* Due to the way that proc_set_watchpoint() is implemented, host
      and target pointers must be of the same size.  If they are not,
      we can't use hardware watchpoints.  This limitation is due to the
@@ -5312,7 +5312,6 @@ procfs_can_use_hw_breakpoint (int type, int cnt, int othertype)
   /* Other tests here???  */
 
   return 1;
-#endif
 }
 
 /*
@@ -5394,6 +5393,7 @@ procfs_use_watchpoints (struct target_ops *t)
   t->to_insert_watchpoint = procfs_insert_watchpoint;
   t->to_remove_watchpoint = procfs_remove_watchpoint;
   t->to_region_ok_for_hw_watchpoint = procfs_region_ok_for_hw_watchpoint;
+  t->to_can_use_hw_breakpoint = procfs_can_use_hw_breakpoint;
 }
 
 /*
@@ -5988,16 +5988,6 @@ proc_untrace_sysexit_cmd (char *args, int from_tty)
 void
 _initialize_procfs (void)
 {
-  struct target_ops * t;
-
-  t = procfs_target ();
-
-#ifdef TARGET_HAS_HARDWARE_WATCHPOINTS
-  procfs_use_watchpoints (t);
-#endif
-
-  add_target (t);
-
   add_info ("proc", info_proc_cmd, _("\
 Show /proc process information about any running process.\n\
 Specify process id, or use the program being debugged by default.\n\
diff --git a/gdb/procfs.h b/gdb/procfs.h
new file mode 100644 (file)
index 0000000..6e8b302
--- /dev/null
@@ -0,0 +1,36 @@
+/* Native debugging support for procfs targets.
+
+   Copyright (C) 2009 Free Software Foundation, Inc.
+
+   This file is part of GDB.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+struct target_ops;
+
+/* Create a prototype generic procfs target.  The client can override
+   it with local methods.  */
+
+extern struct target_ops *procfs_target (void);
+
+/* Call this in the native _initialize routine that creates and
+   customizes the prototype target returned by procfs_target, if the
+   native debug interface supports procfs watchpoints.  */
+
+extern void procfs_use_watchpoints (struct target_ops *t);
+
+/* Return a ptid for which we guarantee we will be able to find a
+   'live' procinfo.  */
+
+extern ptid_t procfs_first_available (void);
index 8c7865b0cfbfb78b4fe260288215fdd6c7aae355..512239eeafb746dae53120634699bad5bd97837b 100644 (file)
@@ -66,8 +66,7 @@
 #include "symfile.h"
 #include "observer.h"
 #include "gdb_string.h"
-#include <sys/procfs.h>
-#include "proc-utils.h"
+#include "procfs.h"
 
 struct target_ops sol_thread_ops;
 
index 3854fd920c459df2728a41df23b1b72a179785ca..e14af5948495b0e7c0ad9bf443bd1645d6a21ea9 100644 (file)
@@ -24,6 +24,8 @@
 #include "gregset.h"
 
 #include "sparc-tdep.h"
+#include "target.h"
+#include "procfs.h"
 
 /* This file provids the (temporary) glue between the Solaris SPARC
    target dependent code and the machine independent SVR4 /proc
@@ -94,3 +96,18 @@ fill_fpregset (const struct regcache *regcache, prfpregset_t *fpregs, int regnum
 {
   sparc_collect_fpregset (regcache, regnum, fpregs);
 }
+
+/* Provide a prototype to silence -Wmissing-prototypes.  */
+extern initialize_file_ftype _initialize_sparc_sol2_nat;
+
+void
+_initialize_sparc_sol2_nat (void)
+{
+  struct target_ops *t;
+
+  t = procfs_target ();
+#ifdef NEW_PROC_API    /* Solaris 6 and above can do HW watchpoints */
+  procfs_use_watchpoints (t);
+#endif
+  add_target (t);
+}