Home | History | Annotate | Download | only in ltrace
      1 /*
      2  * This file is part of ltrace.
      3  * Copyright (C) 2012,2013 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 #ifndef _OPTIONS_H_
     25 #define _OPTIONS_H_
     26 
     27 #include <stdio.h>
     28 #include <sys/types.h>
     29 #include <sys/time.h>
     30 
     31 #include "forward.h"
     32 #include "vect.h"
     33 
     34 struct options_t {
     35 	int align;      /* -a: default alignment column for results */
     36 	char * user;    /* -u: username to run command as */
     37 	int syscalls;   /* -S: display system calls */
     38 	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 */
     43 	size_t arraylen;   /* default maximum # of array elements printed */
     44 	size_t strlen;     /* default maximum # of bytes printed in strings */
     45 	int follow;     /* trace child processes */
     46 	int no_signals; /* don't print signals */
     47 #if defined(HAVE_UNWINDER)
     48 	int bt_depth;	 /* how may levels of stack frames to show */
     49 #endif /* defined(HAVE_UNWINDER) */
     50 	struct filter *plt_filter;
     51 	struct filter *static_filter;
     52 
     53 	/* A filter matching library names of libraries, whose
     54 	 * exported symbols we wish to trace.  */
     55 	struct filter *export_filter;
     56 
     57 	int hide_caller; /* Whether caller library should be hidden.  */
     58 };
     59 extern struct options_t options;
     60 
     61 extern int opt_i;		/* instruction pointer */
     62 extern int opt_r;		/* print relative timestamp */
     63 extern int opt_t;		/* print absolute timestamp */
     64 extern int opt_T;		/* show the time spent inside each call */
     65 
     66 struct opt_p_t {
     67 	pid_t pid;
     68 	struct opt_p_t *next;
     69 };
     70 
     71 extern struct opt_p_t *opt_p;	/* attach to process with a given pid */
     72 
     73 enum opt_F_kind {
     74 	OPT_F_UNKNOWN = 0,
     75 	OPT_F_BROKEN,
     76 	OPT_F_FILE,
     77 	OPT_F_DIR,
     78 };
     79 
     80 struct 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.  */
     90 enum 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).  */
     94 void 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.  */
    101 int parse_colon_separated_list(const char *paths, struct vect *vec);
    102 
    103 /* Vector of struct opt_F_t.  */
    104 extern struct vect opt_F;
    105 
    106 extern char **process_options(int argc, char **argv);
    107 
    108 #endif /* _OPTIONS_H_ */
    109