]> granicus.if.org Git - strace/commitdiff
unwind: prepare configure subsystem for alternative unwinders
authorDmitry V. Levin <ldv@altlinux.org>
Sat, 7 Apr 2018 23:35:45 +0000 (23:35 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 8 Apr 2018 22:01:12 +0000 (22:01 +0000)
Introduce --enable-stacktrace configure option to control whether
-k option support is compiled in, --with-libunwind option remains
available to control whether libunwind can be used as an unwinder.

* m4/st_demangle.m4: New file.
* m4/st_libunwind.m4: Likewise.
* m4/st_stacktrace.m4: Likewise.
* configure.ac: Replace all libunwind and libiberty checks
with a single st_STACKTRACE invocation.
* Makefile.am: Conditionalize checks for USE_LIBUNWIND and USE_DEMANGLE
on ENABLE_STACKTRACE.
[ENABLE_STACKTRACE] (strace_SOURCES): Append unwind.c and unwind.h.
* strace.1.in: Replace libunwind with an unwinder-agnostic wording.
* defs.h: Replace USE_LIBUNWIND with ENABLE_STACKTRACE.
* strace.c: Likewise.
(print_version): Print stack-trace instead of stack-unwind.
* syscall.c: Replace USE_LIBUNWIND with ENABLE_STACKTRACE.
* tests/Makefile.am: Likewise.  Replace LIBUNWIND_TESTS
with STACKTRACE_TESTS.
* tests/strace-V.test: Update expected output.

Makefile.am
configure.ac
defs.h
m4/st_demangle.m4 [new file with mode: 0644]
m4/st_libunwind.m4 [new file with mode: 0644]
m4/st_stacktrace.m4 [new file with mode: 0644]
strace.1.in
strace.c
syscall.c
tests/Makefile.am
tests/strace-V.test

index 6985d2824c16843a65aae2725b182995a64e1012..133e9c2def648db2a455df4411e33a035429b42b 100644 (file)
@@ -349,11 +349,14 @@ strace_SOURCES =  \
 
 strace_SOURCES_check = bpf_attr_check.c
 
+if ENABLE_STACKTRACE
+strace_SOURCES += unwind.c unwind.h
 if USE_LIBUNWIND
-strace_SOURCES += unwind.c unwind.h unwind-libunwind.c
+strace_SOURCES += unwind-libunwind.c
 strace_CPPFLAGS += $(libunwind_CPPFLAGS)
 strace_LDFLAGS += $(libunwind_LDFLAGS)
 strace_LDADD += $(libunwind_LIBS)
+endif
 if USE_DEMANGLE
 strace_CPPFLAGS += $(libiberty_CPPFLAGS)
 strace_LDFLAGS += $(libiberty_LDFLAGS)
index 6e53f98295ec5322a1b4597e86ac0af77fa34830..df375b0d3d47f0be1f3934fb98fbb2e2d298d41b 100644 (file)
@@ -844,148 +844,7 @@ AC_PATH_PROG([PERL], [perl])
 
 AC_CHECK_TOOL([READELF], [readelf])
 
-dnl stack trace with libunwind
-libunwind_CPPFLAGS=
-libunwind_LDFLAGS=
-libunwind_LIBS=
-AC_ARG_WITH([libunwind],
-           [AS_HELP_STRING([--with-libunwind],
-                           [use libunwind to implement stack tracing support])],
-           [case "${withval}" in
-            yes|no|check) ;;
-            *) with_libunwind=yes
-               libunwind_CPPFLAGS="-I${withval}/include"
-               libunwind_LDFLAGS="-L${withval}/lib" ;;
-            esac],
-           [with_libunwind=check]
-)
-
-use_libunwind=no
-AS_IF([test "x$with_libunwind" != xno],
-      [saved_CPPFLAGS="$CPPFLAGS"
-       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
-
-       AC_CHECK_HEADERS([libunwind-ptrace.h],
-        [saved_LDFLAGS="$LDFLAGS"
-         LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
-
-         AC_CHECK_LIB([unwind], [backtrace],
-           [libunwind_LIBS="-lunwind $libunwind_LIBS"
-
-            AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
-            saved_LIBS="$LIBS"
-            LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
-
-            AC_LINK_IFELSE(
-              [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
-                               [[return !unw_create_addr_space(0, 0)]])
-              ],
-              [AC_MSG_RESULT([yes])
-               libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
-
-               AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
-                 [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
-                  use_libunwind=yes
-                 ],
-                 [if test "x$with_libunwind" != xcheck; then
-                    AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
-                  fi
-                 ],
-                 [$libunwind_LIBS]
-               )
-              ],
-              [AC_MSG_RESULT([no])
-               if test "x$with_libunwind" != xcheck; then
-                 AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
-               fi
-              ]
-            )
-
-            LIBS="$saved_LIBS"
-           ],
-           [if test "x$with_libunwind" != xcheck; then
-              AC_MSG_FAILURE([failed to find libunwind])
-            fi
-           ],
-           [$libunwind_LIBS]
-         )
-
-         LDFLAGS="$saved_LDFLAGS"
-        ],
-        [if test "x$with_libunwind" != xcheck; then
-           AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
-         fi
-        ]
-       )
-
-       CPPFLAGS="$saved_CPPFLAGS"
-      ]
-)
-
-dnl enable libunwind
-AC_MSG_CHECKING([whether to enable stack tracing support using libunwind])
-if test "x$use_libunwind" = xyes; then
-       AC_DEFINE([USE_LIBUNWIND], 1, [Compile stack tracing functionality])
-       AC_SUBST(libunwind_LIBS)
-       AC_SUBST(libunwind_LDFLAGS)
-       AC_SUBST(libunwind_CPPFLAGS)
-fi
-AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_libunwind" = xyes])
-AC_MSG_RESULT([$use_libunwind])
-
-dnl demangling symbols in the stack trace
-libiberty_CPPFLAGS=
-libiberty_LDFLAGS=
-libiberty_LIBS=
-AC_ARG_WITH([libiberty],
-           [AS_HELP_STRING([--with-libiberty],
-                           [use libiberty to demangle symbols in stack trace])],
-           [case "${withval}" in
-            yes|no|check) ;;
-            *) with_libiberty=yes
-               libiberty_CPPFLAGS="-I${withval}/include"
-               libiberty_LDFLAGS="-L${withval}/lib" ;;
-            esac],
-           [with_libiberty=check]
-)
-
-use_libiberty=no
-AS_IF([test "x$use_libunwind" = xyes && test "x$with_libiberty" != xno],
-      [saved_CPPFLAGS="$CPPFLAGS"
-       CPPFLAGS="$CPPFLAGS $libiberty_CPPFLAGS"
-       AC_CHECK_HEADERS([demangle.h libiberty/demangle.h],
-        [saved_LDFLAGS="$LDFLAGS"
-         LDFLAGS="$LDFLAGS $libiberty_LDFLAGS"
-         AC_CHECK_LIB([iberty],[cplus_demangle],
-           [libiberty_LIBS="-liberty"
-            use_libiberty=yes
-           ],
-           [if test "x$with_libiberty" != xcheck; then
-              AC_MSG_FAILURE([failed to find cplus_demangle in libiberty])
-            fi
-           ]
-         )
-         LDFLAGS="$saved_LDFLAGS"
-        ],
-        [if test "x$with_libiberty" != xcheck; then
-             AC_MSG_FAILURE([failed to find demangle.h])
-         fi
-        ]
-       )
-       CPPFLAGS="$saved_CPPFLAGS"
-      ]
-)
-
-dnl enable libiberty
-AC_MSG_CHECKING([whether to enable demangling symbols in stack trace])
-if test "x$use_libiberty" = xyes; then
-       AC_DEFINE([USE_DEMANGLE], 1, [Do demangling symbols in stack trace])
-       AC_SUBST(libiberty_LIBS)
-       AC_SUBST(libiberty_LDFLAGS)
-       AC_SUBST(libiberty_CPPFLAGS)
-fi
-AM_CONDITIONAL([USE_DEMANGLE], [test "x$use_libiberty" = xyes])
-AC_MSG_RESULT([$use_libiberty])
+st_STACKTRACE
 
 if test "$arch" = mips && test "$no_create" != yes; then
        mkdir -p linux/mips
diff --git a/defs.h b/defs.h
index 62aa11c912ec359201b9dd01f34c17008eee25b3..be809b0c48cb29ca360236750bec9188213c37e2 100644 (file)
--- a/defs.h
+++ b/defs.h
@@ -222,7 +222,7 @@ struct tcb {
        unsigned int mmap_cache_size;
        unsigned int mmap_cache_generation;
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
        void *unwind_ctx;
        struct unwind_queue_t *unwind_queue;
 #endif
@@ -377,7 +377,7 @@ extern struct path_set {
 #define tracing_paths (global_path_set.num_selected != 0)
 extern unsigned xflag;
 extern unsigned followfork;
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 /* if this is true do the stack trace for every system call */
 extern bool stack_trace_enabled;
 #endif
@@ -732,7 +732,7 @@ extern void ts_sub(struct timespec *, const struct timespec *, const struct time
 extern void ts_mul(struct timespec *, const struct timespec *, int);
 extern void ts_div(struct timespec *, const struct timespec *, int);
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 extern void unwind_init(void);
 extern void unwind_tcb_init(struct tcb *);
 extern void unwind_tcb_fin(struct tcb *);
diff --git a/m4/st_demangle.m4 b/m4/st_demangle.m4
new file mode 100644 (file)
index 0000000..cf3d2d1
--- /dev/null
@@ -0,0 +1,82 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2017-2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+AC_DEFUN([st_DEMANGLE], [dnl
+
+AC_ARG_WITH([libiberty],
+           [AS_HELP_STRING([--with-libiberty],
+                           [use libiberty to demangle symbols in stack trace])],
+           [case "${withval}" in
+            yes|no|check) ;;
+            *) with_libiberty=yes
+               libiberty_CPPFLAGS="-I${withval}/include"
+               libiberty_LDFLAGS="-L${withval}/lib" ;;
+            esac],
+           [with_libiberty=check]
+)
+
+libiberty_CPPFLAGS=
+libiberty_LDFLAGS=
+libiberty_LIBS=
+use_libiberty=no
+
+AS_IF([test "x$with_libiberty" != xno],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $libiberty_CPPFLAGS"
+       AC_CHECK_HEADERS([demangle.h libiberty/demangle.h],
+        [saved_LDFLAGS="$LDFLAGS"
+         LDFLAGS="$LDFLAGS $libiberty_LDFLAGS"
+         AC_CHECK_LIB([iberty],[cplus_demangle],
+           [libiberty_LIBS="-liberty"
+            use_libiberty=yes
+           ],
+           [if test "x$with_libiberty" != xcheck; then
+              AC_MSG_FAILURE([failed to find cplus_demangle in libiberty])
+            fi
+           ]
+         )
+         LDFLAGS="$saved_LDFLAGS"
+        ],
+        [if test "x$with_libiberty" != xcheck; then
+             AC_MSG_FAILURE([failed to find demangle.h])
+         fi
+        ]
+       )
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+AC_MSG_CHECKING([whether to enable symbols demangling in stack trace])
+if test "x$use_libiberty" = xyes; then
+       AC_DEFINE([USE_DEMANGLE], 1, [Do symbols demangling in stack trace])
+       AC_SUBST(libiberty_LIBS)
+       AC_SUBST(libiberty_LDFLAGS)
+       AC_SUBST(libiberty_CPPFLAGS)
+fi
+AC_MSG_RESULT([$use_libiberty])
+
+])
diff --git a/m4/st_libunwind.m4 b/m4/st_libunwind.m4
new file mode 100644 (file)
index 0000000..f68f9cb
--- /dev/null
@@ -0,0 +1,119 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2013-2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+AC_DEFUN([st_ARG_LIBUNWIND], [dnl
+
+AC_ARG_WITH([libunwind],
+           [AS_HELP_STRING([--with-libunwind],
+                           [use libunwind to implement stack tracing support])],
+           [case "${withval}" in
+            yes|no|check) ;;
+            *) with_libunwind=yes
+               libunwind_CPPFLAGS="-I${withval}/include"
+               libunwind_LDFLAGS="-L${withval}/lib" ;;
+            esac],
+           [with_libunwind=check]
+)
+
+])
+
+AC_DEFUN([st_LIBUNWIND], [dnl
+
+libunwind_CPPFLAGS=
+libunwind_LDFLAGS=
+libunwind_LIBS=
+
+AS_IF([test "x$with_libunwind" != xno && test "x$use_unwinder" = x],
+      [saved_CPPFLAGS="$CPPFLAGS"
+       CPPFLAGS="$CPPFLAGS $libunwind_CPPFLAGS"
+
+       AC_CHECK_HEADERS([libunwind-ptrace.h],
+        [saved_LDFLAGS="$LDFLAGS"
+         LDFLAGS="$LDFLAGS $libunwind_LDFLAGS"
+
+         AC_CHECK_LIB([unwind], [backtrace],
+           [libunwind_LIBS="-lunwind $libunwind_LIBS"
+
+            AC_MSG_CHECKING([for unw_create_addr_space in libunwind-generic])
+            saved_LIBS="$LIBS"
+            LIBS="-lunwind-generic $libunwind_LIBS $LIBS"
+
+            AC_LINK_IFELSE(
+              [AC_LANG_PROGRAM([[#include <libunwind-ptrace.h>]],
+                               [[return !unw_create_addr_space(0, 0)]])
+              ],
+              [AC_MSG_RESULT([yes])
+               libunwind_LIBS="-lunwind-generic $libunwind_LIBS"
+
+               AC_CHECK_LIB([unwind-ptrace], [_UPT_create],
+                 [libunwind_LIBS="-lunwind-ptrace $libunwind_LIBS"
+                  use_unwinder=libunwind
+                 ],
+                 [if test "x$with_libunwind" != xcheck; then
+                    AC_MSG_FAILURE([failed to find _UPT_create in libunwind-ptrace])
+                  fi
+                 ],
+                 [$libunwind_LIBS]
+               )
+              ],
+              [AC_MSG_RESULT([no])
+               if test "x$with_libunwind" != xcheck; then
+                 AC_MSG_FAILURE([failed to find unw_create_addr_space in libunwind-generic])
+               fi
+              ]
+            )
+
+            LIBS="$saved_LIBS"
+           ],
+           [if test "x$with_libunwind" != xcheck; then
+              AC_MSG_FAILURE([failed to find libunwind])
+            fi
+           ],
+           [$libunwind_LIBS]
+         )
+
+         LDFLAGS="$saved_LDFLAGS"
+        ],
+        [if test "x$with_libunwind" != xcheck; then
+           AC_MSG_FAILURE([failed to find libunwind-ptrace.h])
+         fi
+        ]
+       )
+
+       CPPFLAGS="$saved_CPPFLAGS"
+      ]
+)
+
+if test "x$use_unwinder" = xlibunwind; then
+       AC_DEFINE([USE_LIBUNWIND], 1,
+                 [Whether to use libunwind for stack tracing])
+       AC_SUBST(libunwind_LIBS)
+       AC_SUBST(libunwind_LDFLAGS)
+       AC_SUBST(libunwind_CPPFLAGS)
+fi
+
+])
diff --git a/m4/st_stacktrace.m4 b/m4/st_stacktrace.m4
new file mode 100644 (file)
index 0000000..a44d98f
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/m4
+#
+# Copyright (c) 2018 The strace developers.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+#    derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+AC_DEFUN([st_STACKTRACE], [dnl
+
+AC_ARG_ENABLE([stacktrace],
+       [AS_HELP_STRING([--enable-stacktrace=yes|no|check],
+               [whether to enable stack tracing support, default is check])],
+       [case "$enableval" in
+               yes|no|check) enable_stacktrace="$enableval" ;;
+               *) AC_MSG_ERROR([bad value $enableval for enable-stacktrace option.
+                                Valid options are: yes, no, check.])
+               ;;
+        esac],
+       [enable_stacktrace=check])
+
+use_unwinder=
+dnl Whether to enable stack tracing support?
+
+AS_IF([test x"$enable_stacktrace" != xno],
+      [st_ARG_LIBUNWIND
+       AS_IF([test "x$use_unwinder" = x], [st_LIBUNWIND])
+       AS_IF([test x"$enable_stacktrace$use_unwinder" = xyes],
+            [AC_MSG_ERROR([stack tracing support requires an unwinder])])])
+
+AC_MSG_CHECKING([whether to enable stack tracing support])
+AM_CONDITIONAL([ENABLE_STACKTRACE], [test "x$use_unwinder" != x])
+AM_CONDITIONAL([USE_LIBUNWIND], [test "x$use_unwinder" = xlibunwind])
+
+use_libiberty=
+AS_IF([test "x$use_unwinder" != x],
+      [AC_DEFINE([ENABLE_STACKTRACE], [1],
+                         [Define to enable stack tracing support])
+       AC_DEFINE_UNQUOTED([USE_UNWINDER], ["$use_unwinder"],
+                         [The unwinder to use for stack tracing support])
+       AC_MSG_RESULT([yes, using $use_unwinder])
+       dnl As stack tracing support is enabled, check for a demangler.
+       st_DEMANGLE],
+      [AC_MSG_RESULT([no])])
+
+AM_CONDITIONAL([USE_DEMANGLE], [test "x$use_libiberty" = xyes])
+
+])
index 46a55e5e6511e7137ea9c8d4efef0d2828261298..53b94103281640776989ddfbc51f359ba1d2f1c6 100644 (file)
@@ -257,7 +257,7 @@ Print the instruction pointer at the time of the system call.
 Print the execution stack trace of the traced processes after each system call (experimental).
 This option is available only if
 .B strace
-is built with libunwind.
+is built using \-\-enable\-stacktrace configure option.
 .TP
 .BI "\-o " filename
 Write the trace output to the file
index a76502af989b212cf926c0941ae5b22741a7c8d2..7d06f8a5c652510f11d74803b3ab3e3e9c9feeb0 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -65,7 +65,7 @@ extern char **environ;
 extern int optind;
 extern char *optarg;
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 /* if this is true do the stack trace for every system call */
 bool stack_trace_enabled;
 #endif
@@ -203,12 +203,12 @@ static void
 print_version(void)
 {
        static const char features[] =
-#ifdef USE_LIBUNWIND
-               " stack-unwind"
-#endif /* USE_LIBUNWIND */
+#ifdef ENABLE_STACKTRACE
+               " stack-trace=" USE_UNWINDER
+#endif
 #ifdef USE_DEMANGLE
                " stack-demangle"
-#endif /* USE_DEMANGLE */
+#endif
 #if SUPPORTED_PERSONALITIES > 1
 # if defined HAVE_M32_MPERS
                " m32-mpers"
@@ -248,7 +248,7 @@ Output format:\n\
   -a column      alignment COLUMN for printing syscall results (default %d)\n\
   -i             print instruction pointer at time of syscall\n\
 "
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
 "\
   -k             obtain stack trace between each syscall (experimental)\n\
 "
@@ -753,7 +753,7 @@ alloctcb(int pid)
                        tcp->currpers = current_personality;
 #endif
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
                        if (stack_trace_enabled)
                                unwind_tcb_init(tcp);
 #endif
@@ -810,7 +810,7 @@ droptcb(struct tcb *tcp)
 
        free_tcb_priv_data(tcp);
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
        if (stack_trace_enabled) {
                unwind_tcb_fin(tcp);
        }
@@ -1592,7 +1592,7 @@ init(int argc, char *argv[])
 #endif
        qualify("signal=all");
        while ((c = getopt(argc, argv, "+"
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
            "k"
 #endif
            "a:Ab:cCdDe:E:fFhiI:o:O:p:P:qrs:S:tTu:vVwxyz")) != EOF) {
@@ -1653,7 +1653,7 @@ init(int argc, char *argv[])
                        if (opt_intr <= 0)
                                error_opt_arg(c, optarg);
                        break;
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
                case 'k':
                        stack_trace_enabled = true;
                        break;
@@ -1754,7 +1754,7 @@ init(int argc, char *argv[])
        if (cflag == CFLAG_ONLY_STATS) {
                if (iflag)
                        error_msg("-%c has no effect with -c", 'i');
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
                if (stack_trace_enabled)
                        error_msg("-%c has no effect with -c", 'k');
 #endif
@@ -1774,7 +1774,7 @@ init(int argc, char *argv[])
 
        set_sighandler(SIGCHLD, SIG_DFL, &params_for_tracee.child_sa);
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
        if (stack_trace_enabled) {
                unsigned int tcbi;
 
index 13d81532c3e00e215b685d0cbef3173095337db8..10cf4b1accd2e39b957d626d96f5b14232d0e453 100644 (file)
--- a/syscall.c
+++ b/syscall.c
@@ -705,7 +705,7 @@ syscall_entering_trace(struct tcb *tcp, unsigned int *sig)
                return 0;
        }
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
        if (stack_trace_enabled) {
                if (tcp->s_ent->sys_flags & STACKTRACE_CAPTURE_ON_ENTER)
                        unwind_tcb_capture(tcp);
@@ -959,7 +959,7 @@ syscall_exiting_trace(struct tcb *tcp, struct timespec *ts, int res)
        dumpio(tcp);
        line_ended();
 
-#ifdef USE_LIBUNWIND
+#ifdef ENABLE_STACKTRACE
        if (stack_trace_enabled)
                unwind_tcb_print(tcp);
 #endif
index 1b520c250a25abd61725b0a99f4e4ff68c046295..ae334d48147b8fef82d444f534ebae6e63bb4e60 100644 (file)
@@ -202,13 +202,13 @@ stack_fcall_mangled_SOURCES = stack-fcall-mangled.c \
 
 include gen_tests.am
 
-if USE_LIBUNWIND
-LIBUNWIND_TESTS = strace-k.test
+if ENABLE_STACKTRACE
+STACKTRACE_TESTS = strace-k.test
 if USE_DEMANGLE
-LIBUNWIND_TESTS += strace-k-demangle.test
+STACKTRACE_TESTS += strace-k-demangle.test
 endif
 else
-LIBUNWIND_TESTS =
+STACKTRACE_TESTS =
 endif
 
 DECODER_TESTS = \
@@ -324,11 +324,11 @@ MISC_TESTS = \
        threads-execve.test \
        # end of MISC_TESTS
 
-TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(LIBUNWIND_TESTS)
+TESTS = $(GEN_TESTS) $(DECODER_TESTS) $(MISC_TESTS) $(STACKTRACE_TESTS)
 
 XFAIL_TESTS_ =
-XFAIL_TESTS_m32 = $(LIBUNWIND_TESTS)
-XFAIL_TESTS_mx32 = $(LIBUNWIND_TESTS)
+XFAIL_TESTS_m32 = $(STACKTRACE_TESTS)
+XFAIL_TESTS_mx32 = $(STACKTRACE_TESTS)
 XFAIL_TESTS_x86_64 = int_0x80.gen.test
 XFAIL_TESTS_x32 = int_0x80.gen.test
 XFAIL_TESTS = $(XFAIL_TESTS_$(MPERS_NAME)) $(XFAIL_TESTS_$(ARCH))
index eb05e86558b59ba0ebc2b40514dbb42459f9b974..a0274c282f938d906ea571b8b5b61b73cba84fe8 100755 (executable)
@@ -38,7 +38,8 @@ config_year=$(getstr COPYRIGHT_YEAR)
        exit 1
 }
 
-option_unwind=$(getoption USE_LIBUNWIND " stack-unwind")
+option_unwind=$(getoption ENABLE_STACKTRACE \
+               " stack-trace=$(getstr USE_UNWINDER)")
 option_demangle=$(getoption USE_DEMANGLE " stack-demangle")
 
 option_m32=