backend.h revision 8fdd09b028426f92df614d6ebe5c56d99877febf
1/*
2 * This file is part of ltrace.
3 * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
7 * published by the Free Software Foundation; either version 2 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 * General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18 * 02110-1301 USA
19 */
20
21#ifndef BACKEND_H
22#define BACKEND_H
23
24#include "forward.h"
25#include "sysdep.h"
26
27#include <gelf.h>
28
29enum process_status {
30	PS_INVALID,	/* Failure.  */
31	PS_STOP,	/* Job-control stop.  */
32	PS_TRACING_STOP,
33	PS_SLEEPING,
34	PS_ZOMBIE,
35	PS_OTHER,	/* Necessary other states can be added as needed.  */
36};
37
38/*
39 * This file contains documentation of back end interface.  Some of
40 * these may be implemented on an OS level (i.e. they are the same
41 * e.g. on all Linux architectures), some may differ per architecture
42 * on the same OS (e.g. a way to insert a breakpoint into the process
43 * image is a likely candidate).
44 */
45
46/* Convert a PID to a path to the corresponding binary.  */
47char *pid2name(pid_t pid);
48
49/* Given a PID, find a leader of thread group.  */
50pid_t process_leader(pid_t pid);
51
52/* Given a PID of leader thread, fill in PIDs of all the tasks.  The
53 * function will initialize the pointer *RET_TASKS to a
54 * newly-allocated array, and will store number of elements in that
55 * array to *RET_N.  You have to free that buffer when you don't need
56 * it anymore.  */
57int process_tasks(pid_t pid, pid_t **ret_tasks, size_t *ret_n);
58
59/* Answer whether the process PID is stopped.  Returns 0 when not
60 * stopped, 1 when stopped, or -1 when there was an error.  */
61int process_stopped(pid_t pid);
62
63/* Answer a status of the task PID.  See enum process_status.  */
64enum process_status process_status(pid_t pid);
65
66/* Wait for PID to be ready for tracing.  */
67int wait_for_proc(pid_t pid);
68
69/* Send a signal SIG to the task PID.  */
70int task_kill(pid_t pid, int sig);
71
72/* Called after PID is attached, but before it is continued.  */
73void trace_set_options(struct process *proc);
74
75/* Called after ltrace forks.  Should attach the newly created child,
76 * in whose context this function is called.  */
77void trace_me(void);
78
79/* Called when ltrace needs to attach to PID, such as when it attaches
80 * to a running process, whose PID is given on the command line.  */
81int trace_pid(pid_t pid);
82
83/* Stop tracing PID.  */
84void untrace_pid(pid_t pid);
85
86/* The back end may need to store arbitrary data to a process.  This
87 * is a place where it can initialize PROC->arch_dep.  XXX this should
88 * be dropped in favor of arhc_process_init on pmachata/libs.  */
89void get_arch_dep(struct process *proc);
90
91/* Return current instruction pointer of PROC.
92 *
93 * XXX note that the IP must fit into an arch pointer.  This prevents
94 * us to use 32-bit ltrace to trace 64-bit process, even on arches
95 * that would otherwise support this.  Above we have a definition of
96 * arch_addr_t.  This should be converted to an integral type and
97 * used for target addresses throughout.  */
98void *get_instruction_pointer(struct process *proc);
99
100/* Set instruction pointer of PROC to ADDR.  XXX see above.  */
101void set_instruction_pointer(struct process *proc, void *addr);
102
103/* Return current stack pointer of PROC.  XXX see above.  */
104void *get_stack_pointer(struct process *proc);
105
106/* Find and return caller address, i.e. the address where the current
107 * function returns.  */
108void *get_return_addr(struct process *proc, void *stack_pointer);
109
110/* Enable breakpoint SBP in process PROC.  */
111void enable_breakpoint(struct process *proc, struct breakpoint *sbp);
112
113/* Disable breakpoint SBP in process PROC.  */
114void disable_breakpoint(struct process *proc, struct breakpoint *sbp);
115
116/* Determine whether the event that we have just seen (and that is
117 * recorded in STATUS) was a syscall.  If it was, return 1.  If it was
118 * a return from syscall, return 2.  In both cases, set *SYSNUM to the
119 * number of said syscall.  If it wasn't a syscall, return 0.  If
120 * there was an error, return -1.  */
121int syscall_p(struct process *proc, int status, int *sysnum);
122
123/* Continue execution of the process with given PID.  */
124void continue_process(pid_t pid);
125
126/* Called after we received a signal SIGNUM.  Should do whatever
127 * book-keeping is necessary and continue the process if
128 * necessary.  */
129void continue_after_signal(pid_t pid, int signum);
130
131/* Called after we received a system call SYSNUM.  RET_P is 0 if this
132 * is system call, otherwise it's return from a system call.  The
133 * callback should do whatever book-keeping is necessary and continue
134 * the process if necessary.  */
135void continue_after_syscall(struct process *proc, int sysnum, int ret_p);
136
137/* Called after we hit a breakpoint SBP.  Should do whatever
138 * book-keeping is necessary and then continue the process.  */
139void continue_after_breakpoint(struct process *proc, struct breakpoint *sbp);
140
141/* Called after we received a vfork.  Should do whatever book-keeping
142 * is necessary and continue the process if necessary.  N.B. right
143 * now, with Linux/GNU the only back end, this is not necessary.  I
144 * imagine other systems may be different.  */
145void continue_after_vfork(struct process *proc);
146
147/* Called after the process exec's.  Should do whatever book-keeping
148 * is necessary and then continue the process.  */
149void continue_after_exec(struct process *proc);
150
151/* Called when trace_me or primary trace_pid fail.  This may plug in
152 * any platform-specific knowledge of why it could be so.  */
153void trace_fail_warning(pid_t pid);
154
155/* A pair of functions called to initiate a detachment request when
156 * ltrace is about to exit.  Their job is to undo any effects that
157 * tracing had and eventually detach process, perhaps by way of
158 * installing a process handler.
159 *
160 * OS_LTRACE_EXITING_SIGHANDLER is called from a signal handler
161 * context right after the signal was captured.  It returns 1 if the
162 * request was handled or 0 if it wasn't.
163 *
164 * If the call to OS_LTRACE_EXITING_SIGHANDLER didn't handle the
165 * request, OS_LTRACE_EXITING is called when the next event is
166 * generated.  Therefore it's called in "safe" context, without
167 * re-entrancy concerns, but it's only called after an even is
168 * generated.  */
169int os_ltrace_exiting_sighandler(void);
170void os_ltrace_exiting(void);
171
172/* Should copy COUNT bytes from address ADDR of process PROC to local
173 * buffer BUF.  */
174size_t umovebytes(struct process *proc, void *addr, void *buf, size_t count);
175
176/* Find out an address of symbol SYM in process PROC, and return.
177 * Returning NULL delays breakpoint insertion and enables heaps of
178 * arch-specific black magic that we should clean up some day.
179 *
180 * XXX the same points as for get_instruction_pointer apply. */
181void *sym2addr(struct process *proc, struct library_symbol *sym);
182
183/* Obtain address of PLT entry corresponding to relocation RELA in
184 * file LTE.  This is NDX-th PLT entry in the file.
185 *
186 * XXX should this return arch_addr_t?  */
187GElf_Addr arch_plt_sym_val(struct ltelf *lte, size_t ndx, GElf_Rela *rela);
188
189/* Called at some point after we have attached to PROC.  This callback
190 * should insert an introspection breakpoint for handling dynamic
191 * linker library loads.  */
192int linkmap_init(struct process *proc, arch_addr_t dyn_addr);
193
194/* This should produce and return the next event of one of the traced
195 * processes.  The returned pointer will not be freed by the core and
196 * should be either statically allocated, or the management should be
197 * done some other way.  */
198struct Event *next_event(void);
199
200/* Called when process PROC was removed.  */
201void process_removed(struct process *proc);
202
203/* This should extract entry point address and interpreter (dynamic
204 * linker) bias if possible.  Returns 0 if there were no errors, -1
205 * otherwise.  Sets *ENTRYP and *INTERP_BIASP to non-zero values if
206 * the corresponding value is known, or zero otherwise; this is not
207 * done for pointers that are NULL.  */
208int process_get_entry(struct process *proc,
209		      arch_addr_t *entryp,
210		      arch_addr_t *interp_biasp);
211
212
213/* Optional callbacks
214 *
215 * Some callbacks are only available if backend (arch.h) has a certain
216 * define.  If such a define is not present, default implementation
217 * (most often doing nothing at all) us used instead.  This is used
218 * for gradual extensions of ltrace, so that backends that are not
219 * fully up to date, or that don't need certain functionality, keep
220 * working, while other backends take advantage of the optional
221 * features.  */
222
223/* The following callbacks have to be implemented in backend if arch.h
224 * defines ARCH_HAVE_LTELF_DATA.  Those are used to init and destroy
225 * LTE->arch.  arch_elf_init returns 0 on success or a negative value
226 * on failure.  */
227int arch_elf_init(struct ltelf *lte, struct library *lib);
228void arch_elf_destroy(struct ltelf *lte);
229
230/* The following callbacks have to be implemented in backend if arch.h
231 * defines ARCH_HAVE_BREAKPOINT_DATA.  Those are used to init,
232 * destroy, and clone SBP->arch.  arch_breakpoint_init and
233 * arch_breakpoint_clone return 0 on success or a negative value on
234 * failure.  */
235int arch_breakpoint_init(struct process *proc, struct breakpoint *sbp);
236void arch_breakpoint_destroy(struct breakpoint *sbp);
237int arch_breakpoint_clone(struct breakpoint *retp, struct breakpoint *sbp);
238
239/* The following callbacks have to be implemented in OS backend if
240 * os.h defines OS_HAVE_LIBRARY_DATA.  Those are used to init, destroy
241 * and clone LIB->os.  os_library_init and os_library_clone return 0
242 * on success or a negative value on failure.  */
243int os_library_init(struct library *lib);
244void os_library_destroy(struct library *lib);
245int os_library_clone(struct library *retp, struct library *lib);
246
247/* The following callbacks have to be implemented in backend if arch.h
248 * defines ARCH_HAVE_LIBRARY_DATA.  Those are used to init, destroy
249 * and clone LIB->arch.  arch_library_init and arch_library_clone
250 * return 0 on success or a negative value on failure.  */
251int arch_library_init(struct library *lib);
252void arch_library_destroy(struct library *lib);
253int arch_library_clone(struct library *retp, struct library *lib);
254
255/* The following callbacks have to be implemented in OS backend if
256 * os.h defines OS_HAVE_LIBRARY_SYMBOL_DATA.  Those are used to init,
257 * destroy and clone LIBSYM->os.  os_library_symbol_init and
258 * os_library_symbol_clone return 0 on success or a negative value on
259 * failure.  */
260int os_library_symbol_init(struct library_symbol *libsym);
261void os_library_symbol_destroy(struct library_symbol *libsym);
262int os_library_symbol_clone(struct library_symbol *retp,
263			    struct library_symbol *libsym);
264
265/* The following callbacks have to be implemented in backend if arch.h
266 * defines ARCH_HAVE_LIBRARY_SYMBOL_DATA.  Those are used to init,
267 * destroy and clone LIBSYM->arch.  arch_library_symbol_init and
268 * arch_library_symbol_clone return 0 on success or a negative value
269 * on failure.  */
270int arch_library_symbol_init(struct library_symbol *libsym);
271void arch_library_symbol_destroy(struct library_symbol *libsym);
272int arch_library_symbol_clone(struct library_symbol *retp,
273			      struct library_symbol *libsym);
274
275/* The following callbacks have to be implemented in backend if arch.h
276 * defines ARCH_HAVE_PROCESS_DATA.  Those are used to init, destroy
277 * and clone PROC->arch.  arch_process_exec is called to update
278 * PROC->arch in case that PROC underwent an exec.  See notes at
279 * process_init, process_destroy, process_clone and process_exec in
280 * proc.h.  */
281int arch_process_init(struct process *proc);
282void arch_process_destroy(struct process *proc);
283int arch_process_clone(struct process *retp, struct process *proc);
284int arch_process_exec(struct process *proc);
285
286/* The following callbacks have to be implemented in OS backend if
287 * os.h defines OS_HAVE_PROCESS_DATA.  The protocol is same as for,
288 * respectively, arch_process_init, arch_process_destroy,
289 * arch_process_clone and arch_process_exec.  */
290int os_process_init(struct process *proc);
291void os_process_destroy(struct process *proc);
292int os_process_clone(struct process *retp, struct process *proc);
293int os_process_exec(struct process *proc);
294
295/* The following callback has to be implemented in backend if arch.h
296 * defines ARCH_HAVE_GET_SYM_INFO.
297 *
298 * This is called for every PLT relocation RELA in ELF file LTE (which
299 * is named FILENAME), that ltrace is about to add.  The corresponding
300 * PLT entry is for SYM_INDEX-th relocation in the file.  This call is
301 * supposed to initialize SYM and RELA.  It returns 0 if there were no
302 * errors and given symbol should be used, 1 if the symbol should not
303 * be used, or a negative value if there were errors.
304 *
305 * The backend implementation can delegate some of the work to default
306 * implementation in elf_get_sym_info.  */
307int arch_get_sym_info(struct ltelf *lte, const char *filename, size_t sym_index,
308		      GElf_Rela *rela, GElf_Sym *sym);
309
310enum plt_status {
311	PLT_FAIL,
312	PLT_OK,
313	PLT_DEFAULT,
314};
315
316/* The following callback has to be implemented in backend if arch.h
317 * defines ARCH_HAVE_ADD_PLT_ENTRY.
318 *
319 * This is called for every PLT relocation R in ELF file LTE, that
320 * ltrace is about to add to a library constructed in process PROC.
321 * The corresponding PLT entry is for symbol called NAME, and it's
322 * I-th relocation in the file.
323 *
324 * If this function returns PLT_DEFAULT, PLT address is obtained by
325 * calling arch_plt_sym_val, and symbol is allocated.  If PLT_OK or
326 * PLT_DEFAULT are returned, the chain of symbols passed back in RET
327 * is added to library under construction.  */
328enum plt_status arch_elf_add_plt_entry(struct process *proc, struct ltelf *lte,
329				       const char *name, GElf_Rela *rela,
330				       size_t i, struct library_symbol **ret);
331
332/* This callback needs to be implemented if arch.h defines
333 * ARCH_HAVE_DYNLINK_DONE.  It is called after the dynamic linker is
334 * done with the process start-up.  */
335void arch_dynlink_done(struct process *proc);
336
337/* This callback needs to be implemented if arch.h defines
338 * ARCH_HAVE_SYMBOL_RET.  It is called after a traced call returns.  */
339void arch_symbol_ret(struct process *proc, struct library_symbol *libsym);
340
341
342/* This callback needs to be implemented if arch.h defines
343 * ARCH_HAVE_FIND_DL_DEBUG.
344 * It is called by generic code to find the address of the dynamic
345 * linkers debug structure.
346 * DYN_ADDR holds the address of the dynamic section.
347 * If the debug area is found, return 0 and fill in the address in *RET.
348 * If the debug area is not found, return a negative value.  */
349int arch_find_dl_debug(struct process *proc, arch_addr_t dyn_addr,
350		       arch_addr_t *ret);
351
352/* This is called to obtain a list of directories to search when
353 * loading config files.  The callback sets *RETP to a pointer to the
354 * first element of a NULL-terminated array of directory names.  It's
355 * legitimate to set *RETP to NULL to indicate there are no
356 * directories.  The function returns 0 on success or a negative value
357 * on a failure.
358 *
359 * If PRIVATE is set, the list in *RETP should contain only user's own
360 * directories (presumably under HOME if there's any such thing on the
361 * given OS).  Otherwise only system directories should be reported.
362 *
363 * The directories don't have to exist.  Directories passed in -F are
364 * handled separately by the caller and this callback shouldn't
365 * concern itself with it.  */
366int os_get_config_dirs(int private, const char ***retp);
367
368/* This is called to obtain list of legacy config files to import, if
369 * any.  A reference to initialized vector of char* is passed in.
370 *
371 * This returns 0 on success, in which case strings from *RETP (if
372 * any) are interpreted as files names.  These files belong to the
373 * caller and will eventually be freed.
374 *
375 * Returns a negative value for failure, in which case *RETP contents
376 * are not consulted in any way.  */
377int os_get_ltrace_conf_filenames(struct vect *retp);
378
379/* If arch.h defines ARCH_HAVE_FETCH_ARG, the following callbacks have
380 * to be implemented: arch_fetch_arg_init, arch_fetch_arg_clone,
381 * arch_fetch_arg_done, arch_fetch_arg_next and arch_fetch_retval.
382 * See fetch.h for details.  */
383
384/* If arch.h defines both ARCH_HAVE_FETCH_ARG and
385 * ARCH_HAVE_FETCH_PACK, the following callbacks have to be
386 * implemented: arch_fetch_param_pack_start,
387 * arch_fetch_param_pack_end.  See fetch.h for details.  */
388
389enum sw_singlestep_status {
390	SWS_FAIL,
391	SWS_OK,
392	SWS_HW,
393};
394struct sw_singlestep_data;
395
396/* The following callback has to be implemented in backend if arch.h
397 * defines ARCH_HAVE_SW_SINGLESTEP.
398 *
399 * This is called before the OS backend requests hardware singlestep.
400 * arch_sw_singlestep should consider whether a singlestep needs to be
401 * done in software.  If not, it returns SWS_HW.  Otherwise it needs
402 * to add one or several breakpoints by calling ADD_CB.  When it is
403 * done, it continues the process as appropriate, and answers either
404 * SWS_OK, or SWS_FAIL, depending on how it went.
405 *
406 * PROC is the process that should perform the singlestep, BP the
407 * breakpoint that we are singlestepping over.  ADD_CB is a callback
408 * to request adding breakpoints that should trap the process after
409 * it's continued.  The arguments to ADD_CB are the address where the
410 * breakpoint should be added, and DATA.  ADD_CB returns 0 on success
411 * or a negative value on failure.  It is expected that
412 * arch_sw_singlestep returns SWS_FAIL if ADD_CB returns error.  */
413enum sw_singlestep_status arch_sw_singlestep(struct process *proc,
414					     struct breakpoint *bp,
415					     int (*add_cb)(arch_addr_t addr,
416						   struct sw_singlestep_data *),
417					     struct sw_singlestep_data *data);
418
419#endif /* BACKEND_H */
420