GDBserver
|
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);