108 lines
3.6 KiB
C
108 lines
3.6 KiB
C
/*
|
|
* 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_ */
|