Add libtool to .gitignore
[ust.git] / usttrace
index 15336f638d91ab7133842d149456667b3033d162..94404dde6d56e0bba1ef9aee9f299d328ba9f361 100755 (executable)
--- a/usttrace
+++ b/usttrace
@@ -7,12 +7,28 @@ function error() {
        echo "$0: error: $1" 2>/dev/stderr
 }
 
+function sighandler() {
+       echo "Caught Ctrl-C"
+       if [ -z "$USTDPID" ]; then
+               USTDPID="$(<$pidfilepath)"
+       fi
+       # Tell the daemon to die
+       kill -SIGTERM "$USTDPID"
+
+       echo "Waiting for ustd to shutdown..."
+       wait "$USTDPID"
+
+       rm "$pidfilepath"
+
+       exit 0;
+}
+
 USTTRACE_DIR="$(dirname $0)"
 if [ -x "${USTTRACE_DIR}/ustd/ustd" ] ; then
     # Use the not installed libraries instead
     USTD="${USTTRACE_DIR}/ustd/ustd"
-    LIBINTERFORK_PATH="${USTTRACE_DIR}/libinterfork/.libs/libinterfork.so"
-    LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libmallocwrap/.libs/libmallocwrap.so"
+    LIBINTERFORK_PATH="${USTTRACE_DIR}/libustfork/.libs/libustfork.so"
+    LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libustinstr-malloc/.libs/libustinstr-malloc.so"
     LIBUST_PATH="${USTTRACE_DIR}/libust/.libs/libust.so"
 else
     # Use the libraries that the dynamic link finds
@@ -21,9 +37,9 @@ else
         error "cannot find an executable ustd; make sure its location is in the PATH"
         exit 1
     fi
-    LIBINTERFORK_PATH="libinterfork.so"
-    LIBMALLOCWRAP_PATH="libmallocwrap.so"
-    LIBUST_PATH="libust.so"
+    LIBINTERFORK_PATH="libustfork.so"
+    LIBMALLOCWRAP_PATH="libustinstr-malloc.so"
+    LIBUST_PATH="libust.so.0"
 fi
 
 BASE_TRACE_DIR="${HOME}/.usttraces"
@@ -38,15 +54,22 @@ function usage () {
        echo "    -m    Instrument malloc calls." 2>/dev/stderr
        echo "    -f    Also trace forked processes." 2>/dev/stderr
        echo "    -s    Use system-wide daemon instead of creating one for this session." 2>/dev/stderr
+       echo "    -S    Specify the subbuffer size." 2>/dev/stderr
+       echo "    -N    Specify the number of subbuffers." 2>/dev/stderr
+       echo "    -o    Output directory of the trace." 2>/dev/stderr
 }
 
-while getopts ":hlLmfs" options; do
+while getopts ":hlLmfsWS:N:o:" options; do
        case $options in
                l) arg_preload_libust=1;;
                L) arg_ld_std_ust=1;;
                m) arg_preload_malloc=1;;
                f) arg_preload_fork=1;;
                s) arg_syswide_daemon=1;;
+               W) where=1;;
+               S) export UST_SUBBUF_SIZE=$OPTARG;;
+               N) export UST_SUBBUF_NUM=$OPTARG;;
+               o) OUTPUT_DIR=$OPTARG;;
                h) usage;
                   exit 0;;
                \?) usage
@@ -57,6 +80,11 @@ while getopts ":hlLmfs" options; do
 done
 shift $(($OPTIND - 1))
 
+if [ -n "$where" ]; then
+       echo $BASE_TRACE_DIR/$(ls "$BASE_TRACE_DIR" | tail -n 1)
+       exit 0
+fi
+
 # Prepare vars
 CMD=$*
 
@@ -74,19 +102,31 @@ then
 fi
 
 # Create directory for trace output
-DATESTRING="$(hostname)-$(date +%Y%m%d%H%M%S)"
-OUTDIR="$BASE_TRACE_DIR/$DATESTRING"
-mkdir -p "$OUTDIR"
+if [ -n "$OUTPUT_DIR" ]; then
+       OUTDIR=$OUTPUT_DIR
+else
+       DATESTRING="$(hostname)-$(date +%Y%m%d%H%M%S%N)"
+       OUTDIR="$BASE_TRACE_DIR/$DATESTRING"
+fi
 
-# Choose socket path
-SOCKPATH="/tmp/ust-sock-$$"
+# Check if directory exist
+if [ ! -d "$OUTDIR" ]; then
+       mkdir -p $OUTDIR
+       if [ $? -eq 1 ]; then
+               exit 1
+       fi
+fi
+
+# Choose ustd socket path
+USTDSOCKPATH="/tmp/ustd-sock-$$"
 
 if [ "$arg_syswide_daemon" != "1" ];
 then
        pidfilepath="/tmp/usttrace-$USER-$(date +%Y%m%d%H%M%S%N)-ustd-pid"
+       trap "sighandler $pidfilepath" SIGINT
        mkfifo -m 0600 "$pidfilepath"
        # Start daemon
-       $USTD --pidfile "$pidfilepath" -s "$SOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 &
+       $USTD --pidfile "$pidfilepath" -s "$USTDSOCKPATH" -o "$OUTDIR" >"$OUTDIR/ustd.log" 2>&1 &
        # ustd sets up its server socket
        # ustd opens the pidfile, blocks because no one has opened it
        # we open pidfile
@@ -95,7 +135,7 @@ then
        # ustd closes pidfile
        # we unblock reading pidfile
        USTDPID="$(<$pidfilepath)"
-       export UST_DAEMON_SOCKET="$SOCKPATH"
+       export UST_DAEMON_SOCKET="$USTDSOCKPATH"
 fi
 
 # Establish the environment for the command
@@ -105,35 +145,56 @@ fi
 
     if [ "$arg_preload_libust" = "1" ];
     then
-       if [ -n "${LIBUST_PATH%libust.so}" ] ; then
-           export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}"
+       if [ -n "${LIBUST_PATH%libust.so}" ];
+       then
+               if [ -n "$LD_LIBRARY_PATH" ];
+               then
+                       export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}"
+               else
+                       export LD_LIBRARY_PATH="${LIBUST_PATH%libust.so}"
+               fi
+       fi
+       if [ -n "$LIBUST_PATH" ];
+       then
+               if [ -n "$LD_PRELOAD" ];
+               then
+                       export LD_PRELOAD="$LD_PRELOAD:$LIBUST_PATH"
+               else
+                       export LD_PRELOAD="$LIBUST_PATH"
+               fi
        fi
-       export LD_PRELOAD="$LD_PRELOAD:$LIBUST_PATH"
     fi
 
-    if [ "$arg_ld_std_ust" = "1" ];
+    if [ "$arg_ld_std_ust" = "1" ] && [ -n "${LIBUST_PATH%libust.so}" ];
     then
-       if [ -n "$${LIBUST_PATH%libust.so}" ] ; then
-           export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}"
+       if [ -n "$LD_LIBRARY_PATH" ];
+       then
+               export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:${LIBUST_PATH%libust.so}"
+       else
+               export LD_LIBRARY_PATH="${LIBUST_PATH%libust.so}"
        fi
     fi
 
-    if [ "$arg_preload_malloc" = "1" ];
+    if [ "$arg_preload_malloc" = "1" ] && [ -n "$LIBMALLOCWRAP_PATH" ];
     then
-       export LD_PRELOAD="$LD_PRELOAD:$LIBMALLOCWRAP_PATH"
+       if [ -n "$LD_PRELOAD" ];
+       then
+               export LD_PRELOAD="$LD_PRELOAD:$LIBMALLOCWRAP_PATH"
+       else
+               export LD_PRELOAD="$LIBMALLOCWRAP_PATH"
+       fi
     fi
 
-    if [ "$arg_preload_fork" = "1" ];
+    if [ "$arg_preload_fork" = "1" ] && [ -n "$LIBINTERFORK_PATH" ];
     then
-       export LD_PRELOAD="$LD_PRELOAD:$LIBINTERFORK_PATH"
+       if [ -n "$LD_PRELOAD" ];
+       then
+               export LD_PRELOAD="$LD_PRELOAD:$LIBINTERFORK_PATH"
+       else
+               export LD_PRELOAD="$LIBINTERFORK_PATH"
+       fi
     fi
 
-# Install a handler for SIGIO. This is the signal that will be sent by ustd to
-# the traced program to trigger the creation of its listener thread. However,
-# it is possible that the SIGIO will be sent after the shell fork, but before
-# the exec of the command. If this handler isn't there, bash might terminate
-# because of a unhandled signal.
-
 # Execute the command
     $CMD 2>&1
 ) | tee "$OUTDIR/app.log"
This page took 0.025156 seconds and 4 git commands to generate.