X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdbserver%2Ftarget.h;h=c2245ebfe85aeb627d09cb9d8ee3e08d0a5277e2;hb=50a5f1878e22b09ebea30ad60a2164b80af6efdb;hp=2aef0208c11af0237acf8c4f6f4757c023e01846;hpb=770d8f6a51200bb4bf1228eba928e24e5d7fff86;p=deliverable%2Fbinutils-gdb.git diff --git a/gdbserver/target.h b/gdbserver/target.h index 2aef0208c1..c2245ebfe8 100644 --- a/gdbserver/target.h +++ b/gdbserver/target.h @@ -27,6 +27,7 @@ #include "target/wait.h" #include "target/waitstatus.h" #include "mem-break.h" +#include "gdbsupport/array-view.h" #include "gdbsupport/btrace-common.h" #include @@ -63,177 +64,15 @@ struct thread_resume CORE_ADDR step_range_end; /* Exclusive */ }; -class process_target; - /* GDBserver doesn't have a concept of strata like GDB, but we call its target vector "process_stratum" anyway for the benefit of shared code. */ -struct process_stratum_target -{ - /* Return true if THREAD is known to be stopped now. */ - int (*thread_stopped) (struct thread_info *thread); - - /* Read Thread Information Block address. */ - int (*get_tib_address) (ptid_t ptid, CORE_ADDR *address); - - /* Pause all threads. If FREEZE, arrange for any resume attempt to - be ignored until an unpause_all call unfreezes threads again. - There can be nested calls to pause_all, so a freeze counter - should be maintained. */ - void (*pause_all) (int freeze); - - /* Unpause all threads. Threads that hadn't been resumed by the - client should be left stopped. Basically a pause/unpause call - pair should not end up resuming threads that were stopped before - the pause call. */ - void (*unpause_all) (int unfreeze); - - /* Stabilize all threads. That is, force them out of jump pads. */ - void (*stabilize_threads) (void); - - /* Install a fast tracepoint jump pad. TPOINT is the address of the - tracepoint internal object as used by the IPA agent. TPADDR is - the address of tracepoint. COLLECTOR is address of the function - the jump pad redirects to. LOCKADDR is the address of the jump - pad lock object. ORIG_SIZE is the size in bytes of the - instruction at TPADDR. JUMP_ENTRY points to the address of the - jump pad entry, and on return holds the address past the end of - the created jump pad. If a trampoline is created by the function, - then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of - the trampoline, else they remain unchanged. JJUMP_PAD_INSN is a - buffer containing a copy of the instruction at TPADDR. - ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that - return the address range where the instruction at TPADDR was relocated - to. If an error occurs, the ERR may be used to pass on an error - message. */ - int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr, - CORE_ADDR collector, - CORE_ADDR lockaddr, - ULONGEST orig_size, - CORE_ADDR *jump_entry, - CORE_ADDR *trampoline, - ULONGEST *trampoline_size, - unsigned char *jjump_pad_insn, - ULONGEST *jjump_pad_insn_size, - CORE_ADDR *adjusted_insn_addr, - CORE_ADDR *adjusted_insn_addr_end, - char *err); - - /* Return the bytecode operations vector for the current inferior. - Returns NULL if bytecode compilation is not supported. */ - struct emit_ops *(*emit_ops) (void); - - /* Returns true if the target supports disabling randomization. */ - int (*supports_disable_randomization) (void); - - /* Return the minimum length of an instruction that can be safely overwritten - for use as a fast tracepoint. */ - int (*get_min_fast_tracepoint_insn_len) (void); - /* Read solib info on SVR4 platforms. */ - int (*qxfer_libraries_svr4) (const char *annex, unsigned char *readbuf, - unsigned const char *writebuf, - CORE_ADDR offset, int len); - - /* Return true if target supports debugging agent. */ - int (*supports_agent) (void); - - /* Enable branch tracing for PTID based on CONF and allocate a branch trace - target information struct for reading and for disabling branch trace. */ - struct btrace_target_info *(*enable_btrace) - (ptid_t ptid, const struct btrace_config *conf); - - /* Disable branch tracing. - Returns zero on success, non-zero otherwise. */ - int (*disable_btrace) (struct btrace_target_info *tinfo); - - /* Read branch trace data into buffer. - Return 0 on success; print an error message into BUFFER and return -1, - otherwise. */ - int (*read_btrace) (struct btrace_target_info *, struct buffer *, - enum btrace_read_type type); - - /* Read the branch trace configuration into BUFFER. - Return 0 on success; print an error message into BUFFER and return -1 - otherwise. */ - int (*read_btrace_conf) (const struct btrace_target_info *, struct buffer *); - - /* Return true if target supports range stepping. */ - int (*supports_range_stepping) (void); - - /* Return the full absolute name of the executable file that was - run to create the process PID. If the executable file cannot - be determined, NULL is returned. Otherwise, a pointer to a - character string containing the pathname is returned. This - string should be copied into a buffer by the client if the string - will not be immediately used, or if it must persist. */ - char *(*pid_to_exec_file) (int pid); - - /* Multiple-filesystem-aware open. Like open(2), but operating in - the filesystem as it appears to process PID. Systems where all - processes share a common filesystem should set this to NULL. - If NULL, the caller should fall back to open(2). */ - int (*multifs_open) (int pid, const char *filename, - int flags, mode_t mode); - - /* Multiple-filesystem-aware unlink. Like unlink(2), but operates - in the filesystem as it appears to process PID. Systems where - all processes share a common filesystem should set this to NULL. - If NULL, the caller should fall back to unlink(2). */ - int (*multifs_unlink) (int pid, const char *filename); - - /* Multiple-filesystem-aware readlink. Like readlink(2), but - operating in the filesystem as it appears to process PID. - Systems where all processes share a common filesystem should - set this to NULL. If NULL, the caller should fall back to - readlink(2). */ - ssize_t (*multifs_readlink) (int pid, const char *filename, - char *buf, size_t bufsiz); - - /* Return the breakpoint kind for this target based on PC. The PCPTR is - adjusted to the real memory location in case a flag (e.g., the Thumb bit on - ARM) was present in the PC. */ - int (*breakpoint_kind_from_pc) (CORE_ADDR *pcptr); - - /* Return the software breakpoint from KIND. KIND can have target - specific meaning like the Z0 kind parameter. - SIZE is set to the software breakpoint's length in memory. */ - const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size); - - /* Return the thread's name, or NULL if the target is unable to determine it. - The returned value must not be freed by the caller. */ - const char *(*thread_name) (ptid_t thread); - - /* Return the breakpoint kind for this target based on the current - processor state (e.g. the current instruction mode on ARM) and the - PC. The PCPTR is adjusted to the real memory location in case a flag - (e.g., the Thumb bit on ARM) is present in the PC. */ - int (*breakpoint_kind_from_current_state) (CORE_ADDR *pcptr); - - /* Returns true if the target can software single step. */ - int (*supports_software_single_step) (void); - - /* Return 1 if the target supports catch syscall, 0 (or leave the - callback NULL) otherwise. */ - int (*supports_catch_syscall) (void); - - /* Return tdesc index for IPA. */ - int (*get_ipa_tdesc_idx) (void); - - /* Thread ID to (numeric) thread handle: Return true on success and - false for failure. Return pointer to thread handle via HANDLE - and the handle's length via HANDLE_LEN. */ - bool (*thread_handle) (ptid_t ptid, gdb_byte **handle, int *handle_len); - - /* The object that will gradually replace this struct. */ - process_target *pt; -}; - -class process_target +class process_stratum_target { public: - virtual ~process_target () = default; + virtual ~process_stratum_target () = default; /* Start a new process. @@ -289,7 +128,7 @@ public: no child stop to report, return is null_ptid/TARGET_WAITKIND_IGNORE. */ virtual ptid_t wait (ptid_t ptid, target_waitstatus *status, - int options) = 0; + target_wait_flags options) = 0; /* Fetch registers from the inferior process. @@ -477,8 +316,9 @@ public: unsigned char *myaddr, unsigned int len); /* Target specific qSupported support. FEATURES is an array of - features with COUNT elements. */ - virtual void process_qsupported (char **features, int count); + features unsupported by the core of GDBserver. */ + virtual void process_qsupported + (gdb::array_view features); /* Return true if the target supports tracepoints, false otherwise. */ virtual bool supports_tracepoints (); @@ -488,6 +328,177 @@ public: /* Write PC to REGCACHE. */ virtual void write_pc (regcache *regcache, CORE_ADDR pc); + + /* Return true if the thread_stopped op is supported. */ + virtual bool supports_thread_stopped (); + + /* Return true if THREAD is known to be stopped now. */ + virtual bool thread_stopped (thread_info *thread); + + /* Return true if the get_tib_address op is supported. */ + virtual bool supports_get_tib_address (); + + /* Read Thread Information Block address. */ + virtual int get_tib_address (ptid_t ptid, CORE_ADDR *address); + + /* Pause all threads. If FREEZE, arrange for any resume attempt to + be ignored until an unpause_all call unfreezes threads again. + There can be nested calls to pause_all, so a freeze counter + should be maintained. */ + virtual void pause_all (bool freeze); + + /* Unpause all threads. Threads that hadn't been resumed by the + client should be left stopped. Basically a pause/unpause call + pair should not end up resuming threads that were stopped before + the pause call. */ + virtual void unpause_all (bool unfreeze); + + /* Stabilize all threads. That is, force them out of jump pads. */ + virtual void stabilize_threads (); + + /* Return true if the install_fast_tracepoint_jump_pad op is + supported. */ + virtual bool supports_fast_tracepoints (); + + /* Install a fast tracepoint jump pad. TPOINT is the address of the + tracepoint internal object as used by the IPA agent. TPADDR is + the address of tracepoint. COLLECTOR is address of the function + the jump pad redirects to. LOCKADDR is the address of the jump + pad lock object. ORIG_SIZE is the size in bytes of the + instruction at TPADDR. JUMP_ENTRY points to the address of the + jump pad entry, and on return holds the address past the end of + the created jump pad. If a trampoline is created by the function, + then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of + the trampoline, else they remain unchanged. JJUMP_PAD_INSN is a + buffer containing a copy of the instruction at TPADDR. + ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that + return the address range where the instruction at TPADDR was relocated + to. If an error occurs, the ERR may be used to pass on an error + message. */ + virtual int install_fast_tracepoint_jump_pad + (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector, + CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry, + CORE_ADDR *trampoline, ULONGEST *trampoline_size, + unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size, + CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end, + char *err); + + /* Return the minimum length of an instruction that can be safely + overwritten for use as a fast tracepoint. */ + virtual int get_min_fast_tracepoint_insn_len (); + + /* Return the bytecode operations vector for the current inferior. + Returns nullptr if bytecode compilation is not supported. */ + virtual struct emit_ops *emit_ops (); + + /* Returns true if the target supports disabling randomization. */ + virtual bool supports_disable_randomization (); + + /* Return true if the qxfer_libraries_svr4 op is supported. */ + virtual bool supports_qxfer_libraries_svr4 (); + + /* Read solib info on SVR4 platforms. */ + virtual int qxfer_libraries_svr4 (const char *annex, + unsigned char *readbuf, + unsigned const char *writebuf, + CORE_ADDR offset, int len); + + /* Return true if target supports debugging agent. */ + virtual bool supports_agent (); + + /* Enable branch tracing for PTID based on CONF and allocate a branch trace + target information struct for reading and for disabling branch trace. */ + virtual btrace_target_info *enable_btrace (ptid_t ptid, + const btrace_config *conf); + + /* Disable branch tracing. + Returns zero on success, non-zero otherwise. */ + virtual int disable_btrace (btrace_target_info *tinfo); + + /* Read branch trace data into buffer. + Return 0 on success; print an error message into BUFFER and return -1, + otherwise. */ + virtual int read_btrace (btrace_target_info *tinfo, buffer *buf, + enum btrace_read_type type); + + /* Read the branch trace configuration into BUFFER. + Return 0 on success; print an error message into BUFFER and return -1 + otherwise. */ + virtual int read_btrace_conf (const btrace_target_info *tinfo, + buffer *buf); + + /* Return true if target supports range stepping. */ + virtual bool supports_range_stepping (); + + /* Return true if the pid_to_exec_file op is supported. */ + virtual bool supports_pid_to_exec_file (); + + /* Return the full absolute name of the executable file that was + run to create the process PID. If the executable file cannot + be determined, NULL is returned. Otherwise, a pointer to a + character string containing the pathname is returned. This + string should be copied into a buffer by the client if the string + will not be immediately used, or if it must persist. */ + virtual char *pid_to_exec_file (int pid); + + /* Return true if any of the multifs ops is supported. */ + virtual bool supports_multifs (); + + /* Multiple-filesystem-aware open. Like open(2), but operating in + the filesystem as it appears to process PID. Systems where all + processes share a common filesystem should not override this. + The default behavior is to use open(2). */ + virtual int multifs_open (int pid, const char *filename, + int flags, mode_t mode); + + /* Multiple-filesystem-aware unlink. Like unlink(2), but operates + in the filesystem as it appears to process PID. Systems where + all processes share a common filesystem should not override this. + The default behavior is to use unlink(2). */ + virtual int multifs_unlink (int pid, const char *filename); + + /* Multiple-filesystem-aware readlink. Like readlink(2), but + operating in the filesystem as it appears to process PID. + Systems where all processes share a common filesystem should + not override this. The default behavior is to use readlink(2). */ + virtual ssize_t multifs_readlink (int pid, const char *filename, + char *buf, size_t bufsiz); + + /* Return the breakpoint kind for this target based on PC. The + PCPTR is adjusted to the real memory location in case a flag + (e.g., the Thumb bit on ARM) was present in the PC. */ + virtual int breakpoint_kind_from_pc (CORE_ADDR *pcptr); + + /* Return the software breakpoint from KIND. KIND can have target + specific meaning like the Z0 kind parameter. + SIZE is set to the software breakpoint's length in memory. */ + virtual const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) = 0; + + /* Return the breakpoint kind for this target based on the current + processor state (e.g. the current instruction mode on ARM) and the + PC. The PCPTR is adjusted to the real memory location in case a + flag (e.g., the Thumb bit on ARM) is present in the PC. */ + virtual int breakpoint_kind_from_current_state (CORE_ADDR *pcptr); + + /* Return the thread's name, or NULL if the target is unable to + determine it. The returned value must not be freed by the + caller. */ + virtual const char *thread_name (ptid_t thread); + + /* Thread ID to (numeric) thread handle: Return true on success and + false for failure. Return pointer to thread handle via HANDLE + and the handle's length via HANDLE_LEN. */ + virtual bool thread_handle (ptid_t ptid, gdb_byte **handle, + int *handle_len); + + /* Returns true if the target can software single step. */ + virtual bool supports_software_single_step (); + + /* Return true if the target supports catch syscall. */ + virtual bool supports_catch_syscall (); + + /* Return tdesc index for IPA. */ + virtual int get_ipa_tdesc_idx (); }; extern process_stratum_target *the_target; @@ -495,142 +506,119 @@ extern process_stratum_target *the_target; void set_target_ops (process_stratum_target *); #define target_create_inferior(program, program_args) \ - the_target->pt->create_inferior (program, program_args) + the_target->create_inferior (program, program_args) #define target_post_create_inferior() \ - the_target->pt->post_create_inferior () + the_target->post_create_inferior () #define myattach(pid) \ - the_target->pt->attach (pid) + the_target->attach (pid) int kill_inferior (process_info *proc); #define target_supports_fork_events() \ - the_target->pt->supports_fork_events () + the_target->supports_fork_events () #define target_supports_vfork_events() \ - the_target->pt->supports_vfork_events () + the_target->supports_vfork_events () #define target_supports_exec_events() \ - the_target->pt->supports_exec_events () + the_target->supports_exec_events () #define target_handle_new_gdb_connection() \ - the_target->pt->handle_new_gdb_connection () + the_target->handle_new_gdb_connection () #define detach_inferior(proc) \ - the_target->pt->detach (proc) + the_target->detach (proc) #define mythread_alive(pid) \ - the_target->pt->thread_alive (pid) + the_target->thread_alive (pid) #define fetch_inferior_registers(regcache, regno) \ - the_target->pt->fetch_registers (regcache, regno) + the_target->fetch_registers (regcache, regno) #define store_inferior_registers(regcache, regno) \ - the_target->pt->store_registers (regcache, regno) + the_target->store_registers (regcache, regno) #define join_inferior(pid) \ - the_target->pt->join (pid) + the_target->join (pid) #define target_supports_non_stop() \ - the_target->pt->supports_non_stop () + the_target->supports_non_stop () #define target_async(enable) \ - the_target->pt->async (enable) + the_target->async (enable) -#define target_process_qsupported(features, count) \ - the_target->pt->process_qsupported (features, count) +#define target_process_qsupported(features) \ + the_target->process_qsupported (features) #define target_supports_catch_syscall() \ - (the_target->supports_catch_syscall ? \ - (*the_target->supports_catch_syscall) () : 0) + the_target->supports_catch_syscall () #define target_get_ipa_tdesc_idx() \ - (the_target->get_ipa_tdesc_idx \ - ? (*the_target->get_ipa_tdesc_idx) () : 0) + the_target->get_ipa_tdesc_idx () #define target_supports_tracepoints() \ - the_target->pt->supports_tracepoints () + the_target->supports_tracepoints () #define target_supports_fast_tracepoints() \ - (the_target->install_fast_tracepoint_jump_pad != NULL) + the_target->supports_fast_tracepoints () #define target_get_min_fast_tracepoint_insn_len() \ - (the_target->get_min_fast_tracepoint_insn_len \ - ? (*the_target->get_min_fast_tracepoint_insn_len) () : 0) - -#define thread_stopped(thread) \ - (*the_target->thread_stopped) (thread) - -#define pause_all(freeze) \ - do \ - { \ - if (the_target->pause_all) \ - (*the_target->pause_all) (freeze); \ - } while (0) - -#define unpause_all(unfreeze) \ - do \ - { \ - if (the_target->unpause_all) \ - (*the_target->unpause_all) (unfreeze); \ - } while (0) - -#define stabilize_threads() \ - do \ - { \ - if (the_target->stabilize_threads) \ - (*the_target->stabilize_threads) (); \ - } while (0) - -#define install_fast_tracepoint_jump_pad(tpoint, tpaddr, \ - collector, lockaddr, \ - orig_size, \ - jump_entry, \ - trampoline, trampoline_size, \ - jjump_pad_insn, \ - jjump_pad_insn_size, \ - adjusted_insn_addr, \ - adjusted_insn_addr_end, \ - err) \ - (*the_target->install_fast_tracepoint_jump_pad) (tpoint, tpaddr, \ - collector,lockaddr, \ - orig_size, jump_entry, \ - trampoline, \ - trampoline_size, \ - jjump_pad_insn, \ - jjump_pad_insn_size, \ - adjusted_insn_addr, \ - adjusted_insn_addr_end, \ - err) + the_target->get_min_fast_tracepoint_insn_len () + +#define target_thread_stopped(thread) \ + the_target->thread_stopped (thread) + +#define target_pause_all(freeze) \ + the_target->pause_all (freeze) + +#define target_unpause_all(unfreeze) \ + the_target->unpause_all (unfreeze) + +#define target_stabilize_threads() \ + the_target->stabilize_threads () + +#define target_install_fast_tracepoint_jump_pad(tpoint, tpaddr, \ + collector, lockaddr, \ + orig_size, \ + jump_entry, \ + trampoline, trampoline_size, \ + jjump_pad_insn, \ + jjump_pad_insn_size, \ + adjusted_insn_addr, \ + adjusted_insn_addr_end, \ + err) \ + the_target->install_fast_tracepoint_jump_pad (tpoint, tpaddr, \ + collector,lockaddr, \ + orig_size, jump_entry, \ + trampoline, \ + trampoline_size, \ + jjump_pad_insn, \ + jjump_pad_insn_size, \ + adjusted_insn_addr, \ + adjusted_insn_addr_end, \ + err) #define target_emit_ops() \ - (the_target->emit_ops ? (*the_target->emit_ops) () : NULL) + the_target->emit_ops () #define target_supports_disable_randomization() \ - (the_target->supports_disable_randomization ? \ - (*the_target->supports_disable_randomization) () : 0) + the_target->supports_disable_randomization () #define target_supports_agent() \ - (the_target->supports_agent ? \ - (*the_target->supports_agent) () : 0) + the_target->supports_agent () static inline struct btrace_target_info * target_enable_btrace (ptid_t ptid, const struct btrace_config *conf) { - if (the_target->enable_btrace == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->enable_btrace) (ptid, conf); + return the_target->enable_btrace (ptid, conf); } static inline int target_disable_btrace (struct btrace_target_info *tinfo) { - if (the_target->disable_btrace == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->disable_btrace) (tinfo); + return the_target->disable_btrace (tinfo); } static inline int @@ -638,57 +626,45 @@ target_read_btrace (struct btrace_target_info *tinfo, struct buffer *buffer, enum btrace_read_type type) { - if (the_target->read_btrace == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->read_btrace) (tinfo, buffer, type); + return the_target->read_btrace (tinfo, buffer, type); } static inline int target_read_btrace_conf (struct btrace_target_info *tinfo, struct buffer *buffer) { - if (the_target->read_btrace_conf == nullptr) - error (_("Target does not support branch tracing.")); - - return (*the_target->read_btrace_conf) (tinfo, buffer); + return the_target->read_btrace_conf (tinfo, buffer); } #define target_supports_range_stepping() \ - (the_target->supports_range_stepping ? \ - (*the_target->supports_range_stepping) () : 0) + the_target->supports_range_stepping () #define target_supports_stopped_by_sw_breakpoint() \ - the_target->pt->supports_stopped_by_sw_breakpoint () + the_target->supports_stopped_by_sw_breakpoint () #define target_stopped_by_sw_breakpoint() \ - the_target->pt->stopped_by_sw_breakpoint () + the_target->stopped_by_sw_breakpoint () #define target_supports_stopped_by_hw_breakpoint() \ - the_target->pt->supports_stopped_by_hw_breakpoint () + the_target->supports_stopped_by_hw_breakpoint () #define target_supports_hardware_single_step() \ - the_target->pt->supports_hardware_single_step () + the_target->supports_hardware_single_step () #define target_stopped_by_hw_breakpoint() \ - the_target->pt->stopped_by_hw_breakpoint () + the_target->stopped_by_hw_breakpoint () #define target_breakpoint_kind_from_pc(pcptr) \ - (the_target->breakpoint_kind_from_pc \ - ? (*the_target->breakpoint_kind_from_pc) (pcptr) \ - : default_breakpoint_kind_from_pc (pcptr)) + the_target->breakpoint_kind_from_pc (pcptr) #define target_breakpoint_kind_from_current_state(pcptr) \ - (the_target->breakpoint_kind_from_current_state \ - ? (*the_target->breakpoint_kind_from_current_state) (pcptr) \ - : target_breakpoint_kind_from_pc (pcptr)) + the_target->breakpoint_kind_from_current_state (pcptr) #define target_supports_software_single_step() \ - (the_target->supports_software_single_step ? \ - (*the_target->supports_software_single_step) () : 0) + the_target->supports_software_single_step () -ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, int options, - int connected_wait); +ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus, + target_wait_flags options, int connected_wait); /* Prepare to read or write memory from the inferior process. See the corresponding process_stratum_target methods for more details. */ @@ -697,16 +673,13 @@ int prepare_to_access_memory (void); void done_accessing_memory (void); #define target_core_of_thread(ptid) \ - the_target->pt->core_of_thread (ptid) + the_target->core_of_thread (ptid) #define target_thread_name(ptid) \ - (the_target->thread_name ? (*the_target->thread_name) (ptid) \ - : NULL) + the_target->thread_name (ptid) #define target_thread_handle(ptid, handle, handle_len) \ - (the_target->thread_handle ? (*the_target->thread_handle) \ - (ptid, handle, handle_len) \ - : false) + the_target->thread_handle (ptid, handle, handle_len) int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len); @@ -714,6 +687,4 @@ int set_desired_thread (); const char *target_pid_to_str (ptid_t); -int default_breakpoint_kind_from_pc (CORE_ADDR *pcptr); - #endif /* GDBSERVER_TARGET_H */