options.h revision 418584d25da07c5a9f7a61b74cfe713c1f8d7085
1/*
2 * This file is part of ltrace.
3 * Copyright (C) 2012 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
25#include <stdio.h>
26#include <sys/types.h>
27#include <sys/time.h>
28
29#include "forward.h"
30#include "vect.h"
31
32struct options_t {
33	int align;      /* -a: default alignment column for results */
34	char * user;    /* -u: username to run command as */
35	int syscalls;   /* -S: display system calls */
36	int demangle;   /* -C: demangle low-level names into user-level names */
37	int indent;     /* -n: indent trace output according to program flow */
38	FILE *output;   /* output to a specific file */
39	int summary;    /* count time, calls, and report a summary on program exit */
40	int debug;      /* debug */
41	size_t arraylen;   /* default maximum # of array elements printed */
42	size_t strlen;     /* default maximum # of bytes printed in strings */
43	int follow;     /* trace child processes */
44	int no_signals; /* don't print signals */
45#if defined(HAVE_LIBUNWIND)
46	int bt_depth;	 /* how may levels of stack frames to show */
47#endif /* defined(HAVE_LIBUNWIND) */
48	struct filter *plt_filter;
49	struct filter *static_filter;
50
51	/* A filter matching library names of libraries, whose
52	 * exported symbols we wish to trace.  */
53	struct filter *export_filter;
54
55	int hide_caller; /* Whether caller library should be hidden.  */
56};
57extern struct options_t options;
58
59extern int opt_i;		/* instruction pointer */
60extern int opt_r;		/* print relative timestamp */
61extern int opt_t;		/* print absolute timestamp */
62extern int opt_T;		/* show the time spent inside each call */
63
64struct opt_p_t {
65	pid_t pid;
66	struct opt_p_t *next;
67};
68
69extern struct opt_p_t *opt_p;	/* attach to process with a given pid */
70
71enum opt_F_kind {
72	OPT_F_UNKNOWN = 0,
73	OPT_F_BROKEN,
74	OPT_F_FILE,
75	OPT_F_DIR,
76};
77
78struct opt_F_t {
79	char *pathname;
80	int own_pathname : 1;
81	enum opt_F_kind kind : 2;
82};
83
84/* If entry->kind is OPT_F_UNKNOWN, figure out whether it should be
85 * OPT_F_FILE or OPT_F_DIR, cache the result, and return it.  Return
86 * OPT_F_BROKEN on failure.  Error message will have been printed in
87 * that case.  */
88enum opt_F_kind opt_F_get_kind(struct opt_F_t *entry);
89
90/* Destroy and release any memory associated with ENTRY (but don't
91 * free ENTRY itself).  */
92void opt_F_destroy(struct opt_F_t *entry);
93
94/* PATHS contains colon-separated list of values, akin to enviroment
95 * variables PATH, PYTHONPATH, and others.  No escaping is possible.
96 * The list is split and added to VEC, which shall be a vector
97 * initialized like VECT_INIT(VEC, struct opt_F_t); Returns 0 on
98 * success or a negative value on failure.  */
99int parse_colon_separated_list(const char *paths, struct vect *vec);
100
101/* Vector of struct opt_F_t.  */
102extern struct vect opt_F;
103
104struct opt_c_struct {
105	int count;
106	struct timeval tv;
107};
108extern struct dict *dict_opt_c;
109
110extern char **process_options(int argc, char **argv);
111