1/* 2 * This file is part of ltrace. 3 * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc. 4 * Copyright (C) 2009,2010 Joe Damato 5 * Copyright (C) 1998,2002,2008 Juan Cespedes 6 * Copyright (C) 2006 Ian Wienand 7 * Copyright (C) 2006 Steve Fink 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License as 11 * published by the Free Software Foundation; either version 2 of the 12 * License, or (at your option) any later version. 13 * 14 * This program is distributed in the hope that it will be useful, but 15 * WITHOUT ANY WARRANTY; without even the implied warranty of 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * General Public License for more details. 18 * 19 * You should have received a copy of the GNU General Public License 20 * along with this program; if not, write to the Free Software 21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 22 * 02110-1301 USA 23 */ 24#ifndef _OPTIONS_H_ 25#define _OPTIONS_H_ 26 27#include <stdio.h> 28#include <sys/types.h> 29#include <sys/time.h> 30 31#include "forward.h" 32#include "vect.h" 33 34struct options_t { 35 int align; /* -a: default alignment column for results */ 36 char * user; /* -u: username to run command as */ 37 int syscalls; /* -S: display system calls */ 38 int demangle; /* -C: demangle low-level names into user-level names */ 39 int indent; /* -n: indent trace output according to program flow */ 40 FILE *output; /* output to a specific file */ 41 int summary; /* count time, calls, and report a summary on program exit */ 42 int debug; /* debug */ 43 size_t arraylen; /* default maximum # of array elements printed */ 44 size_t strlen; /* default maximum # of bytes printed in strings */ 45 int follow; /* trace child processes */ 46 int no_signals; /* don't print signals */ 47#if defined(HAVE_UNWINDER) 48 int bt_depth; /* how may levels of stack frames to show */ 49#endif /* defined(HAVE_UNWINDER) */ 50 struct filter *plt_filter; 51 struct filter *static_filter; 52 53 /* A filter matching library names of libraries, whose 54 * exported symbols we wish to trace. */ 55 struct filter *export_filter; 56 57 int hide_caller; /* Whether caller library should be hidden. */ 58}; 59extern struct options_t options; 60 61extern int opt_i; /* instruction pointer */ 62extern int opt_r; /* print relative timestamp */ 63extern int opt_t; /* print absolute timestamp */ 64extern int opt_T; /* show the time spent inside each call */ 65 66struct opt_p_t { 67 pid_t pid; 68 struct opt_p_t *next; 69}; 70 71extern struct opt_p_t *opt_p; /* attach to process with a given pid */ 72 73enum opt_F_kind { 74 OPT_F_UNKNOWN = 0, 75 OPT_F_BROKEN, 76 OPT_F_FILE, 77 OPT_F_DIR, 78}; 79 80struct opt_F_t { 81 char *pathname; 82 int own_pathname : 1; 83 enum opt_F_kind kind : 2; 84}; 85 86/* If entry->kind is OPT_F_UNKNOWN, figure out whether it should be 87 * OPT_F_FILE or OPT_F_DIR, cache the result, and return it. Return 88 * OPT_F_BROKEN on failure. Error message will have been printed in 89 * that case. */ 90enum opt_F_kind opt_F_get_kind(struct opt_F_t *entry); 91 92/* Destroy and release any memory associated with ENTRY (but don't 93 * free ENTRY itself). */ 94void opt_F_destroy(struct opt_F_t *entry); 95 96/* PATHS contains colon-separated list of values, akin to enviroment 97 * variables PATH, PYTHONPATH, and others. No escaping is possible. 98 * The list is split and added to VEC, which shall be a vector 99 * initialized like VECT_INIT(VEC, struct opt_F_t); Returns 0 on 100 * success or a negative value on failure. */ 101int parse_colon_separated_list(const char *paths, struct vect *vec); 102 103/* Vector of struct opt_F_t. */ 104extern struct vect opt_F; 105 106extern char **process_options(int argc, char **argv); 107 108#endif /* _OPTIONS_H_ */ 109