nm-i386-macosx.h   [plain text]


/* Macro definitions for GDB on an Intel i386 running SVR4.
   Copyright (C) 1991, 1994 Free Software Foundation, Inc.
   Written by Fred Fish at Cygnus Support (fnf@cygnus.com)

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 2 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, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */

#ifndef NM_I386NEXT_H
#define NM_I386NEXT_H

#ifdef HAVE_X86_DEBUG_STATE32_T

/* Mac OS X supports the i386 hardware debugging registers.  */
#define I386_USE_GENERIC_WATCHPOINTS

#include "i386/nm-i386.h"

/* BUT... the i386 kdp target does not support watchpoints, and if we 
   try to set them we'll get awkward errors.  The nm-i386.h code 
   unconditionally turns on the HW watchpoints by overriding the 
   target_whatever macros.  We override these definitions so we can
   properly route the calls through the target vector, and so keep
   them out of the kdp side.  */
/* The only one we don't override is TARGET_REGION_OK_FOR_HW_WATCHPOINT.
   That isn't actually a target vector entry, but rather it is a way to
   override the one-argument target vector entry 
     to_region_size_ok_for_hw_watchpoint
   with a version that takes two arguments.  Somebody was getting a little
   lazy when they put this in.  */

#undef STOPPED_BY_WATCHPOINT
#undef TARGET_CAN_USE_HARDWARE_WATCHPOINT
#undef HAVE_CONTINUABLE_WATCHPOINT
#undef target_stopped_data_address
#undef target_insert_watchpoint
#undef target_remove_watchpoint
#undef target_insert_hw_breakpoint
#undef target_remove_hw_breakpoint

extern void i386_macosx_dr_set_control (unsigned long control);
#define I386_DR_LOW_SET_CONTROL(control) \
  i386_macosx_dr_set_control (control)

extern void i386_macosx_dr_set_addr (int regnum, CORE_ADDR addr);
#define I386_DR_LOW_SET_ADDR(regnum, addr) \
  i386_macosx_dr_set_addr (regnum, addr)

extern void i386_macosx_dr_reset_addr (int regnum);
#define I386_DR_LOW_RESET_ADDR(regnum) \
  i386_macosx_dr_reset_addr (regnum)

extern unsigned long i386_macosx_dr_get_status (void);
#define I386_DR_LOW_GET_STATUS() \
  i386_macosx_dr_get_status ()

/* Define this so we can skip the page-protection style watchpoints
   set up over in nm-macosx.h.  */

#define MACOSX_ACTUAL_HARDWARE_WATCHPOINTS_ARE_SUPPORTED 1

#endif /* HAVE_X86_DEBUG_STATE32_T */

#include "nm-macosx.h"
#define TARGET_NATIVE

#endif /* NM_I386NEXT_H */