1 /* Native support for GNU/Linux x86. 2 3 Copyright 1986, 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 4 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. 5 6 This file is part of GDB. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 2 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program; if not, write to the Free Software 20 Foundation, Inc., 59 Temple Place - Suite 330, 21 Boston, MA 02111-1307, USA. */ 22 23 #ifndef NM_LINUX_H 24 #define NM_LINUX_H 25 26 /* GNU/Linux supports the i386 hardware debugging registers. */ 27 #define I386_USE_GENERIC_WATCHPOINTS 28 29 #include "i386/nm-i386.h" 30 #include "config/nm-linux.h" 31 32 /* Support for the user area. */ 33 34 /* Return the size of the user struct. */ 35 extern int kernel_u_size (void); 36 #define KERNEL_U_SIZE kernel_u_size() 37 38 /* This is the amount to substract from u.u_ar0 to get the offset in 39 the core file of the register values. */ 40 #define KERNEL_U_ADDR 0 41 42 extern CORE_ADDR register_u_addr (CORE_ADDR blockend, int regnum); 43 #define REGISTER_U_ADDR(addr, blockend, regnum) \ 44 (addr) = register_u_addr (blockend, regnum) 45 46 /* Provide access to the i386 hardware debugging registers. */ 47 48 extern void i386_linux_dr_set_control (unsigned long control); 49 #define I386_DR_LOW_SET_CONTROL(control) \ 50 i386_linux_dr_set_control (control) 51 52 extern void i386_linux_dr_set_addr (int regnum, CORE_ADDR addr); 53 #define I386_DR_LOW_SET_ADDR(regnum, addr) \ 54 i386_linux_dr_set_addr (regnum, addr) 55 56 extern void i386_linux_dr_reset_addr (int regnum); 57 #define I386_DR_LOW_RESET_ADDR(regnum) \ 58 i386_linux_dr_reset_addr (regnum) 59 60 extern unsigned long i386_linux_dr_get_status (void); 61 #define I386_DR_LOW_GET_STATUS() \ 62 i386_linux_dr_get_status () 63 64 65 /* Override copies of {fetch,store}_inferior_registers in `infptrace.c'. */ 66 #define FETCH_INFERIOR_REGISTERS 67 68 /* Nevertheless, define CANNOT_{FETCH,STORE}_REGISTER, because we 69 might fall back on the code `infptrace.c' (well a copy of that code 70 in `i386-linux-nat.c' for now) and we can access only the 71 general-purpose registers in that way. */ 72 extern int cannot_fetch_register (int regno); 73 extern int cannot_store_register (int regno); 74 #define CANNOT_FETCH_REGISTER(regno) cannot_fetch_register (regno) 75 #define CANNOT_STORE_REGISTER(regno) cannot_store_register (regno) 76 77 #ifdef HAVE_PTRACE_GETFPXREGS 78 /* Include register set support for the SSE registers. */ 79 #define FILL_FPXREGSET 80 #endif 81 82 /* Override child_resume in `infptrace.c'. */ 83 #define DEPRECATED_CHILD_RESUME 84 85 /* `linux-nat.c' and `i386-nat.c' have their own versions of 86 child_post_startup_inferior. Define this to use the copy in 87 `i386-linux-nat.c' instead, which calls both. 88 89 NOTE drow/2003-08-17: This is ugly beyond words, but properly 90 fixing it will require some serious surgery. Ideally the target 91 stack could be used for this. */ 92 #define LINUX_CHILD_POST_STARTUP_INFERIOR 93 94 #endif /* nm-linux.h */ 95