GDBserver
/home/stan/gdb/src/gdb/gdbserver/linux-low.h
Go to the documentation of this file.
00001 /* Internal interfaces for the GNU/Linux specific target code for gdbserver.
00002    Copyright (C) 2002-2013 Free Software Foundation, Inc.
00003 
00004    This file is part of GDB.
00005 
00006    This program is free software; you can redistribute it and/or modify
00007    it under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 3 of the License, or
00009    (at your option) any later version.
00010 
00011    This program is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014    GNU General Public License for more details.
00015 
00016    You should have received a copy of the GNU General Public License
00017    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00018 
00019 #include "gdb_thread_db.h"
00020 #include <signal.h>
00021 
00022 #include "gdbthread.h"
00023 #include "gdb_proc_service.h"
00024 
00025 /* Included for ptrace type definitions.  */
00026 #include "linux-ptrace.h"
00027 
00028 #define PTRACE_XFER_TYPE long
00029 
00030 #ifdef HAVE_LINUX_REGSETS
00031 typedef void (*regset_fill_func) (struct regcache *, void *);
00032 typedef void (*regset_store_func) (struct regcache *, const void *);
00033 enum regset_type {
00034   GENERAL_REGS,
00035   FP_REGS,
00036   EXTENDED_REGS,
00037 };
00038 
00039 struct regset_info
00040 {
00041   int get_request, set_request;
00042   /* If NT_TYPE isn't 0, it will be passed to ptrace as the 3rd
00043      argument and the 4th argument should be "const struct iovec *".  */
00044   int nt_type;
00045   int size;
00046   enum regset_type type;
00047   regset_fill_func fill_function;
00048   regset_store_func store_function;
00049 };
00050 
00051 /* Aggregation of all the supported regsets of a given
00052    architecture/mode.  */
00053 
00054 struct regsets_info
00055 {
00056   /* The regsets array.  */
00057   struct regset_info *regsets;
00058 
00059   /* The number of regsets in the REGSETS array.  */
00060   int num_regsets;
00061 
00062   /* If we get EIO on a regset, do not try it again.  Note the set of
00063      supported regsets may depend on processor mode on biarch
00064      machines.  This is a (lazily allocated) array holding one boolean
00065      byte (0/1) per regset, with each element corresponding to the
00066      regset in the REGSETS array above at the same offset.  */
00067   char *disabled_regsets;
00068 };
00069 
00070 #endif
00071 
00072 /* Mapping between the general-purpose registers in `struct user'
00073    format and GDB's register array layout.  */
00074 
00075 struct usrregs_info
00076 {
00077   /* The number of registers accessible.  */
00078   int num_regs;
00079 
00080   /* The registers map.  */
00081   int *regmap;
00082 };
00083 
00084 /* All info needed to access an architecture/mode's registers.  */
00085 
00086 struct regs_info
00087 {
00088   /* Regset support bitmap: 1 for registers that are transferred as a part
00089      of a regset, 0 for ones that need to be handled individually.  This
00090      can be NULL if all registers are transferred with regsets or regsets
00091      are not supported.  */
00092   unsigned char *regset_bitmap;
00093 
00094   /* Info used when accessing registers with PTRACE_PEEKUSER /
00095      PTRACE_POKEUSER.  This can be NULL if all registers are
00096      transferred with regsets  .*/
00097   struct usrregs_info *usrregs;
00098 
00099 #ifdef HAVE_LINUX_REGSETS
00100   /* Info used when accessing registers with regsets.  */
00101   struct regsets_info *regsets_info;
00102 #endif
00103 };
00104 
00105 struct process_info_private
00106 {
00107   /* Arch-specific additions.  */
00108   struct arch_process_info *arch_private;
00109 
00110   /* libthread_db-specific additions.  Not NULL if this process has loaded
00111      thread_db, and it is active.  */
00112   struct thread_db *thread_db;
00113 
00114   /* &_r_debug.  0 if not yet determined.  -1 if no PT_DYNAMIC in Phdrs.  */
00115   CORE_ADDR r_debug;
00116 
00117   /* This flag is true iff we've just created or attached to the first
00118      LWP of this process but it has not stopped yet.  As soon as it
00119      does, we need to call the low target's arch_setup callback.  */
00120   int new_inferior;
00121 };
00122 
00123 struct lwp_info;
00124 
00125 struct linux_target_ops
00126 {
00127   /* Architecture-specific setup.  */
00128   void (*arch_setup) (void);
00129 
00130   const struct regs_info *(*regs_info) (void);
00131   int (*cannot_fetch_register) (int);
00132 
00133   /* Returns 0 if we can store the register, 1 if we can not
00134      store the register, and 2 if failure to store the register
00135      is acceptable.  */
00136   int (*cannot_store_register) (int);
00137 
00138   /* Hook to fetch a register in some non-standard way.  Used for
00139      example by backends that have read-only registers with hardcoded
00140      values (e.g., IA64's gr0/fr0/fr1).  Returns true if register
00141      REGNO was supplied, false if not, and we should fallback to the
00142      standard ptrace methods.  */
00143   int (*fetch_register) (struct regcache *regcache, int regno);
00144 
00145   CORE_ADDR (*get_pc) (struct regcache *regcache);
00146   void (*set_pc) (struct regcache *regcache, CORE_ADDR newpc);
00147   const unsigned char *breakpoint;
00148   int breakpoint_len;
00149   CORE_ADDR (*breakpoint_reinsert_addr) (void);
00150 
00151   int decr_pc_after_break;
00152   int (*breakpoint_at) (CORE_ADDR pc);
00153 
00154   /* Breakpoint and watchpoint related functions.  See target.h for
00155      comments.  */
00156   int (*insert_point) (char type, CORE_ADDR addr, int len);
00157   int (*remove_point) (char type, CORE_ADDR addr, int len);
00158   int (*stopped_by_watchpoint) (void);
00159   CORE_ADDR (*stopped_data_address) (void);
00160 
00161   /* Hooks to reformat register data for PEEKUSR/POKEUSR (in particular
00162      for registers smaller than an xfer unit).  */
00163   void (*collect_ptrace_register) (struct regcache *regcache,
00164                                    int regno, char *buf);
00165   void (*supply_ptrace_register) (struct regcache *regcache,
00166                                   int regno, const char *buf);
00167 
00168   /* Hook to convert from target format to ptrace format and back.
00169      Returns true if any conversion was done; false otherwise.
00170      If DIRECTION is 1, then copy from INF to NATIVE.
00171      If DIRECTION is 0, copy from NATIVE to INF.  */
00172   int (*siginfo_fixup) (siginfo_t *native, void *inf, int direction);
00173 
00174   /* Hook to call when a new process is created or attached to.
00175      If extra per-process architecture-specific data is needed,
00176      allocate it here.  */
00177   struct arch_process_info * (*new_process) (void);
00178 
00179   /* Hook to call when a new thread is detected.
00180      If extra per-thread architecture-specific data is needed,
00181      allocate it here.  */
00182   struct arch_lwp_info * (*new_thread) (void);
00183 
00184   /* Hook to call prior to resuming a thread.  */
00185   void (*prepare_to_resume) (struct lwp_info *);
00186 
00187   /* Hook to support target specific qSupported.  */
00188   void (*process_qsupported) (const char *);
00189 
00190   /* Returns true if the low target supports tracepoints.  */
00191   int (*supports_tracepoints) (void);
00192 
00193   /* Fill ADDRP with the thread area address of LWPID.  Returns 0 on
00194      success, -1 on failure.  */
00195   int (*get_thread_area) (int lwpid, CORE_ADDR *addrp);
00196 
00197   /* Install a fast tracepoint jump pad.  See target.h for
00198      comments.  */
00199   int (*install_fast_tracepoint_jump_pad) (CORE_ADDR tpoint, CORE_ADDR tpaddr,
00200                                            CORE_ADDR collector,
00201                                            CORE_ADDR lockaddr,
00202                                            ULONGEST orig_size,
00203                                            CORE_ADDR *jump_entry,
00204                                            CORE_ADDR *trampoline,
00205                                            ULONGEST *trampoline_size,
00206                                            unsigned char *jjump_pad_insn,
00207                                            ULONGEST *jjump_pad_insn_size,
00208                                            CORE_ADDR *adjusted_insn_addr,
00209                                            CORE_ADDR *adjusted_insn_addr_end,
00210                                            char *err);
00211 
00212   /* Return the bytecode operations vector for the current inferior.
00213      Returns NULL if bytecode compilation is not supported.  */
00214   struct emit_ops *(*emit_ops) (void);
00215 
00216   /* Return the minimum length of an instruction that can be safely overwritten
00217      for use as a fast tracepoint.  */
00218   int (*get_min_fast_tracepoint_insn_len) (void);
00219 
00220   /* Returns true if the low target supports range stepping.  */
00221   int (*supports_range_stepping) (void);
00222 };
00223 
00224 extern struct linux_target_ops the_low_target;
00225 
00226 #define ptid_of(proc) ((proc)->head.id)
00227 #define pid_of(proc) ptid_get_pid ((proc)->head.id)
00228 #define lwpid_of(proc) ptid_get_lwp ((proc)->head.id)
00229 
00230 #define get_lwp(inf) ((struct lwp_info *)(inf))
00231 #define get_thread_lwp(thr) (get_lwp (inferior_target_data (thr)))
00232 #define get_lwp_thread(proc) ((struct thread_info *)                    \
00233                               find_inferior_id (&all_threads,           \
00234                                                 get_lwp (proc)->head.id))
00235 
00236 struct lwp_info
00237 {
00238   struct inferior_list_entry head;
00239 
00240   /* If this flag is set, the next SIGSTOP will be ignored (the
00241      process will be immediately resumed).  This means that either we
00242      sent the SIGSTOP to it ourselves and got some other pending event
00243      (so the SIGSTOP is still pending), or that we stopped the
00244      inferior implicitly via PTRACE_ATTACH and have not waited for it
00245      yet.  */
00246   int stop_expected;
00247 
00248   /* When this is true, we shall not try to resume this thread, even
00249      if last_resume_kind isn't resume_stop.  */
00250   int suspended;
00251 
00252   /* If this flag is set, the lwp is known to be stopped right now (stop
00253      event already received in a wait()).  */
00254   int stopped;
00255 
00256   /* If this flag is set, the lwp is known to be dead already (exit
00257      event already received in a wait(), and is cached in
00258      status_pending).  */
00259   int dead;
00260 
00261   /* When stopped is set, the last wait status recorded for this lwp.  */
00262   int last_status;
00263 
00264   /* When stopped is set, this is where the lwp stopped, with
00265      decr_pc_after_break already accounted for.  */
00266   CORE_ADDR stop_pc;
00267 
00268   /* If this flag is set, STATUS_PENDING is a waitstatus that has not yet
00269      been reported.  */
00270   int status_pending_p;
00271   int status_pending;
00272 
00273   /* STOPPED_BY_WATCHPOINT is non-zero if this LWP stopped with a data
00274      watchpoint trap.  */
00275   int stopped_by_watchpoint;
00276 
00277   /* On architectures where it is possible to know the data address of
00278      a triggered watchpoint, STOPPED_DATA_ADDRESS is non-zero, and
00279      contains such data address.  Only valid if STOPPED_BY_WATCHPOINT
00280      is true.  */
00281   CORE_ADDR stopped_data_address;
00282 
00283   /* If this is non-zero, it is a breakpoint to be reinserted at our next
00284      stop (SIGTRAP stops only).  */
00285   CORE_ADDR bp_reinsert;
00286 
00287   /* If this flag is set, the last continue operation at the ptrace
00288      level on this process was a single-step.  */
00289   int stepping;
00290 
00291   /* Range to single step within.  This is a copy of the step range
00292      passed along the last resume request.  See 'struct
00293      thread_resume'.  */
00294   CORE_ADDR step_range_start;   /* Inclusive */
00295   CORE_ADDR step_range_end;     /* Exclusive */
00296 
00297   /* If this flag is set, we need to set the event request flags the
00298      next time we see this LWP stop.  */
00299   int must_set_ptrace_flags;
00300 
00301   /* If this is non-zero, it points to a chain of signals which need to
00302      be delivered to this process.  */
00303   struct pending_signals *pending_signals;
00304 
00305   /* A link used when resuming.  It is initialized from the resume request,
00306      and then processed and cleared in linux_resume_one_lwp.  */
00307   struct thread_resume *resume;
00308 
00309   /* True if it is known that this lwp is presently collecting a fast
00310      tracepoint (it is in the jump pad or in some code that will
00311      return to the jump pad.  Normally, we won't care about this, but
00312      we will if a signal arrives to this lwp while it is
00313      collecting.  */
00314   int collecting_fast_tracepoint;
00315 
00316   /* If this is non-zero, it points to a chain of signals which need
00317      to be reported to GDB.  These were deferred because the thread
00318      was doing a fast tracepoint collect when they arrived.  */
00319   struct pending_signals *pending_signals_to_report;
00320 
00321   /* When collecting_fast_tracepoint is first found to be 1, we insert
00322      a exit-jump-pad-quickly breakpoint.  This is it.  */
00323   struct breakpoint *exit_jump_pad_bkpt;
00324 
00325   /* True if the LWP was seen stop at an internal breakpoint and needs
00326      stepping over later when it is resumed.  */
00327   int need_step_over;
00328 
00329 #ifdef USE_THREAD_DB
00330   int thread_known;
00331   /* The thread handle, used for e.g. TLS access.  Only valid if
00332      THREAD_KNOWN is set.  */
00333   td_thrhandle_t th;
00334 #endif
00335 
00336   /* Arch-specific additions.  */
00337   struct arch_lwp_info *arch_private;
00338 };
00339 
00340 extern struct inferior_list all_lwps;
00341 
00342 int linux_pid_exe_is_elf_64_file (int pid, unsigned int *machine);
00343 
00344 void linux_attach_lwp (unsigned long pid);
00345 struct lwp_info *find_lwp_pid (ptid_t ptid);
00346 void linux_stop_lwp (struct lwp_info *lwp);
00347 
00348 #ifdef HAVE_LINUX_REGSETS
00349 void initialize_regsets_info (struct regsets_info *regsets_info);
00350 #endif
00351 
00352 void initialize_low_arch (void);
00353 
00354 /* From thread-db.c  */
00355 int thread_db_init (int use_events);
00356 void thread_db_detach (struct process_info *);
00357 void thread_db_mourn (struct process_info *);
00358 int thread_db_handle_monitor_command (char *);
00359 int thread_db_get_tls_address (struct thread_info *thread, CORE_ADDR offset,
00360                                CORE_ADDR load_module, CORE_ADDR *address);
00361 int thread_db_look_up_one_symbol (const char *name, CORE_ADDR *addrp);
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines