Commit | Line | Data |
---|---|---|
c906108c | 1 | /* Native support for i386 running Solaris 2. |
b6ba6518 | 2 | Copyright 1998, 1999, 2000 Free Software Foundation, Inc. |
c906108c | 3 | |
c5aa993b | 4 | This file is part of GDB. |
c906108c | 5 | |
c5aa993b JM |
6 | This program is free software; you can redistribute it and/or modify |
7 | it under the terms of the GNU General Public License as published by | |
8 | the Free Software Foundation; either version 2 of the License, or | |
9 | (at your option) any later version. | |
c906108c | 10 | |
c5aa993b JM |
11 | This program is distributed in the hope that it will be useful, |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
c906108c | 15 | |
c5aa993b JM |
16 | You should have received a copy of the GNU General Public License |
17 | along with this program; if not, write to the Free Software | |
18 | Foundation, Inc., 59 Temple Place - Suite 330, | |
19 | Boston, MA 02111-1307, USA. */ | |
c906108c SS |
20 | |
21 | #include "nm-sysv4.h" | |
22 | ||
2f09097b ND |
23 | #ifdef NEW_PROC_API /* Solaris 6 and above can do HW watchpoints */ |
24 | ||
25 | #define TARGET_HAS_HARDWARE_WATCHPOINTS | |
26 | ||
27 | /* The man page for proc4 on solaris 6 and 7 says that the system | |
28 | can support "thousands" of hardware watchpoints, but gives no | |
29 | method for finding out how many. So just tell GDB 'yes'. */ | |
30 | #define TARGET_CAN_USE_HARDWARE_WATCHPOINT(TYPE, CNT, OT) 1 | |
31 | ||
32 | /* When a hardware watchpoint fires off the PC will be left at the | |
33 | instruction following the one which caused the watchpoint. | |
34 | It will *NOT* be necessary for GDB to step over the watchpoint. */ | |
35 | #define HAVE_CONTINUABLE_WATCHPOINT | |
36 | ||
14164c30 PS |
37 | /* Solaris x86 2.6 and 2.7 targets have a kernel bug when stepping |
38 | over an instruction that causes a page fault without triggering | |
39 | a hardware watchpoint. The kernel properly notices that it shouldn't | |
40 | stop, because the hardware watchpoint is not triggered, but it forgets | |
41 | the step request and continues the program normally. | |
42 | Work around the problem by removing hardware watchpoints if a step is | |
43 | requested, GDB will check for a hardware watchpoint trigger after the | |
44 | step anyway. */ | |
45 | #define CANNOT_STEP_HW_WATCHPOINTS | |
46 | ||
39f77062 | 47 | extern int procfs_stopped_by_watchpoint (ptid_t); |
2f09097b | 48 | #define STOPPED_BY_WATCHPOINT(W) \ |
39f77062 | 49 | procfs_stopped_by_watchpoint(inferior_ptid) |
2f09097b ND |
50 | |
51 | /* Use these macros for watchpoint insertion/deletion. */ | |
52 | /* type can be 0: write watch, 1: read watch, 2: access watch (read/write) */ | |
53 | ||
39f77062 | 54 | extern int procfs_set_watchpoint (ptid_t, CORE_ADDR, int, int, int); |
2f09097b | 55 | #define target_insert_watchpoint(ADDR, LEN, TYPE) \ |
39f77062 | 56 | procfs_set_watchpoint (inferior_ptid, ADDR, LEN, TYPE, 1) |
2f09097b | 57 | #define target_remove_watchpoint(ADDR, LEN, TYPE) \ |
39f77062 | 58 | procfs_set_watchpoint (inferior_ptid, ADDR, 0, 0, 0) |
2f09097b ND |
59 | |
60 | #endif /* NEW_PROC_API */ |