/* * This file is part of ltrace. * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc. * Copyright (C) 2009,2010 Joe Damato * Copyright (C) 1998,2002,2008 Juan Cespedes * Copyright (C) 2006 Ian Wienand * Copyright (C) 2006 Steve Fink * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA */ #ifndef _OPTIONS_H_ #define _OPTIONS_H_ #include #include #include #include "forward.h" #include "vect.h" struct options_t { int align; /* -a: default alignment column for results */ char * user; /* -u: username to run command as */ int syscalls; /* -S: display system calls */ int demangle; /* -C: demangle low-level names into user-level names */ int indent; /* -n: indent trace output according to program flow */ FILE *output; /* output to a specific file */ int summary; /* count time, calls, and report a summary on program exit */ int debug; /* debug */ size_t arraylen; /* default maximum # of array elements printed */ size_t strlen; /* default maximum # of bytes printed in strings */ int follow; /* trace child processes */ int no_signals; /* don't print signals */ #if defined(HAVE_LIBUNWIND) int bt_depth; /* how may levels of stack frames to show */ #endif /* defined(HAVE_LIBUNWIND) */ struct filter *plt_filter; struct filter *static_filter; /* A filter matching library names of libraries, whose * exported symbols we wish to trace. */ struct filter *export_filter; int hide_caller; /* Whether caller library should be hidden. */ }; extern struct options_t options; extern int opt_i; /* instruction pointer */ extern int opt_r; /* print relative timestamp */ extern int opt_t; /* print absolute timestamp */ extern int opt_T; /* show the time spent inside each call */ struct opt_p_t { pid_t pid; struct opt_p_t *next; }; extern struct opt_p_t *opt_p; /* attach to process with a given pid */ enum opt_F_kind { OPT_F_UNKNOWN = 0, OPT_F_BROKEN, OPT_F_FILE, OPT_F_DIR, }; struct opt_F_t { char *pathname; int own_pathname : 1; enum opt_F_kind kind : 2; }; /* If entry->kind is OPT_F_UNKNOWN, figure out whether it should be * OPT_F_FILE or OPT_F_DIR, cache the result, and return it. Return * OPT_F_BROKEN on failure. Error message will have been printed in * that case. */ enum opt_F_kind opt_F_get_kind(struct opt_F_t *entry); /* Destroy and release any memory associated with ENTRY (but don't * free ENTRY itself). */ void opt_F_destroy(struct opt_F_t *entry); /* PATHS contains colon-separated list of values, akin to enviroment * variables PATH, PYTHONPATH, and others. No escaping is possible. * The list is split and added to VEC, which shall be a vector * initialized like VECT_INIT(VEC, struct opt_F_t); Returns 0 on * success or a negative value on failure. */ int parse_colon_separated_list(const char *paths, struct vect *vec); /* Vector of struct opt_F_t. */ extern struct vect opt_F; extern char **process_options(int argc, char **argv); #endif /* _OPTIONS_H_ */