| /* |
| * 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 <stdio.h> |
| #include <sys/types.h> |
| #include <sys/time.h> |
| |
| #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_UNWINDER) |
| int bt_depth; /* how may levels of stack frames to show */ |
| #endif /* defined(HAVE_UNWINDER) */ |
| 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_ */ |