/* Interface between GDB and target environments, including files and processes
- Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+ Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
Contributed by Cygnus Support. Written by John Gilmore.
a previously erased flash memory. Using it without erasing
flash can have unexpected results. Addresses are physical
address on target, and not relative to flash start. */
- TARGET_OBJECT_FLASH
-
+ TARGET_OBJECT_FLASH,
+ /* Available target-specific features, e.g. registers and coprocessors.
+ See "target-descriptions.c". ANNEX should never be empty. */
+ TARGET_OBJECT_AVAILABLE_FEATURES
/* Possible future objects: TARGET_OBJECT_FILE, TARGET_OBJECT_PROC, ... */
};
int (*to_remove_watchpoint) (CORE_ADDR, int, int);
int (*to_insert_watchpoint) (CORE_ADDR, int, int);
int (*to_stopped_by_watchpoint) (void);
+ int to_have_steppable_watchpoint;
int to_have_continuable_watchpoint;
int (*to_stopped_data_address) (struct target_ops *, CORE_ADDR *);
int (*to_region_ok_for_hw_watchpoint) (CORE_ADDR, int);
equal to what was written. */
void (*to_flash_done) (struct target_ops *);
+ /* Describe the architecture-specific features of this target.
+ Returns the description found, or NULL if no description
+ was available. */
+ const struct target_desc *(*to_read_description) (struct target_ops *ops);
+
int to_magic;
/* Need sub-structure for target machine related rather than comm related?
*/
(current_target.to_has_registers)
/* Does the target have execution? Can we make it jump (through
- hoops), or pop its stack a few times? FIXME: If this is to work that
- way, it needs to check whether an inferior actually exists.
- remote-udi.c and probably other targets can be the current target
- when the inferior doesn't actually exist at the moment. Right now
- this just tells us whether this target is *capable* of execution. */
+ hoops), or pop its stack a few times? This means that the current
+ target is currently executing; for some targets, that's the same as
+ whether or not the target is capable of execution, but there are
+ also targets which can be current while not executing. In that
+ case this will become true after target_create_inferior or
+ target_attach. */
#define target_has_execution \
(current_target.to_has_execution)
(*current_target.to_stopped_by_watchpoint) ()
#endif
+/* Non-zero if we have steppable watchpoints */
+
+#ifndef HAVE_STEPPABLE_WATCHPOINT
+#define HAVE_STEPPABLE_WATCHPOINT \
+ (current_target.to_have_steppable_watchpoint)
+#endif
+
/* Non-zero if we have continuable watchpoints */
#ifndef HAVE_CONTINUABLE_WATCHPOINT
#define target_stopped_data_address_p(CURRENT_TARGET) (1)
#endif
-/* This will only be defined by a target that supports catching vfork events,
- such as HP-UX.
-
- On some targets (such as HP-UX 10.20 and earlier), resuming a newly vforked
- child process after it has exec'd, causes the parent process to resume as
- well. To prevent the parent from running spontaneously, such targets should
- define this to a function that prevents that from happening. */
-#if !defined(ENSURE_VFORKING_PARENT_REMAINS_STOPPED)
-#define ENSURE_VFORKING_PARENT_REMAINS_STOPPED(PID) (0)
-#endif
-
-/* This will only be defined by a target that supports catching vfork events,
- such as HP-UX.
-
- On some targets (such as HP-UX 10.20 and earlier), a newly vforked child
- process must be resumed when it delivers its exec event, before the parent
- vfork event will be delivered to us. */
-
-#if !defined(RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK)
-#define RESUME_EXECD_VFORKING_CHILD_TO_GET_PARENT_VFORK() (0)
-#endif
+extern const struct target_desc *target_read_description (struct target_ops *);
/* Routines for maintenance of the target structures...
extern void pop_target (void);
+extern CORE_ADDR target_translate_tls_address (struct objfile *objfile,
+ CORE_ADDR offset);
+
+/* Mark a pushed target as running or exited, for targets which do not
+ automatically pop when not active. */
+
+void target_mark_running (struct target_ops *);
+
+void target_mark_exited (struct target_ops *);
+
/* Struct section_table maps address ranges to file sections. It is
mostly used with BFD files, but can be used without (e.g. for handling
raw disks, or files not in formats handled by BFD). */