]> Git Repo - binutils.git/blob - gdbserver/target.h
Automatic date update in version.in
[binutils.git] / gdbserver / target.h
1 /* Target operations for the remote server for GDB.
2    Copyright (C) 2002-2022 Free Software Foundation, Inc.
3
4    Contributed by MontaVista Software.
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 3 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, see <http://www.gnu.org/licenses/>.  */
20
21 #ifndef GDBSERVER_TARGET_H
22 #define GDBSERVER_TARGET_H
23
24 #include <sys/types.h> /* for mode_t */
25 #include "target/target.h"
26 #include "target/resume.h"
27 #include "target/wait.h"
28 #include "target/waitstatus.h"
29 #include "mem-break.h"
30 #include "gdbsupport/array-view.h"
31 #include "gdbsupport/btrace-common.h"
32 #include <vector>
33 #include "gdbsupport/byte-vector.h"
34
35 struct emit_ops;
36 struct buffer;
37 struct process_info;
38
39 /* This structure describes how to resume a particular thread (or all
40    threads) based on the client's request.  If thread is -1, then this
41    entry applies to all threads.  These are passed around as an
42    array.  */
43
44 struct thread_resume
45 {
46   ptid_t thread;
47
48   /* How to "resume".  */
49   enum resume_kind kind;
50
51   /* If non-zero, send this signal when we resume, or to stop the
52      thread.  If stopping a thread, and this is 0, the target should
53      stop the thread however it best decides to (e.g., SIGSTOP on
54      linux; SuspendThread on win32).  This is a host signal value (not
55      enum gdb_signal).  */
56   int sig;
57
58   /* Range to single step within.  Valid only iff KIND is resume_step.
59
60      Single-step once, and then continuing stepping as long as the
61      thread stops in this range.  (If the range is empty
62      [STEP_RANGE_START == STEP_RANGE_END], then this is a single-step
63      request.)  */
64   CORE_ADDR step_range_start;   /* Inclusive */
65   CORE_ADDR step_range_end;     /* Exclusive */
66 };
67
68 /* GDBserver doesn't have a concept of strata like GDB, but we call
69    its target vector "process_stratum" anyway for the benefit of
70    shared code.  */
71
72 class process_stratum_target
73 {
74 public:
75
76   virtual ~process_stratum_target () = default;
77
78   /* Start a new process.
79
80      PROGRAM is a path to the program to execute.
81      PROGRAM_ARGS is a standard NULL-terminated array of arguments,
82      to be passed to the inferior as ``argv'' (along with PROGRAM).
83
84      Returns the new PID on success, -1 on failure.  Registers the new
85      process with the process list.  */
86   virtual int create_inferior (const char *program,
87                                const std::vector<char *> &program_args) = 0;
88
89   /* Do additional setup after a new process is created, including
90      exec-wrapper completion.  */
91   virtual void post_create_inferior ();
92
93   /* Attach to a running process.
94
95      PID is the process ID to attach to, specified by the user
96      or a higher layer.
97
98      Returns -1 if attaching is unsupported, 0 on success, and calls
99      error() otherwise.  */
100   virtual int attach (unsigned long pid) = 0;
101
102   /* Kill process PROC.  Return -1 on failure, and 0 on success.  */
103   virtual int kill (process_info *proc) = 0;
104
105   /* Detach from process PROC.  Return -1 on failure, and 0 on
106      success.  */
107   virtual int detach (process_info *proc) = 0;
108
109   /* The inferior process has died.  Do what is right.  */
110   virtual void mourn (process_info *proc) = 0;
111
112   /* Wait for process PID to exit.  */
113   virtual void join (int pid) = 0;
114
115   /* Return true iff the thread with process ID PID is alive.  */
116   virtual bool thread_alive (ptid_t pid) = 0;
117
118   /* Resume the inferior process.  */
119   virtual void resume (thread_resume *resume_info, size_t n) = 0;
120
121   /* Wait for the inferior process or thread to change state.  Store
122      status through argument pointer STATUS.
123
124      PTID = -1 to wait for any pid to do something, PTID(pid,0,0) to
125      wait for any thread of process pid to do something.  Return ptid
126      of child, or -1 in case of error; store status through argument
127      pointer STATUS.  OPTIONS is a bit set of options defined as
128      TARGET_W* above.  If options contains TARGET_WNOHANG and there's
129      no child stop to report, return is
130      null_ptid/TARGET_WAITKIND_IGNORE.  */
131   virtual ptid_t wait (ptid_t ptid, target_waitstatus *status,
132                        target_wait_flags options) = 0;
133
134   /* Fetch registers from the inferior process.
135
136      If REGNO is -1, fetch all registers; otherwise, fetch at least REGNO.  */
137   virtual void fetch_registers (regcache *regcache, int regno) = 0;
138
139   /* Store registers to the inferior process.
140
141      If REGNO is -1, store all registers; otherwise, store at least REGNO.  */
142   virtual void store_registers (regcache *regcache, int regno) = 0;
143
144   /* Read memory from the inferior process.  This should generally be
145      called through read_inferior_memory, which handles breakpoint shadowing.
146
147      Read LEN bytes at MEMADDR into a buffer at MYADDR.
148
149      Returns 0 on success and errno on failure.  */
150   virtual int read_memory (CORE_ADDR memaddr, unsigned char *myaddr,
151                            int len) = 0;
152
153   /* Write memory to the inferior process.  This should generally be
154      called through target_write_memory, which handles breakpoint shadowing.
155
156      Write LEN bytes from the buffer at MYADDR to MEMADDR.
157
158      Returns 0 on success and errno on failure.  */
159   virtual int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
160                             int len) = 0;
161
162   /* Query GDB for the values of any symbols we're interested in.
163      This function is called whenever we receive a "qSymbols::"
164      query, which corresponds to every time more symbols (might)
165      become available.  */
166   virtual void look_up_symbols ();
167
168   /* Send an interrupt request to the inferior process,
169      however is appropriate.  */
170   virtual void request_interrupt () = 0;
171
172   /* Return true if the read_auxv target op is supported.  */
173   virtual bool supports_read_auxv ();
174
175   /* Read auxiliary vector data from the inferior process.
176
177      Read LEN bytes at OFFSET into a buffer at MYADDR.  */
178   virtual int read_auxv (CORE_ADDR offset, unsigned char *myaddr,
179                          unsigned int len);
180
181   /* Returns true if GDB Z breakpoint type TYPE is supported, false
182      otherwise.  The type is coded as follows:
183        '0' - software-breakpoint
184        '1' - hardware-breakpoint
185        '2' - write watchpoint
186        '3' - read watchpoint
187        '4' - access watchpoint
188   */
189   virtual bool supports_z_point_type (char z_type);
190
191   /* Insert and remove a break or watchpoint.
192      Returns 0 on success, -1 on failure and 1 on unsupported.  */
193   virtual int insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
194                             int size, raw_breakpoint *bp);
195
196   virtual int remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
197                             int size, raw_breakpoint *bp);
198
199   /* Returns true if the target stopped because it executed a software
200      breakpoint instruction, false otherwise.  */
201   virtual bool stopped_by_sw_breakpoint ();
202
203   /* Returns true if the target knows whether a trap was caused by a
204      SW breakpoint triggering.  */
205   virtual bool supports_stopped_by_sw_breakpoint ();
206
207   /* Returns true if the target stopped for a hardware breakpoint.  */
208   virtual bool stopped_by_hw_breakpoint ();
209
210   /* Returns true if the target knows whether a trap was caused by a
211      HW breakpoint triggering.  */
212   virtual bool supports_stopped_by_hw_breakpoint ();
213
214   /* Returns true if the target can do hardware single step.  */
215   virtual bool supports_hardware_single_step ();
216
217   /* Returns true if target was stopped due to a watchpoint hit, false
218      otherwise.  */
219   virtual bool stopped_by_watchpoint ();
220
221   /* Returns the address associated with the watchpoint that hit, if any;
222      returns 0 otherwise.  */
223   virtual CORE_ADDR stopped_data_address ();
224
225   /* Return true if the read_offsets target op is supported.  */
226   virtual bool supports_read_offsets ();
227
228   /* Reports the text, data offsets of the executable.  This is
229      needed for uclinux where the executable is relocated during load
230      time.  */
231   virtual int read_offsets (CORE_ADDR *text, CORE_ADDR *data);
232
233   /* Return true if the get_tls_address target op is supported.  */
234   virtual bool supports_get_tls_address ();
235
236   /* Fetch the address associated with a specific thread local storage
237      area, determined by the specified THREAD, OFFSET, and LOAD_MODULE.
238      Stores it in *ADDRESS and returns zero on success; otherwise returns
239      an error code.  A return value of -1 means this system does not
240      support the operation.  */
241   virtual int get_tls_address (thread_info *thread, CORE_ADDR offset,
242                                CORE_ADDR load_module, CORE_ADDR *address);
243
244   /* Return true if the qxfer_osdata target op is supported.  */
245   virtual bool supports_qxfer_osdata ();
246
247   /* Read/Write OS data using qXfer packets.  */
248   virtual int qxfer_osdata (const char *annex, unsigned char *readbuf,
249                             unsigned const char *writebuf,
250                             CORE_ADDR offset, int len);
251
252   /* Return true if the qxfer_siginfo target op is supported.  */
253   virtual bool supports_qxfer_siginfo ();
254
255   /* Read/Write extra signal info.  */
256   virtual int qxfer_siginfo (const char *annex, unsigned char *readbuf,
257                              unsigned const char *writebuf,
258                              CORE_ADDR offset, int len);
259
260   /* Return true if non-stop mode is supported.  */
261   virtual bool supports_non_stop ();
262
263   /* Enables async target events.  Returns the previous enable
264      state.  */
265   virtual bool async (bool enable);
266
267   /* Switch to non-stop (ENABLE == true) or all-stop (ENABLE == false)
268      mode.  Return 0 on success, -1 otherwise.  */
269   virtual int start_non_stop (bool enable);
270
271   /* Returns true if the target supports multi-process debugging.  */
272   virtual bool supports_multi_process ();
273
274   /* Returns true if fork events are supported.  */
275   virtual bool supports_fork_events ();
276
277   /* Returns true if vfork events are supported.  */
278   virtual bool supports_vfork_events ();
279
280   /* Returns true if exec events are supported.  */
281   virtual bool supports_exec_events ();
282
283   /* Allows target to re-initialize connection-specific settings.  */
284   virtual void handle_new_gdb_connection ();
285
286   /* The target-specific routine to process monitor command.
287      Returns 1 if handled, or 0 to perform default processing.  */
288   virtual int handle_monitor_command (char *mon);
289
290   /* Returns the core given a thread, or -1 if not known.  */
291   virtual int core_of_thread (ptid_t ptid);
292
293   /* Returns true if the read_loadmap target op is supported.  */
294   virtual bool supports_read_loadmap ();
295
296   /* Read loadmaps.  Read LEN bytes at OFFSET into a buffer at MYADDR.  */
297   virtual int read_loadmap (const char *annex, CORE_ADDR offset,
298                             unsigned char *myaddr, unsigned int len);
299
300   /* Target specific qSupported support.  FEATURES is an array of
301      features unsupported by the core of GDBserver.  */
302   virtual void process_qsupported
303     (gdb::array_view<const char * const> features);
304
305   /* Return true if the target supports tracepoints, false otherwise.  */
306   virtual bool supports_tracepoints ();
307
308   /* Read PC from REGCACHE.  */
309   virtual CORE_ADDR read_pc (regcache *regcache);
310
311   /* Write PC to REGCACHE.  */
312   virtual void write_pc (regcache *regcache, CORE_ADDR pc);
313
314   /* Return true if the thread_stopped op is supported.  */
315   virtual bool supports_thread_stopped ();
316
317   /* Return true if THREAD is known to be stopped now.  */
318   virtual bool thread_stopped (thread_info *thread);
319
320   /* Return true if the get_tib_address op is supported.  */
321   virtual bool supports_get_tib_address ();
322
323   /* Read Thread Information Block address.  */
324   virtual int get_tib_address (ptid_t ptid, CORE_ADDR *address);
325
326   /* Pause all threads.  If FREEZE, arrange for any resume attempt to
327      be ignored until an unpause_all call unfreezes threads again.
328      There can be nested calls to pause_all, so a freeze counter
329      should be maintained.  */
330   virtual void pause_all (bool freeze);
331
332   /* Unpause all threads.  Threads that hadn't been resumed by the
333      client should be left stopped.  Basically a pause/unpause call
334      pair should not end up resuming threads that were stopped before
335      the pause call.  */
336   virtual void unpause_all (bool unfreeze);
337
338   /* Stabilize all threads.  That is, force them out of jump pads.  */
339   virtual void stabilize_threads ();
340
341   /* Return true if the install_fast_tracepoint_jump_pad op is
342      supported.  */
343   virtual bool supports_fast_tracepoints ();
344
345   /* Install a fast tracepoint jump pad.  TPOINT is the address of the
346      tracepoint internal object as used by the IPA agent.  TPADDR is
347      the address of tracepoint.  COLLECTOR is address of the function
348      the jump pad redirects to.  LOCKADDR is the address of the jump
349      pad lock object.  ORIG_SIZE is the size in bytes of the
350      instruction at TPADDR.  JUMP_ENTRY points to the address of the
351      jump pad entry, and on return holds the address past the end of
352      the created jump pad.  If a trampoline is created by the function,
353      then TRAMPOLINE and TRAMPOLINE_SIZE return the address and size of
354      the trampoline, else they remain unchanged.  JJUMP_PAD_INSN is a
355      buffer containing a copy of the instruction at TPADDR.
356      ADJUST_INSN_ADDR and ADJUST_INSN_ADDR_END are output parameters that
357      return the address range where the instruction at TPADDR was relocated
358      to.  If an error occurs, the ERR may be used to pass on an error
359      message.  */
360   virtual int install_fast_tracepoint_jump_pad
361     (CORE_ADDR tpoint, CORE_ADDR tpaddr, CORE_ADDR collector,
362      CORE_ADDR lockaddr, ULONGEST orig_size, CORE_ADDR *jump_entry,
363      CORE_ADDR *trampoline, ULONGEST *trampoline_size,
364      unsigned char *jjump_pad_insn, ULONGEST *jjump_pad_insn_size,
365      CORE_ADDR *adjusted_insn_addr, CORE_ADDR *adjusted_insn_addr_end,
366      char *err);
367
368   /* Return the minimum length of an instruction that can be safely
369      overwritten for use as a fast tracepoint.  */
370   virtual int get_min_fast_tracepoint_insn_len ();
371
372   /* Return the bytecode operations vector for the current inferior.
373      Returns nullptr if bytecode compilation is not supported.  */
374   virtual struct emit_ops *emit_ops ();
375
376   /* Returns true if the target supports disabling randomization.  */
377   virtual bool supports_disable_randomization ();
378
379   /* Return true if the qxfer_libraries_svr4 op is supported.  */
380   virtual bool supports_qxfer_libraries_svr4 ();
381
382   /* Read solib info on SVR4 platforms.  */
383   virtual int qxfer_libraries_svr4 (const char *annex,
384                                     unsigned char *readbuf,
385                                     unsigned const char *writebuf,
386                                     CORE_ADDR offset, int len);
387
388   /* Return true if target supports debugging agent.  */
389   virtual bool supports_agent ();
390
391   /* Return true if target supports btrace.  */
392   virtual bool supports_btrace ();
393
394   /* Enable branch tracing for TP based on CONF and allocate a branch trace
395      target information struct for reading and for disabling branch trace.  */
396   virtual btrace_target_info *enable_btrace (thread_info *tp,
397                                              const btrace_config *conf);
398
399   /* Disable branch tracing.
400      Returns zero on success, non-zero otherwise.  */
401   virtual int disable_btrace (btrace_target_info *tinfo);
402
403   /* Read branch trace data into buffer.
404      Return 0 on success; print an error message into BUFFER and return -1,
405      otherwise.  */
406   virtual int read_btrace (btrace_target_info *tinfo, buffer *buf,
407                            enum btrace_read_type type);
408
409   /* Read the branch trace configuration into BUFFER.
410      Return 0 on success; print an error message into BUFFER and return -1
411      otherwise.  */
412   virtual int read_btrace_conf (const btrace_target_info *tinfo,
413                                 buffer *buf);
414
415   /* Return true if target supports range stepping.  */
416   virtual bool supports_range_stepping ();
417
418   /* Return true if the pid_to_exec_file op is supported.  */
419   virtual bool supports_pid_to_exec_file ();
420
421   /* Return the full absolute name of the executable file that was
422      run to create the process PID.  If the executable file cannot
423      be determined, NULL is returned.  Otherwise, a pointer to a
424      character string containing the pathname is returned.  This
425      string should be copied into a buffer by the client if the string
426      will not be immediately used, or if it must persist.  */
427   virtual const char *pid_to_exec_file (int pid);
428
429   /* Return true if any of the multifs ops is supported.  */
430   virtual bool supports_multifs ();
431
432   /* Multiple-filesystem-aware open.  Like open(2), but operating in
433      the filesystem as it appears to process PID.  Systems where all
434      processes share a common filesystem should not override this.
435      The default behavior is to use open(2).  */
436   virtual int multifs_open (int pid, const char *filename,
437                             int flags, mode_t mode);
438
439   /* Multiple-filesystem-aware unlink.  Like unlink(2), but operates
440      in the filesystem as it appears to process PID.  Systems where
441      all processes share a common filesystem should not override this.
442      The default behavior is to use unlink(2).  */
443   virtual int multifs_unlink (int pid, const char *filename);
444
445   /* Multiple-filesystem-aware readlink.  Like readlink(2), but
446      operating in the filesystem as it appears to process PID.
447      Systems where all processes share a common filesystem should
448      not override this.  The default behavior is to use readlink(2).  */
449   virtual ssize_t multifs_readlink (int pid, const char *filename,
450                                     char *buf, size_t bufsiz);
451
452   /* Return the breakpoint kind for this target based on PC.  The
453      PCPTR is adjusted to the real memory location in case a flag
454      (e.g., the Thumb bit on ARM) was present in the PC.  */
455   virtual int breakpoint_kind_from_pc (CORE_ADDR *pcptr);
456
457   /* Return the software breakpoint from KIND.  KIND can have target
458      specific meaning like the Z0 kind parameter.
459      SIZE is set to the software breakpoint's length in memory.  */
460   virtual const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) = 0;
461
462   /* Return the breakpoint kind for this target based on the current
463      processor state (e.g. the current instruction mode on ARM) and the
464      PC.  The PCPTR is adjusted to the real memory location in case a
465      flag (e.g., the Thumb bit on ARM) is present in the  PC.  */
466   virtual int breakpoint_kind_from_current_state (CORE_ADDR *pcptr);
467
468   /* Return the thread's name, or NULL if the target is unable to
469      determine it.  The returned value must not be freed by the
470      caller.  */
471   virtual const char *thread_name (ptid_t thread);
472
473   /* Thread ID to (numeric) thread handle: Return true on success and
474      false for failure.  Return pointer to thread handle via HANDLE
475      and the handle's length via HANDLE_LEN.  */
476   virtual bool thread_handle (ptid_t ptid, gdb_byte **handle,
477                               int *handle_len);
478
479   /* If THREAD is a fork child that was not reported to GDB, return its parent
480      else nullptr.  */
481   virtual thread_info *thread_pending_parent (thread_info *thread);
482
483   /* If THREAD is the parent of a fork child that was not reported to GDB,
484      return this child, else nullptr.  */
485   virtual thread_info *thread_pending_child (thread_info *thread);
486
487   /* Returns true if the target can software single step.  */
488   virtual bool supports_software_single_step ();
489
490   /* Return true if the target supports catch syscall.  */
491   virtual bool supports_catch_syscall ();
492
493   /* Return tdesc index for IPA.  */
494   virtual int get_ipa_tdesc_idx ();
495
496   /* Returns true if the target supports memory tagging facilities.  */
497   virtual bool supports_memory_tagging ();
498
499   /* Return the allocated memory tags of type TYPE associated with
500      [ADDRESS, ADDRESS + LEN) in TAGS.
501
502      Returns true if successful and false otherwise.  */
503   virtual bool fetch_memtags (CORE_ADDR address, size_t len,
504                               gdb::byte_vector &tags, int type);
505
506   /* Write the allocation tags of type TYPE contained in TAGS to the
507      memory range [ADDRESS, ADDRESS + LEN).
508
509      Returns true if successful and false otherwise.  */
510   virtual bool store_memtags (CORE_ADDR address, size_t len,
511                               const gdb::byte_vector &tags, int type);
512 };
513
514 extern process_stratum_target *the_target;
515
516 void set_target_ops (process_stratum_target *);
517
518 #define target_create_inferior(program, program_args)   \
519   the_target->create_inferior (program, program_args)
520
521 #define target_post_create_inferior()                    \
522   the_target->post_create_inferior ()
523
524 #define myattach(pid) \
525   the_target->attach (pid)
526
527 int kill_inferior (process_info *proc);
528
529 #define target_supports_fork_events() \
530   the_target->supports_fork_events ()
531
532 #define target_supports_vfork_events() \
533   the_target->supports_vfork_events ()
534
535 #define target_supports_exec_events() \
536   the_target->supports_exec_events ()
537
538 #define target_supports_memory_tagging() \
539   the_target->supports_memory_tagging ()
540
541 #define target_handle_new_gdb_connection()               \
542   the_target->handle_new_gdb_connection ()
543
544 #define detach_inferior(proc) \
545   the_target->detach (proc)
546
547 #define mythread_alive(pid) \
548   the_target->thread_alive (pid)
549
550 #define fetch_inferior_registers(regcache, regno)       \
551   the_target->fetch_registers (regcache, regno)
552
553 #define store_inferior_registers(regcache, regno) \
554   the_target->store_registers (regcache, regno)
555
556 #define join_inferior(pid) \
557   the_target->join (pid)
558
559 #define target_supports_non_stop() \
560   the_target->supports_non_stop ()
561
562 #define target_async(enable) \
563   the_target->async (enable)
564
565 #define target_process_qsupported(features) \
566   the_target->process_qsupported (features)
567
568 #define target_supports_catch_syscall()                 \
569   the_target->supports_catch_syscall ()
570
571 #define target_get_ipa_tdesc_idx()                      \
572   the_target->get_ipa_tdesc_idx ()
573
574 #define target_supports_tracepoints()                   \
575   the_target->supports_tracepoints ()
576
577 #define target_supports_fast_tracepoints()              \
578   the_target->supports_fast_tracepoints ()
579
580 #define target_get_min_fast_tracepoint_insn_len()       \
581   the_target->get_min_fast_tracepoint_insn_len ()
582
583 #define target_thread_stopped(thread) \
584   the_target->thread_stopped (thread)
585
586 #define target_pause_all(freeze)                \
587   the_target->pause_all (freeze)
588
589 #define target_unpause_all(unfreeze)            \
590   the_target->unpause_all (unfreeze)
591
592 #define target_stabilize_threads()              \
593   the_target->stabilize_threads ()
594
595 #define target_install_fast_tracepoint_jump_pad(tpoint, tpaddr,         \
596                                                 collector, lockaddr,    \
597                                                 orig_size,              \
598                                                 jump_entry,             \
599                                                 trampoline, trampoline_size, \
600                                                 jjump_pad_insn,         \
601                                                 jjump_pad_insn_size,    \
602                                                 adjusted_insn_addr,     \
603                                                 adjusted_insn_addr_end, \
604                                                 err)                    \
605   the_target->install_fast_tracepoint_jump_pad (tpoint, tpaddr, \
606                                                 collector,lockaddr,     \
607                                                 orig_size, jump_entry,  \
608                                                 trampoline,             \
609                                                 trampoline_size,        \
610                                                 jjump_pad_insn,         \
611                                                 jjump_pad_insn_size,    \
612                                                 adjusted_insn_addr,     \
613                                                 adjusted_insn_addr_end, \
614                                                 err)
615
616 #define target_emit_ops() \
617   the_target->emit_ops ()
618
619 #define target_supports_disable_randomization() \
620   the_target->supports_disable_randomization ()
621
622 #define target_supports_agent() \
623   the_target->supports_agent ()
624
625 static inline struct btrace_target_info *
626 target_enable_btrace (thread_info *tp, const struct btrace_config *conf)
627 {
628   return the_target->enable_btrace (tp, conf);
629 }
630
631 static inline int
632 target_disable_btrace (struct btrace_target_info *tinfo)
633 {
634   return the_target->disable_btrace (tinfo);
635 }
636
637 static inline int
638 target_read_btrace (struct btrace_target_info *tinfo,
639                     struct buffer *buffer,
640                     enum btrace_read_type type)
641 {
642   return the_target->read_btrace (tinfo, buffer, type);
643 }
644
645 static inline int
646 target_read_btrace_conf (struct btrace_target_info *tinfo,
647                          struct buffer *buffer)
648 {
649   return the_target->read_btrace_conf (tinfo, buffer);
650 }
651
652 #define target_supports_range_stepping() \
653   the_target->supports_range_stepping ()
654
655 #define target_supports_stopped_by_sw_breakpoint() \
656   the_target->supports_stopped_by_sw_breakpoint ()
657
658 #define target_stopped_by_sw_breakpoint() \
659   the_target->stopped_by_sw_breakpoint ()
660
661 #define target_supports_stopped_by_hw_breakpoint() \
662   the_target->supports_stopped_by_hw_breakpoint ()
663
664 #define target_supports_hardware_single_step() \
665   the_target->supports_hardware_single_step ()
666
667 #define target_stopped_by_hw_breakpoint() \
668   the_target->stopped_by_hw_breakpoint ()
669
670 #define target_breakpoint_kind_from_pc(pcptr) \
671   the_target->breakpoint_kind_from_pc (pcptr)
672
673 #define target_breakpoint_kind_from_current_state(pcptr) \
674   the_target->breakpoint_kind_from_current_state (pcptr)
675
676 #define target_supports_software_single_step() \
677   the_target->supports_software_single_step ()
678
679 ptid_t mywait (ptid_t ptid, struct target_waitstatus *ourstatus,
680                target_wait_flags options, int connected_wait);
681
682 #define target_core_of_thread(ptid)             \
683   the_target->core_of_thread (ptid)
684
685 #define target_thread_name(ptid)                                \
686   the_target->thread_name (ptid)
687
688 #define target_thread_handle(ptid, handle, handle_len) \
689   the_target->thread_handle (ptid, handle, handle_len)
690
691 static inline thread_info *
692 target_thread_pending_parent (thread_info *thread)
693 {
694   return the_target->thread_pending_parent (thread);
695 }
696
697 static inline thread_info *
698 target_thread_pending_child (thread_info *thread)
699 {
700   return the_target->thread_pending_child (thread);
701 }
702
703 int read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len);
704
705 /* Set GDBserver's current thread to the thread the client requested
706    via Hg.  Also switches the current process to the requested
707    process.  If the requested thread is not found in the thread list,
708    then the current thread is set to NULL.  Likewise, if the requested
709    process is not found in the process list, then the current process
710    is set to NULL.  Returns true if the requested thread was found,
711    false otherwise.  */
712
713 bool set_desired_thread ();
714
715 /* Set GDBserver's current process to the process the client requested
716    via Hg.  The current thread is set to NULL.  */
717
718 bool set_desired_process ();
719
720 std::string target_pid_to_str (ptid_t);
721
722 #endif /* GDBSERVER_TARGET_H */
This page took 0.094417 seconds and 4 git commands to generate.