blob: 35c3d89efc97491c52c72a6825f2ef9a24eda27e [file] [log] [blame]
Petr Machatae99af272012-10-26 00:29:52 +02001/*
2 * This file is part of ltrace.
Petr Machata8a730f32013-11-21 20:43:51 +01003 * Copyright (C) 2012,2013 Petr Machata, Red Hat Inc.
Petr Machatae99af272012-10-26 00:29:52 +02004 * 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 */
Petr Machata395a4e32013-01-07 18:07:31 +010024#ifndef _OPTIONS_H_
25#define _OPTIONS_H_
Petr Machatae99af272012-10-26 00:29:52 +020026
Juan Cespedes5e01f651998-03-08 22:31:44 +010027#include <stdio.h>
Juan Cespedesa4850832002-03-03 02:37:50 +010028#include <sys/types.h>
Petr Machata8a9ad082012-12-04 17:44:55 +010029#include <sys/time.h>
Juan Cespedes5e01f651998-03-08 22:31:44 +010030
Petr Machata8bd9c192012-09-25 22:47:42 +020031#include "forward.h"
Petr Machata418584d2012-12-04 17:53:56 +010032#include "vect.h"
Petr Machata1e4fed22012-04-01 00:45:22 +020033
Juan Cespedesce377d52008-12-16 19:38:10 +010034struct options_t {
Joe Damato59e3fb12009-11-06 19:45:10 -080035 int align; /* -a: default alignment column for results */
36 char * user; /* -u: username to run command as */
37 int syscalls; /* -S: display system calls */
Joe Damato59e3fb12009-11-06 19:45:10 -080038 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 */
Zachary T Welchba6aca22010-12-08 18:55:09 -080043 size_t arraylen; /* default maximum # of array elements printed */
44 size_t strlen; /* default maximum # of bytes printed in strings */
Joe Damato59e3fb12009-11-06 19:45:10 -080045 int follow; /* trace child processes */
Joe Damato59e3fb12009-11-06 19:45:10 -080046 int no_signals; /* don't print signals */
Mark Wielaarddfefa9f2014-01-07 21:00:44 +010047#if defined(HAVE_UNWINDER)
Joe Damatoab3b72c2010-10-31 00:21:53 -070048 int bt_depth; /* how may levels of stack frames to show */
Mark Wielaarddfefa9f2014-01-07 21:00:44 +010049#endif /* defined(HAVE_UNWINDER) */
Petr Machatab5f80ac2012-04-04 01:46:18 +020050 struct filter *plt_filter;
Petr Machatada3edbf2012-04-04 02:20:21 +020051 struct filter *static_filter;
Petr Machata51e74ac2012-09-27 23:43:25 +020052
53 /* A filter matching library names of libraries, whose
54 * exported symbols we wish to trace. */
55 struct filter *export_filter;
56
Petr Machata03673892012-04-03 13:51:09 +020057 int hide_caller; /* Whether caller library should be hidden. */
Juan Cespedesce377d52008-12-16 19:38:10 +010058};
59extern struct options_t options;
60
Ian Wienand2d45b1a2006-02-20 22:48:07 +010061extern int opt_i; /* instruction pointer */
Ian Wienand2d45b1a2006-02-20 22:48:07 +010062extern int opt_r; /* print relative timestamp */
63extern int opt_t; /* print absolute timestamp */
Ian Wienand2d45b1a2006-02-20 22:48:07 +010064extern int opt_T; /* show the time spent inside each call */
Juan Cespedes5e01f651998-03-08 22:31:44 +010065
66struct opt_p_t {
67 pid_t pid;
Ian Wienand2d45b1a2006-02-20 22:48:07 +010068 struct opt_p_t *next;
Juan Cespedes5e01f651998-03-08 22:31:44 +010069};
70
Ian Wienand2d45b1a2006-02-20 22:48:07 +010071extern struct opt_p_t *opt_p; /* attach to process with a given pid */
Juan Cespedes5e01f651998-03-08 22:31:44 +010072
Petr Machata418584d2012-12-04 17:53:56 +010073enum 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;
Steve Fink58c73a72006-07-17 23:18:35 +0200105
Ian Wienand2d45b1a2006-02-20 22:48:07 +0100106extern char **process_options(int argc, char **argv);
Petr Machata395a4e32013-01-07 18:07:31 +0100107
108#endif /* _OPTIONS_H_ */