|
|
71a0ac |
diff -rup a/testsuite/Makefile.am b/testsuite/Makefile.am
|
|
|
71a0ac |
--- a/testsuite/Makefile.am 2012-12-16 20:53:45.000000000 -0500
|
|
|
71a0ac |
+++ b/testsuite/Makefile.am 2019-06-28 16:59:19.935602953 -0400
|
|
|
71a0ac |
@@ -39,6 +39,7 @@ env.exp: Makefile
|
|
|
71a0ac |
rm -f env.exp
|
|
|
71a0ac |
echo set libelf_LD_LIBRARY_PATH '"$(libelf_LD_LIBRARY_PATH)"' >> $@
|
|
|
71a0ac |
echo set libunwind_LD_LIBRARY_PATH '"$(libunwind_LD_LIBRARY_PATH)"' >> $@
|
|
|
71a0ac |
+ echo set PREFIX '"$(prefix)"' >> $@
|
|
|
71a0ac |
|
|
|
71a0ac |
CLEANFILES = *.o *.so *.log *.sum *.ltrace site.bak setval.tmp site.exp env.exp
|
|
|
71a0ac |
|
|
|
71a0ac |
diff -rup a/testsuite/Makefile.in b/testsuite/Makefile.in
|
|
|
71a0ac |
--- a/testsuite/Makefile.in 2013-11-04 20:22:47.000000000 -0500
|
|
|
71a0ac |
+++ b/testsuite/Makefile.in 2019-06-28 16:59:12.075602806 -0400
|
|
|
71a0ac |
@@ -648,6 +648,7 @@ env.exp: Makefile
|
|
|
71a0ac |
rm -f env.exp
|
|
|
71a0ac |
echo set libelf_LD_LIBRARY_PATH '"$(libelf_LD_LIBRARY_PATH)"' >> $@
|
|
|
71a0ac |
echo set libunwind_LD_LIBRARY_PATH '"$(libunwind_LD_LIBRARY_PATH)"' >> $@
|
|
|
71a0ac |
+ echo set PREFIX '"$(prefix)"' >> $@
|
|
|
71a0ac |
|
|
|
71a0ac |
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
|
71a0ac |
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
|
71a0ac |
diff -rup a/testsuite/ltrace.main/system_call_params.exp b/testsuite/ltrace.main/system_call_params.exp
|
|
|
71a0ac |
--- a/testsuite/ltrace.main/system_call_params.exp 2019-06-28 16:44:07.542584754 -0400
|
|
|
71a0ac |
+++ b/testsuite/ltrace.main/system_call_params.exp 2019-06-28 17:00:35.811604355 -0400
|
|
|
71a0ac |
@@ -1,5 +1,5 @@
|
|
|
71a0ac |
# This file is part of ltrace.
|
|
|
71a0ac |
-# Copyright (C) 2013, 2014 Petr Machata, Red Hat Inc.
|
|
|
71a0ac |
+# Copyright (C) 2013, 2014, 2015 Petr Machata, Red Hat Inc.
|
|
|
71a0ac |
#
|
|
|
71a0ac |
# This program is free software; you can redistribute it and/or
|
|
|
71a0ac |
# modify it under the terms of the GNU General Public License as
|
|
|
71a0ac |
@@ -60,8 +60,35 @@ set conf [ltraceNamedSource "$dir/syscal
|
|
|
71a0ac |
# somelib.conf is passed, and syscalls.conf is not available, or
|
|
|
71a0ac |
# doesn't list readdir, that would be taken from somelib.conf with a
|
|
|
71a0ac |
# wrong prototype.
|
|
|
71a0ac |
+#
|
|
|
71a0ac |
+# This test relies on the fact that there is no global config file
|
|
|
71a0ac |
+# that would provide legitimate system call prototypes. But that
|
|
|
71a0ac |
+# doesn't have to be true, maybe ltrace is already installed on the
|
|
|
71a0ac |
+# system with the right prefix. So first compile a wrapper that we
|
|
|
71a0ac |
+# use to redirect fopen calls.
|
|
|
71a0ac |
+
|
|
|
71a0ac |
+set libfopen_so [ltraceCompile libfopen.so -ldl \
|
|
|
71a0ac |
+ [ltraceSource c [string map [list "@PREFIX@" "$PREFIX"] {
|
|
|
71a0ac |
+ #define _GNU_SOURCE
|
|
|
71a0ac |
+ #include <dlfcn.h>
|
|
|
71a0ac |
+ #include <stdio.h>
|
|
|
71a0ac |
+ #include <string.h>
|
|
|
71a0ac |
+
|
|
|
71a0ac |
+ FILE *
|
|
|
71a0ac |
+ fopen(const char *path, const char *mode)
|
|
|
71a0ac |
+ {
|
|
|
71a0ac |
+ #define PATH "@PREFIX@/share"
|
|
|
71a0ac |
+ if (strncmp(path, PATH, sizeof(PATH) - 1) == 0)
|
|
|
71a0ac |
+ path = "/dev/null";
|
|
|
71a0ac |
|
|
|
71a0ac |
+ return ((FILE *(*)(const char *, const char *))
|
|
|
71a0ac |
+ dlsym(RTLD_NEXT, "fopen")) (path, mode);
|
|
|
71a0ac |
+ }
|
|
|
71a0ac |
+}]]]
|
|
|
71a0ac |
+
|
|
|
71a0ac |
+setenv LD_PRELOAD $libfopen_so
|
|
|
71a0ac |
ltraceMatch1 [ltraceRun -L -S -F $conf -- $bin] {^open@SYS\("/some/path", 0\)} == 0
|
|
|
71a0ac |
+unsetenv LD_PRELOAD
|
|
|
71a0ac |
|
|
|
71a0ac |
# On the other hand, if -F somedir/ is given, we want to accept
|
|
|
71a0ac |
# syscalls.conf found there.
|