X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fgdbserver%2Flinux-low.h;h=91061447cc6c055f2e86f9b5baed7bedac758e05;hb=6afd337d1a1a789b71d77b157529c08250eb9093;hp=24ea2d35fbfe11c1f68b782de37753e3668dd51a;hpb=7d00775ece9e2364da5cfd65ebbfce515859667f;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/gdbserver/linux-low.h b/gdb/gdbserver/linux-low.h index 24ea2d35fb..91061447cc 100644 --- a/gdb/gdbserver/linux-low.h +++ b/gdb/gdbserver/linux-low.h @@ -1,5 +1,5 @@ /* Internal interfaces for the GNU/Linux specific target code for gdbserver. - Copyright (C) 2002-2015 Free Software Foundation, Inc. + Copyright (C) 2002-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -26,6 +26,7 @@ /* Included for ptrace type definitions. */ #include "nat/linux-ptrace.h" #include "target/waitstatus.h" /* For enum target_stop_reason. */ +#include "tracepoint.h" #define PTRACE_XFER_TYPE long @@ -153,7 +154,8 @@ struct linux_target_ops /* See target.h for details. */ const gdb_byte *(*sw_breakpoint_from_kind) (int kind, int *size); - CORE_ADDR (*breakpoint_reinsert_addr) (void); + /* Find the next possible PCs after the current instruction executes. */ + std::vector (*get_next_pcs) (struct regcache *regcache); int decr_pc_after_break; int (*breakpoint_at) (CORE_ADDR pc); @@ -180,7 +182,7 @@ struct linux_target_ops Returns true if any conversion was done; false otherwise. If DIRECTION is 1, then copy from INF to NATIVE. If DIRECTION is 0, copy from NATIVE to INF. */ - int (*siginfo_fixup) (siginfo_t *native, void *inf, int direction); + int (*siginfo_fixup) (siginfo_t *native, gdb_byte *inf, int direction); /* Hook to call when a new process is created or attached to. If extra per-process architecture-specific data is needed, @@ -239,11 +241,18 @@ struct linux_target_ops /* See target.h. */ int (*supports_hardware_single_step) (void); + + /* Fill *SYSNO with the syscall nr trapped. Only to be called when + inferior is stopped due to SYSCALL_SIGTRAP. */ + void (*get_syscall_trapinfo) (struct regcache *regcache, int *sysno); + + /* See target.h. */ + int (*get_ipa_tdesc_idx) (void); }; extern struct linux_target_ops the_low_target; -#define get_thread_lwp(thr) ((struct lwp_info *) (inferior_target_data (thr))) +#define get_thread_lwp(thr) ((struct lwp_info *) (thread_target_data (thr))) #define get_lwp_thread(lwp) ((lwp)->thread) /* This struct is recorded in the target_data field of struct thread_info. @@ -277,6 +286,13 @@ struct lwp_info event already received in a wait()). */ int stopped; + /* Signal whether we are in a SYSCALL_ENTRY or + in a SYSCALL_RETURN event. + Values: + - TARGET_WAITKIND_SYSCALL_ENTRY + - TARGET_WAITKIND_SYSCALL_RETURN */ + enum target_waitkind syscall_state; + /* When stopped is set, the last wait status recorded for this lwp. */ int last_status; @@ -286,6 +302,12 @@ struct lwp_info information or exit status until it can be reported to GDB. */ struct target_waitstatus waitstatus; + /* A pointer to the fork child/parent relative. Valid only while + the parent fork event is not reported to higher layers. Used to + avoid wildcard vCont actions resuming a fork child before GDB is + notified about the parent's fork event. */ + struct lwp_info *fork_relative; + /* When stopped is set, this is where the lwp last stopped, with decr_pc_after_break already accounted for. If the LWP is running, this is the address at which the lwp was resumed. */ @@ -332,12 +354,11 @@ struct lwp_info and then processed and cleared in linux_resume_one_lwp. */ struct thread_resume *resume; - /* True if it is known that this lwp is presently collecting a fast - tracepoint (it is in the jump pad or in some code that will - return to the jump pad. Normally, we won't care about this, but - we will if a signal arrives to this lwp while it is - collecting. */ - int collecting_fast_tracepoint; + /* Information bout this lwp's fast tracepoint collection status (is it + currently stopped in the jump pad, and if so, before or at/after the + relocated instruction). Normally, we won't care about this, but we will + if a signal arrives to this lwp while it is collecting. */ + fast_tpoint_collect_result collecting_fast_tracepoint; /* If this is non-zero, it points to a chain of signals which need to be reported to GDB. These were deferred because the thread @@ -348,10 +369,6 @@ struct lwp_info a exit-jump-pad-quickly breakpoint. This is it. */ struct breakpoint *exit_jump_pad_bkpt; - /* True if the LWP was seen stop at an internal breakpoint and needs - stepping over later when it is resumed. */ - int need_step_over; - #ifdef USE_THREAD_DB int thread_known; /* The thread handle, used for e.g. TLS access. Only valid if @@ -378,8 +395,14 @@ void initialize_regsets_info (struct regsets_info *regsets_info); void initialize_low_arch (void); +void linux_set_pc_32bit (struct regcache *regcache, CORE_ADDR pc); +CORE_ADDR linux_get_pc_32bit (struct regcache *regcache); + +void linux_set_pc_64bit (struct regcache *regcache, CORE_ADDR pc); +CORE_ADDR linux_get_pc_64bit (struct regcache *regcache); + /* From thread-db.c */ -int thread_db_init (int use_events); +int thread_db_init (void); void thread_db_detach (struct process_info *); void thread_db_mourn (struct process_info *); int thread_db_handle_monitor_command (char *);