[Ltrace-devel] r35 - in ltrace/trunk: . testsuite testsuite/config
testsuite/lib testsuite/ltrace.main testsuite/ltrace.minor
testsuite/ltrace.torture
Paul Gilliam
pgilliam-guest at costa.debian.org
Mon Mar 13 23:12:03 UTC 2006
Author: pgilliam-guest
Date: 2006-03-13 23:12:01 +0000 (Mon, 13 Mar 2006)
New Revision: 35
Added:
ltrace/trunk/testsuite/
ltrace/trunk/testsuite/Makefile.in
ltrace/trunk/testsuite/README
ltrace/trunk/testsuite/config/
ltrace/trunk/testsuite/config/unix.exp
ltrace/trunk/testsuite/lib/
ltrace/trunk/testsuite/lib/compiler.c
ltrace/trunk/testsuite/lib/compiler.cc
ltrace/trunk/testsuite/lib/ltrace.exp
ltrace/trunk/testsuite/ltrace.main/
ltrace/trunk/testsuite/ltrace.main/Makefile.in
ltrace/trunk/testsuite/ltrace.main/main-internal-1.c
ltrace/trunk/testsuite/ltrace.main/main-internal.c
ltrace/trunk/testsuite/ltrace.main/main-internal.exp
ltrace/trunk/testsuite/ltrace.main/main-lib.c
ltrace/trunk/testsuite/ltrace.main/main.c
ltrace/trunk/testsuite/ltrace.main/main.exp
ltrace/trunk/testsuite/ltrace.main/signals.c
ltrace/trunk/testsuite/ltrace.main/signals.exp
ltrace/trunk/testsuite/ltrace.main/system_calls.c
ltrace/trunk/testsuite/ltrace.main/system_calls.exp
ltrace/trunk/testsuite/ltrace.minor/
ltrace/trunk/testsuite/ltrace.minor/Makefile.in
ltrace/trunk/testsuite/ltrace.minor/attach-process.c
ltrace/trunk/testsuite/ltrace.minor/attach-process.exp
ltrace/trunk/testsuite/ltrace.minor/count-record.c
ltrace/trunk/testsuite/ltrace.minor/count-record.exp
ltrace/trunk/testsuite/ltrace.minor/demangle-lib.cpp
ltrace/trunk/testsuite/ltrace.minor/demangle.cpp
ltrace/trunk/testsuite/ltrace.minor/demangle.exp
ltrace/trunk/testsuite/ltrace.minor/demangle.h
ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.c
ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.exp
ltrace/trunk/testsuite/ltrace.minor/time-record-T.exp
ltrace/trunk/testsuite/ltrace.minor/time-record-tt.exp
ltrace/trunk/testsuite/ltrace.minor/time-record-ttt.exp
ltrace/trunk/testsuite/ltrace.minor/time-record.c
ltrace/trunk/testsuite/ltrace.minor/trace-clone.c
ltrace/trunk/testsuite/ltrace.minor/trace-clone.exp
ltrace/trunk/testsuite/ltrace.minor/trace-fork.c
ltrace/trunk/testsuite/ltrace.minor/trace-fork.exp
ltrace/trunk/testsuite/ltrace.torture/
ltrace/trunk/testsuite/ltrace.torture/Makefile.in
ltrace/trunk/testsuite/ltrace.torture/signals.c
ltrace/trunk/testsuite/ltrace.torture/signals.exp
ltrace/trunk/testsuite/run-my-tests.sh
ltrace/trunk/testsuite/so_test1/
ltrace/trunk/testsuite/so_test2/
Modified:
ltrace/trunk/ChangeLog
ltrace/trunk/Makefile.in
ltrace/trunk/configure.ac
Log:
Add a dejagnu-based testsuite.
Modified: ltrace/trunk/ChangeLog
===================================================================
--- ltrace/trunk/ChangeLog 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/ChangeLog 2006-03-13 23:12:01 UTC (rev 35)
@@ -1,3 +1,56 @@
+2006-03=13 Paul Gilliam <pgilliam at us.ibm.com>
+
+ * Makefile.in: Add targets to support testsuite, including 'check'.
+ * confiure.ac: Add testsuite Makefile's to AC_OUTPUT.
+ * testsuite: Add dejagnu base testsuite.
+ * testsuite/config/: Add
+ * testsuite/config/unix.exp: Add
+ * testsuite/lib/: Add
+ * testsuite/lib/compiler.c: Add
+ * testsuite/lib/compiler.cc: Add
+ * testsuite/lib/ltrace.exp: Add
+ * testsuite/ltrace.main/: Add
+ * testsuite/ltrace.main/main.c: Add
+ * testsuite/ltrace.main/main.exp: Add
+ * testsuite/ltrace.main/main-internal-1.c: Add
+ * testsuite/ltrace.main/main-internal.c: Add
+ * testsuite/ltrace.main/main-internal.exp: Add
+ * testsuite/ltrace.main/main-lib.c: Add
+ * testsuite/ltrace.main/Makefile.in: Add
+ * testsuite/ltrace.main/signals.c: Add
+ * testsuite/ltrace.main/signals.exp: Add
+ * testsuite/ltrace.main/system_calls.c: Add
+ * testsuite/ltrace.main/system_calls.exp: Add
+ * testsuite/ltrace.minor/: Add
+ * testsuite/ltrace.minor/attach-process.c: Add
+ * testsuite/ltrace.minor/attach-process.exp: Add
+ * testsuite/ltrace.minor/count-record.c: Add
+ * testsuite/ltrace.minor/count-record.exp: Add
+ * testsuite/ltrace.minor/demangle.cpp: Add
+ * testsuite/ltrace.minor/demangle.exp: Add
+ * testsuite/ltrace.minor/demangle.h: Add
+ * testsuite/ltrace.minor/demangle-lib.cpp: Add
+ * testsuite/ltrace.minor/Makefile.in: Add
+ * testsuite/ltrace.minor/print-instruction-pointer.c: Add
+ * testsuite/ltrace.minor/print-instruction-pointer.exp: Add
+ * testsuite/ltrace.minor/time-record.c: Add
+ * testsuite/ltrace.minor/time-record-T.exp: Add
+ * testsuite/ltrace.minor/time-record-tt.exp: Add
+ * testsuite/ltrace.minor/time-record-ttt.exp: Add
+ * testsuite/ltrace.minor/trace-clone.c: Add
+ * testsuite/ltrace.minor/trace-clone.exp: Add
+ * testsuite/ltrace.minor/trace-fork.c: Add
+ * testsuite/ltrace.minor/trace-fork.exp: Add
+ * testsuite/ltrace.torture/: Add
+ * testsuite/ltrace.torture/Makefile.in: Add
+ * testsuite/ltrace.torture/signals.c: Add
+ * testsuite/ltrace.torture/signals.exp: Add
+ * testsuite/Makefile.in: Add
+ * testsuite/README: Add
+ * testsuite/run-my-tests.sh: Add
+ * testsuite/so_test1/: Add
+ * testsuite/so_test2/: Add
+
2006-03-13 Paul Gilliam <pgilliam at us.ibm.com>
* options.h: New structure for opt_x list elements, now with 'found'.
Modified: ltrace/trunk/Makefile.in
===================================================================
--- ltrace/trunk/Makefile.in 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/Makefile.in 2006-03-13 23:12:01 UTC (rev 35)
@@ -40,7 +40,11 @@
sysdeps/sysdep.o: dummy
$(MAKE) -C sysdeps/$(OS)
-clean:
+clean-deja:
+ $(RM) testrun.log testrun.sum
+ cd testsuite; make clean
+
+clean: clean-deja
$(MAKE) -C sysdeps/$(OS) clean
rm -f ltrace $(OBJ)
rm -f *~ *.bak a.out core KK
@@ -48,6 +52,7 @@
distclean: clean
rm -f autogen.sh config.cache config.status config.log config.h Makefile configure.scan
rm -rf autom4te.cache
+ cd testsuite; make distclean
realclean: distclean
rm configure config.h.in
@@ -75,6 +80,9 @@
$(INSTALL_FILE) COPYING README TODO BUGS ChangeLog $(DESTDIR)$(docdir)
$(INSTALL_FILE) ltrace.1 $(DESTDIR)$(mandir)/man1
+check:
+ cd testsuite; $(MAKE) check
+
dummy:
.PHONY: all clean distclean dist install dummy
Modified: ltrace/trunk/configure.ac
===================================================================
--- ltrace/trunk/configure.ac 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/configure.ac 2006-03-13 23:12:01 UTC (rev 35)
@@ -84,4 +84,7 @@
dnl of libelf and ltrace matches.
AC_SYS_LARGEFILE
fi
-AC_OUTPUT(Makefile)
+AC_OUTPUT(Makefile testsuite/Makefile \
+ testsuite/ltrace.main/Makefile testsuite/ltrace.minor/Makefile \
+ testsuite/ltrace.torture/Makefile )
+
Added: ltrace/trunk/testsuite/Makefile.in
===================================================================
--- ltrace/trunk/testsuite/Makefile.in 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/Makefile.in 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,72 @@
+# Copyright (C) 1992 - 2001 Free Software Foundation, Inc.
+#
+# 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+AUTOMAKE_OPTIONS = dejagnu
+EXPECT = expect
+RUNTEST = runtest
+CC = @CC@
+
+srcdir = .
+RUNTESTDEFAULTFLAGS = --srcdir $(srcdir)
+
+CLEANFILES = *.log *.sum site.bak setval.tmp site.exp
+
+SUBDIRS = ltrace.main ltrace.minor ltrace.torture
+
+#all: all-recursive
+
+.SUFFIXES:
+
+check-DEJAGNU: site.exp
+ EXPECT=$(EXPECT); export EXPECT;
+ @$(RUNTEST) $(RUNTESTDEFAULTFLAGS) $(RUNTESTFLAGS);
+
+site.exp:
+ @echo 'Making a new site.exp file...'
+ @echo '## these variables are automatically generated by make ##' >site.tmp
+ @echo '# Do not edit here. If you wish to override these values' >>site.tmp
+ @echo '# edit the last section' >>site.tmp
+ @echo 'set srcdir $(srcdir)' >>site.tmp
+ @echo "set objdir `pwd`" >>site.tmp
+ @echo '## All variables above are generated by configure. Do Not Edit ##' >>site.tmp
+ @test ! -f site.exp || \
+ sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
+ @-rm -f site.bak
+ @test ! -f site.exp || mv site.exp site.bak
+ @mv site.tmp site.exp
+
+check: check-DEJAGNU
+
+clean:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making clean in $$subdir"; \
+ (cd $$subdir && $(MAKE) clean ) done;
+
+ -rm -f $(CLEANFILES)
+
+distclean:
+ list='$(SUBDIRS)'; for subdir in $$list; do \
+ echo "Making clean in $$subdir"; \
+ (cd $$subdir && $(MAKE) distclean ) done;
+ -rm -f Makefile
+ -rm -f $(CLEANFILES)
+
+.PHONY: $(RECURSIVE_TARGETS) check clean distclean realclean
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Added: ltrace/trunk/testsuite/README
===================================================================
--- ltrace/trunk/testsuite/README 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/README 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,244 @@
+ README for ltrace testsuite
+ 18, October, 2005 by Yao Qi <qiyao at cn.ibm.com>
+
+This is the README file for ltrace testsuite.
+
+Quick Overview
+==============
+
+ This testsuite is based on the dejagnu framework, which is again
+dependent on Expect and Tcl. So all these three package (tcl, expect
+and dejagnu) should be installed on your system before running these
+tests.
+
+ After unpacking file ltrace-0.3.36.tar.gz:
+
+ tar -zxvfm ltrace-0.3.36.tar.gz
+
+ you'll find a directory named ltrace-0.3.36, which contains:
+
+ debian etc testsuite sysdeps
+
+you can first build this package, then run the testsuite in the
+following steps:
+
+ 1 cd ltrace-0.3.36
+
+ 2 Confiugre ltrace for 32-bit mode or 64-bit mode.
+ ./configure
+ OR CC='gcc -m64' ./configure
+
+ 3 Build ltace
+ make
+
+ 4 Run all the test in default mode.
+ make check
+
+ The default is to test the ltrace just built, using the default
+compiler options. You can control this by adding a symbol to 'make check':
+
+ To test the shipped ltrace tool (as opposed to the just built by "make")
+
+ --tool_exec=/usr/bin/ltrace
+
+ To change compiler switches for the target test cases
+
+ CFLAGS_FOR_TARGET=-m64
+
+ To change the target compiler (instead of shipped gcc)
+
+ CC_FOR_TARGET=/opt/gcc-4.0/bin/gcc
+
+
+ You can run all the tests in different mode respectively as follows,
+
+ (1) ./run-my-tests.sh -m32
+ OR make check
+
+ (test ltrace in build tree and compile test cases in 32-bit mode)
+
+ (2) ./run-my-tests.sh -m64
+ OR make check RUNTESTFLAGS="CFLAGS_FOR_TARGET=-m64"
+
+ (test ltrace in build tree and compile test cases in 64-bit mode)
+
+ (3) ./run-my-tests.sh -m32 /usr/bin/ltrace
+ OR make check RUNTESTFLAGS="--tool_exec=/usr/bin/ltrace"
+
+ (test shipped ltrace and compile test cases in 32-bit mode)
+
+ (4) ./run-my-tests.sh -m64 /usr/bin/ltrace
+ OR make check RUNTESTFLAGS="--tool_exec=/usr/bin/ltrace CFLAGS_FOR_TARGET=-m64"
+
+ (run shipped ltrace and compile test cases in 64-bit mode)
+
+ (5) cd testsuite; make test
+
+ (run ltrace in build tree and compile test cases same as ltrace itself)
+
+
+ (6) make check RUNTESTFLAGS="--tool_exec=/usr/bin/ltrace CFLAGS_FOR_TARGET=-m64 CC_FOR_TARGET=/opt/gcc-4.0/bin/gcc"
+
+ (run shipped ltrace and compile test cases in 64 bit mode by /opt/gcc-4.0/bin/gcc)
+Ltrace Testsuite
+================
+
+ This testsuite for ltrace is a DejaGNU based testsuite that can
+either be used to test your newly built ltrace, or for regression
+testing a ltrace with local modifications.
+
+ Running the testsuite requires the prior installation of DejaGNU.
+The directory ftp://sources.redhat.com/pub/dejagnu/ will contain a
+recent snapshot. Once DejaGNU is installed or built and add the
+location of runtest into $PATH, you can run the tests in one of the
+four ways it mentioned in Quick Overview. The DejaGNU framework could
+be built in following steps:
+
+ 1 Uppack these three packages.
+ tar zxvf dejagnu-1.4.4.tar.gz
+ tar zxvf tcl8.4.9-src.tar.gz
+ tar zxvf expect-5.43.0.tar.gz
+
+ 2 Build them and install.
+ cd dejagnu-1.4.4
+ ./configure
+ make
+ make install
+ cd ..
+
+ cd tcl8.4.9/unix
+ ./configure
+ make
+ make install
+ cd ..
+
+ cd expect-5.43
+ ./configure
+ make
+ make install
+ cd ..
+
+ See the DejaGNU documentation and dejagnu-1.4.4/README for further
+details.
+
+
+Componets in ltrace testsuite
+=============================
+
+ This testsuite include all the source code you need for ltrace
+test in a single directory, which is "ltrace-0.3.36/testsuite".
+This directory includes the following files and sub-directories:
+
+`config/unix.exp`
+ configuration file for dejagnu-based test.
+
+`lib/ltrace.exp`
+ some basic functions used in all the test cases.
+
+`ltrace.main/`
+ some basic tests for major fetures of ltrace.
+
+ (1) ltrace.main/main.exp does tests on tracing a function
+implemented in a shared library.
+
+ (2) ltrace.main/main-internal.exp does tests on tracing a function
+implemented in main executable.
+
+ (3) ltrace.main/signals.exp do test on tracing user-defined signals
+sent by program to itself.
+
+ (4) ltrace.main/system_calls.exp do test on tracing all the system
+calls in program.
+
+`ltrace.minor/`
+ some tests for minor fetures of ltrace.
+
+ (1) ltrace.minor/attach-process.exp do test on attching a process.
+
+ (2) ltrace.minor/count-record.exp do test on counting time and
+calls.
+
+ (3) ltrace.minor/demangle.exp do test on demangling the C++ symbols.
+
+ (4) ltrace.minor/time-record-T.exp do test on showing the time spent
+inside each call.
+
+ (5) ltrace.minor/time-record-tt.exp
+ (6) ltrace.minor/time-record-ttt.exp do test on printing absolute
+timestamps in different format.
+
+ (7) ltrace.minor/trace-clone.exp do test on following clone to child
+process.
+
+ (8) ltrace.minor/trace-fork.exp do test on following fork to child
+process.
+
+`ltrace.torture/`
+ some tests in extreme condations.
+
+ (1) ltrace.torture/signals.exp do test on tracing flooded signals
+send to program itself.
+
+Trouble shootings
+=================
+
+ (1) Running ltrace with -u option requires the superuser privilege.
+You must make sure you are root or have already got root's password.
+
+ (2) Check the *.ltrace files in each ltrace.* directories if there are
+some FAILs in the output. They are informative.
+
+ (3) Add --verbose option in RUNTESTFLAGS when 'make check' if you want
+to see more details of these tests.
+
+Test case extension
+===================
+
+ Current testsuite is quite basic. The framework of testsuite is
+extendable and scalealbe, so you can add new testcases into it easily.
+I will describe how to do that in different ways.
+
+ (1) Add new test case in an existed testcase directory.
+
+ It is simple. Just add a foo.exp script and a relevant foo.c if
+necessary. The dejagnu framework can run that script automatically when
+you run "make check". The executable and object file would be generate
+in the test, please add them in 'clean' entry in Makefile.in to ensure
+that they could be cleaned up automatically when run 'make clean'.
+
+ (2) Add new test case in a new testcase directory.
+
+ It is a little complicated. Fisrt create a new directory in
+testsuite/ with the same pattern as others, for example ltrace.bar,
+and then create a Makefile.in, an Expect script foo.exp, and relative
+foo.c if necessary. Then modify the configure.ac in ltrace-0.3.36/,
+and add "testsuite/ltrace.bar/Makefile" into macro AC_OUTPUT,
+testsuite/ltrace.bar/Makefile will be generated when you configure
+this package.
+
+ Adding Makefile.in in the new directroy is just to remove
+intermediate files and log files automatically later, such as foo.ltrace,
+object files and executables. For example, if you want to remove A.ltrace,
+B.ltrace, A and B at the time of cleanup, you can write Makefile.in
+like this:
+
+ clean:
+ -rm -f A B
+ -rm -f *.o
+ -rm -f *.ltrace
+ distclean: clean
+ -rm -f Makefile
+
+ At last add the new directory 'ltrace.bar' into the macro SUBDIRS
+in testsuite/Makefile.in.
+
+ Rerun the autoconf and ./configure in ./ltrace-0.3.36, the Makefile
+will be updated.
+
+
+
+^L
+(this is for editing this file with GNU emacs)
+Local Variables:
+mode: text
+End:
Added: ltrace/trunk/testsuite/config/unix.exp
===================================================================
--- ltrace/trunk/testsuite/config/unix.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/config/unix.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1 @@
+load_lib ltrace.exp
Added: ltrace/trunk/testsuite/lib/compiler.c
===================================================================
--- ltrace/trunk/testsuite/lib/compiler.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/lib/compiler.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,58 @@
+/* This test file is part of GDB, the GNU debugger.
+
+ Copyright 1995, 1997, 1999, 2003, 2004 Free Software Foundation, Inc.
+
+ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ */
+
+/* Sometimes the behavior of a test depends upon the compiler used to
+ compile the test program. A test script can call get_compiler_info
+ to figure out the compiler version and test_compiler_info to test it.
+
+ get_compiler_info runs the preprocessor on this file and then eval's
+ the result. This sets various symbols for use by test_compiler_info.
+
+ TODO: make compiler_info a local variable for get_compiler_info and
+ test_compiler_info.
+
+ TODO: all clients should use test_compiler_info and should not
+ use gcc_compiled, hp_cc_compiler, or hp_aCC_compiler.
+
+ */
+
+/* Note the semicolon at the end of this line. Older versions of
+ hp c++ have a bug in string preprocessing: if the last token on a
+ line is a string, then the preprocessor concatenates the next line
+ onto the current line and eats the newline! That messes up TCL of
+ course. That happens with HP aC++ A.03.13, but it no longer happens
+ with HP aC++ A.03.45. */
+
+set compiler_info "unknown" ;
+
+#if defined (__GNUC__)
+#if defined (__GNUC_PATCHLEVEL__)
+/* Only GCC versions >= 3.0 define the __GNUC_PATCHLEVEL__ macro. */
+set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__} -]
+#else
+set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ "unknown"} -]
+#endif
+#endif
+
+#if defined (__xlc__)
+/* IBM'x xlc compiler. NOTE: __xlc__ expands to a double quoted string of four
+ numbers seperated by '.'s: currently "7.0.0.0" */
+set need_a_set [regsub -all {\.} [join {xlc __xlc__} -] - compiler_info]
+#endif
Added: ltrace/trunk/testsuite/lib/compiler.cc
===================================================================
--- ltrace/trunk/testsuite/lib/compiler.cc 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/lib/compiler.cc 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,45 @@
+/* This test file is part of GDB, the GNU debugger.
+
+ Copyright 1995, 1999, 2003, 2004 Free Software Foundation, Inc.
+
+ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ */
+
+/* This file is exactly like compiler.c. I could just use compiler.c if
+ I could be sure that every C++ compiler accepted extensions of ".c". */
+
+/* Note the semicolon at the end of this line. Older versions of
+ hp c++ have a bug in string preprocessing: if the last token on a
+ line is a string, then the preprocessor concatenates the next line
+ onto the current line and eats the newline! That messes up TCL of
+ course. That happens with HP aC++ A.03.13, but it no longer happens
+ with HP aC++ A.03.45. */
+
+set compiler_info "unknown" ;
+
+#if defined (__GNUC__)
+#if defined (__GNUC_PATCHLEVEL__)
+/* Only GCC versions >= 3.0 define the __GNUC_PATCHLEVEL__ macro. */
+set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__} -]
+#else
+set compiler_info [join {gcc __GNUC__ __GNUC_MINOR__ "unknown"} -]
+#endif
+#endif
+
+#if defined (__xlC__)
+/* xlC++ version like 800 */
+set compiler_info [join {xlc++ __IBMCPP__} -]
+#endif
Added: ltrace/trunk/testsuite/lib/ltrace.exp
===================================================================
--- ltrace/trunk/testsuite/lib/ltrace.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/lib/ltrace.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,277 @@
+# This file was written by Yao Qi. (qiyao at cn.ibm.com)
+
+# Generic ltrace test subroutines that should work for any target. If these
+# need to be modified for any target, it can be done with a variable
+# or by passing arguments.
+
+
+global LTRACE
+if [info exists TOOL_EXECUTABLE] {
+ set LTRACE $TOOL_EXECUTABLE
+} else {
+ set LTRACE $objdir/../ltrace
+}
+
+global LTRACE_OPTIONS
+set LTRACE_OPTIONS "";
+
+# ltrace_compile SOURCE DEST TYPE OPTIONS
+#
+# Compile PUT(program under test) by native compiler. ltrace_compile runs
+# the right compiler, and TCL captures the output, and I evaluate the output.
+#
+# SOURCE is the name of program under test, with full directory.
+# DEST is the name of output of compilation, with full directory.
+# TYPE is an enum-like variable to affect the format or result of compiler
+# output. Values:
+# executable if output is an executable.
+# object if output is an object.
+# OPTIONS is option to compiler in this compilation.
+proc ltrace_compile {source dest type options} {
+ global LTRACE_TESTCASE_OPTIONS;
+
+ # Add platform-specific options if a shared library was specified using
+ # "shlib=librarypath" in OPTIONS.
+ set new_options ""
+ set shlib_found 0
+
+ foreach opt $options {
+ if [regexp {^shlib=(.*)} $opt dummy_var shlib_name] {
+ if [test_compiler_info "xlc*"] {
+ # IBM xlc compiler doesn't accept shared library named other
+ # than .so: use "-Wl," to bypass this
+ lappend source "-Wl,$shlib_name"
+ } else {
+ lappend source $shlib_name
+ }
+
+ if {$shlib_found == 0} {
+ set shlib_found 1
+
+ if { ([test_compiler_info "gcc-*"]&& ([istarget "powerpc*-*-aix*"]|| [istarget "rs6000*-*-aix*"] ))} {
+ lappend options "additional_flags=-L${objdir}/${subdir}"
+ } elseif { [istarget "mips-sgi-irix*"] } {
+ lappend options "additional_flags=-rpath ${objdir}/${subdir}"
+ }
+ }
+
+ } else {
+ lappend new_options $opt
+ }
+ }
+ #end of for loop
+ set options $new_options
+ # dump some information for debug purpose.
+ verbose "options are $options"
+ verbose "source is $source $dest $type $options"
+
+ set result [target_compile $source $dest $type $options];
+ verbose "result is $result"
+ regsub "\[\r\n\]*$" "$result" "" result;
+ regsub "^\[\r\n\]*" "$result" "" result;
+ if { $result != "" && [lsearch $options quiet] == -1} {
+ clone_output "compile failed for ltrace test, $result"
+ }
+ return $result;
+}
+
+proc get_compiler_info {binfile args} {
+ # For compiler.c and compiler.cc
+ global srcdir
+
+ # I am going to play with the log to keep noise out.
+ global outdir
+ global tool
+
+ # These come from compiler.c or compiler.cc
+ global compiler_info
+
+ # Legacy global data symbols.
+ #global gcc_compiled
+
+ # Choose which file to preprocess.
+ set ifile "${srcdir}/lib/compiler.c"
+ if { [llength $args] > 0 && [lindex $args 0] == "c++" } {
+ set ifile "${srcdir}/lib/compiler.cc"
+ }
+
+ # Run $ifile through the right preprocessor.
+ # Toggle ltrace.log to keep the compiler output out of the log.
+ #log_file
+ set cppout [ ltrace_compile "${ifile}" "" preprocess [list "$args" quiet] ]
+ #log_file -a "$outdir/$tool.log"
+
+ # Eval the output.
+ set unknown 0
+ foreach cppline [ split "$cppout" "\n" ] {
+ if { [ regexp "^#" "$cppline" ] } {
+ # line marker
+ } elseif { [ regexp "^\[\n\r\t \]*$" "$cppline" ] } {
+ # blank line
+ } elseif { [ regexp "^\[\n\r\t \]*set\[\n\r\t \]" "$cppline" ] } {
+ # eval this line
+ verbose "get_compiler_info: $cppline" 2
+ eval "$cppline"
+ } else {
+ # unknown line
+ verbose "get_compiler_info: $cppline"
+ set unknown 1
+ }
+ }
+
+ # Reset to unknown compiler if any diagnostics happened.
+ if { $unknown } {
+ set compiler_info "unknown"
+ }
+ return 0
+}
+
+proc test_compiler_info { {compiler ""} } {
+ global compiler_info
+ verbose "compiler_info=$compiler_info"
+ # if no arg, return the compiler_info string
+
+ if [string match "" $compiler] {
+ if [info exists compiler_info] {
+ return $compiler_info
+ } else {
+ perror "No compiler info found."
+ }
+ }
+
+ return [string match $compiler $compiler_info]
+}
+
+proc ltrace_compile_shlib {sources dest options} {
+ set obj_options $options
+ verbose "+++++++ [test_compiler_info]"
+ switch -glob [test_compiler_info] {
+ "xlc-*" {
+ lappend obj_options "additional_flags=-qpic"
+ }
+ "gcc-*" {
+ if { !([istarget "powerpc*-*-aix*"]
+ || [istarget "rs6000*-*-aix*"]) } {
+ lappend obj_options "additional_flags=-fpic"
+ }
+ }
+ "xlc++-*" {
+ lappend obj_options "additional_flags=-qpic"
+ }
+
+ default {
+ fail "Bad compiler!"
+ }
+ }
+
+ set outdir [file dirname $dest]
+ set objects ""
+ foreach source $sources {
+ set sourcebase [file tail $source]
+ if {[ltrace_compile $source "${outdir}/${sourcebase}.o" object $obj_options] != ""} {
+ return -1
+ }
+ lappend objects ${outdir}/${sourcebase}.o
+ }
+
+ set link_options $options
+ if { [test_compiler_info "xlc-*"] || [test_compiler_info "xlc++-*"]} {
+ lappend link_options "additional_flags=-qmkshrobj"
+ } else {
+ lappend link_options "additional_flags=-shared"
+ }
+ if {[ltrace_compile "${objects}" "${dest}" executable $link_options] != ""} {
+ return -1
+ }
+}
+
+#
+# ltrace_options OPTIONS_LIST
+# Pass ltrace commandline options.
+#
+proc ltrace_options { args } {
+
+ global LTRACE_OPTIONS
+ set LTRACE_OPTIONS $args
+}
+
+#
+# ltrace_runtest LD_LIBRARY_PATH BIN FILE
+# Trace the execution of BIN and return result.
+#
+# BIN is program-under-test.
+# LD_LIBRARY_PATH is the env for program-under-test to run.
+# FILE is to save the output from ltrace with default name $BIN.ltrace.
+# Retrun output from ltrace.
+#
+proc ltrace_runtest { args } {
+
+ global LTRACE
+ global LTRACE_OPTIONS
+
+ verbose "LTRACE = $LTRACE"
+
+ set LD_LIBRARY_PATH_ [lindex $args 0]
+ set BIN [lindex $args 1]
+
+ # specify the output file, the default one is $BIN.ltrace
+ if [llength $args]==3 then {
+ set file [lindex $args 2]
+ } else {
+ set file $BIN.ltrace
+ }
+ # append this option to LTRACE_OPTIONS.
+ lappend LTRACE_OPTIONS "-o"
+ lappend LTRACE_OPTIONS "$file"
+ verbose "LTRACE_OPTIONS = $LTRACE_OPTIONS"
+ #ltrace the PUT.
+ catch "exec sh -c {export LD_LIBRARY_PATH=$LD_LIBRARY_PATH_; $LTRACE $LTRACE_OPTIONS $BIN;exit}" output
+
+ # return output from ltrace.
+ return $output
+}
+
+#
+# ltrace_saveoutput OUTPUT FILE
+# Save OUTPUT from ltrace to file FILE.
+# OUTPUT is output from ltrace or return value of ltrace_runtest.
+# FILE is file save output.
+#
+proc ltrace_saveoutput { args } {
+
+ set output [lindex $args 0]
+ set file [lindex $args 1]
+
+ set fd [open $file w]
+ puts $fd $output
+ close $fd
+}
+
+
+#
+# ltrace_verify_output FILE_TO_SEARCH PATTERN MAX_LINE
+# Verify the ltrace output by comparing the number of PATTERN in
+# FILE_TO_SEARCH with INSTANCE_NO. Do not specify INSTANCE_NO if
+# instance number is ignored in this test.
+# Reutrn:
+# 0 = number of PATTERN in FILE_TO_SEARCH inqual to INSTANCE_NO.
+# 1 = number of PATTERN in FILE_TO_SEARCH qual to INSTANCE_NO.
+#
+proc ltrace_verify_output { file_to_search pattern {instance_no 0}} {
+
+ # compute the number of PATTERN in FILE_TO_SEARCH by grep and wc.
+ catch "exec sh -c {grep $pattern $file_to_search | wc -l ;exit}" output
+ verbose "output = $output"
+
+ if { $instance_no == 0 } then {
+ if { $output == 0 } then {
+ fail "Fail to find $pattern in $file_to_search"
+ } else {
+ pass "$pattern in $file_to_search"
+ }
+ } elseif { $output >= $instance_no } then {
+ pass "$pattern in $file_to_search for $output times"
+ } else {
+ fail "$pattern in $file_to_search for $output times ,should be $instance_no"
+ }
+}
Added: ltrace/trunk/testsuite/ltrace.main/Makefile.in
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/Makefile.in 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/Makefile.in 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,34 @@
+# Copyright (C) 1992 - 2001 Free Software Foundation, Inc.
+#
+# 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+CLEANFILES = *.log *.sum site.bak setval.tmp site.exp
+
+.SUFFIXES:
+clean:
+ -rm -f main main-internal system_calls signals
+ -rm -f *.o *.so
+ -rm -f *.ltrace
+ -rm -f $(CLEANFILES)
+distclean: clean
+ -rm -f Makefile
+
+
+.PHONY: $(RECURSIVE_TARGETS) check clean distclean realclean
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Added: ltrace/trunk/testsuite/ltrace.main/main-internal-1.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/main-internal-1.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/main-internal-1.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,8 @@
+#include<stdio.h>
+
+void
+display ( char* s )
+{
+ printf("%s\n",s);
+}
+
Added: ltrace/trunk/testsuite/ltrace.main/main-internal.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/main-internal.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/main-internal.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,19 @@
+ /* Ltrace Test : main-internal.c.
+ Objectives : Verify that ltrace can trace call from main
+ executable within it.
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+#include<stdio.h>
+
+extern void display ( char* );
+
+#define DISPLAY_LOOP 12
+
+int
+main ()
+{
+ int i;
+ printf ("should not show up if '-X display' is used.\n");
+ for (i=0; i< DISPLAY_LOOP; i++)
+ display ("Function call within executable.");
+}
+
Added: ltrace/trunk/testsuite/ltrace.main/main-internal.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/main-internal.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/main-internal.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,33 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "main-internal"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c ${srcdir}/${subdir}/${testfile}-1.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-x" "display"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't do static plt2addr} $exec_output ] {
+ fail "Couldn't do static plt2addr!"
+ return
+} elseif [regexp {Couldn't get .hash data from} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+set pattern "display"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 12
Added: ltrace/trunk/testsuite/ltrace.main/main-lib.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/main-lib.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/main-lib.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,7 @@
+#include<stdio.h>
+
+void
+print(char* s)
+{
+ printf("%s\n",s);
+}
Added: ltrace/trunk/testsuite/ltrace.main/main.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/main.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/main.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,21 @@
+/* Ltrace Test : main.c.
+ Objectives : Verify that ltrace can trace call a library function
+ from main executable.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+extern void print ( char* );
+
+#define PRINT_LOOP 10
+
+int
+main ()
+{
+ int i;
+
+ for (i=0; i<PRINT_LOOP; i++)
+ print ("Library function call!");
+
+ return 0;
+}
+
Added: ltrace/trunk/testsuite/ltrace.main/main.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/main.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/main.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,39 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "main"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+set libfile "main-lib"
+set libsrc $srcdir/$subdir/$libfile.c
+set lib_sl $srcdir/$subdir/lib$testfile.so
+
+
+if [get_compiler_info $binfile] {
+ return -1
+}
+
+verbose "compiling source file now....."
+if { [ltrace_compile_shlib $libsrc $lib_sl debug ] != ""
+ || [ltrace_compile $srcdir/$subdir/$srcfile $srcdir/$subdir/$binfile executable [list debug shlib=$lib_sl] ] != ""} {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-l" "$srcdir/$subdir/libmain.so"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Verify the output by checking numbers of print in main.ltrace.
+set pattern "print"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 10
Added: ltrace/trunk/testsuite/ltrace.main/signals.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/signals.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/signals.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,48 @@
+/* Ltrace Test : signals.c.
+ Objectives : Verify that ltrace can trace user defined signal.
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include<stdio.h>
+#include<signal.h>
+#include <sys/types.h>
+
+#define LOOP 7
+
+void
+handler(int signum,siginfo_t *info,void *act)
+{
+ /* Trace printf in signal handler. */
+ printf("sival_int = %d\n",info->si_value.sival_int);
+}
+
+int
+main ()
+{
+ struct sigaction act;
+ union sigval mysigval;
+ int i;
+ int sig;
+ pid_t pid;
+
+ mysigval.sival_int=0;
+
+ /* Use an user-defined signal 1. */
+ sig = SIGUSR1;
+ pid=getpid();
+
+ sigemptyset(&act.sa_mask);
+ act.sa_sigaction=handler;
+ act.sa_flags=SA_SIGINFO;
+
+ if(sigaction(sig,&act,NULL) < 0)
+ {
+ printf("install sigal error\n");
+ }
+
+ for(i=0; i<LOOP; i++)
+ {
+ sleep(1);
+ sigqueue(pid,sig,mysigval);
+ }
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.main/signals.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/signals.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/signals.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,39 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "signals"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail\n."
+}
+
+# set options for ltrace.
+ltrace_options "-L"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Extract LOOP from source file.
+set fd [ open $srcdir/$subdir/$srcfile r]
+while { [gets $fd line] >= 0 } {
+ regexp {define LOOP.*([0-9]+)} $line match count
+}
+close $fd
+
+# Verify the output of ltrace by checking the number of SIGUSR1 in signal.ltrace
+set pattern "SIGUSR1"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern $count
Added: ltrace/trunk/testsuite/ltrace.main/system_calls.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/system_calls.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/system_calls.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,68 @@
+/* Ltrace Test : system_calls.c.
+ Objectives : Verify that Ltrace can trace all the system calls in
+ execution.
+
+ You can add new system calls in it and add its verification in
+ system_calls correspondingly.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+void exit (int);
+
+#define BUF_SIZE 100
+
+int
+main ()
+{
+ FILE* fp;
+ char s[]="system_calls";
+ char buffer[BUF_SIZE];
+ struct stat state;
+
+ /* SYS_open. */
+ fp = fopen ("system_calls.tmp", "w");
+ if (fp == NULL)
+ {
+ printf("Can not create system_calls.tmp\n");
+ exit (0);
+ }
+ /* SYS_write. */
+ fwrite(s, sizeof(s), 1, fp);
+ /* SYS_lseek. */
+ fseek (fp, 0, SEEK_CUR);
+ /* SYS_read. */
+ fread(buffer, sizeof(s), 1, fp);
+ /* SYS_close. */
+ fclose(fp);
+
+ /* SYS_getcwd. */
+ getcwd (buffer, BUF_SIZE);
+ /* SYS_chdir. */
+ chdir (".");
+ /* SYS_symlink. */
+ symlink ("system_calls.tmp", "system_calls.link");
+ /* SYS_unlink. */
+ remove("system_calls.link");
+ /* SYS_rename. */
+ rename ("system_calls.tmp", "system_calls.tmp1");
+ /* SYS_stat. */
+ stat ("system_calls.tmp", &state);
+ /* SYS_access. */
+ access ("system_calls.tmp", R_OK);
+ remove("system_calls.tmp1");
+
+ /* SYS_mkdir. */
+ mkdir ("system_call_mkdir", 0777);
+ /* SYS_rmdir. */
+ rmdir ("system_call_mkdir");
+
+ return 0;
+}
+
+
Added: ltrace/trunk/testsuite/ltrace.main/system_calls.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.main/system_calls.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.main/system_calls.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,67 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "system_calls"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-S"
+
+#Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+#check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+
+set pattern "SYS_munmap"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 2
+set pattern "SYS_write"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_unlink"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
+set pattern "SYS_brk"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_open"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_fstat"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_mmap"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_close"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
+set pattern "SYS_getcwd"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_chdir"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_symlink"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_unlink"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_stat"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_access"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_rename"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_mkdir"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+set pattern "SYS_rmdir"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
Added: ltrace/trunk/testsuite/ltrace.minor/Makefile.in
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/Makefile.in 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/Makefile.in 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,37 @@
+# Copyright (C) 1992 - 2001 Free Software Foundation, Inc.
+#
+# 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+CLEANFILES = *.log *.sum site.bak setval.tmp site.exp
+
+.SUFFIXES:
+clean:
+ -rm -f demangle trace-fork trace-clone
+ -rm -f time-record-tt time-record-ttt time-record-T
+ -rm -f attach-process count-record
+ -rm -f print-instruction-pointer
+ -rm -f *.o *.so
+ -rm -f *.ltrace
+ -rm -f $(CLEANFILES)
+distclean: clean
+ -rm -f Makefile
+
+
+.PHONY: $(RECURSIVE_TARGETS) check clean distclean realclean
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Added: ltrace/trunk/testsuite/ltrace.minor/attach-process.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/attach-process.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/attach-process.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,16 @@
+/* Ltrace Test : attach-process.c.
+ Objectives : Verify that ltrace can attach to a running process
+ by its PID.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include<unistd.h>
+#include <sys/types.h>
+
+int
+main ()
+{
+ sleep (5);
+ sleep (1);
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/attach-process.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/attach-process.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/attach-process.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,38 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "attach-process"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# Run the program and get PID of it.
+catch "exec $srcdir/$subdir/$binfile &" output
+
+# get PID from ps output.
+regexp {([0-9]+)} $output match PID
+verbose "PID = $PID"
+
+# Run PUT for ltarce.
+global LTRACE
+catch "exec $LTRACE -S -p $PID -o ${srcdir}/${subdir}/${testfile}.ltrace" exec_output
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Verify the output in attach-process.ltrace by checking the number
+# of sleep.
+set pattern "sleep"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
Added: ltrace/trunk/testsuite/ltrace.minor/count-record.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/count-record.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/count-record.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,51 @@
+/* Ltrace Test : count-record.c.
+ Objectives : Verify that Ltrace can count all the system calls in
+ execution and report a summary on exit.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/stat.h>
+#include <errno.h>
+
+void exit (int);
+
+#define BUF_SIZE 100
+
+/* Do as many operations as possible to record these calls. */
+int
+main ()
+{
+ FILE* fp;
+ char s[]="system_calls";
+ char buffer[BUF_SIZE];
+ struct stat state;
+
+ fp = fopen ("system_calls.tmp", "w");
+ if (fp == NULL)
+ {
+ printf("Can not create system_calls.tmp\n");
+ exit (0);
+ }
+
+ fwrite(s, sizeof(s), 1, fp);
+ fseek (fp, 0, SEEK_CUR);
+ fread(buffer, sizeof(s), 1, fp);
+ fclose(fp);
+
+ getcwd (buffer, BUF_SIZE);
+ chdir (".");
+ symlink ("system_calls.tmp", "system_calls.link");
+ remove("system_calls.link");
+ rename ("system_calls.tmp", "system_calls.tmp1");
+ stat ("system_calls.tmp", &state);
+ access ("system_calls.tmp", R_OK);
+ remove("system_calls.tmp1");
+
+ mkdir ("system_call_mkdir", 0777);
+ rmdir ("system_call_mkdir");
+
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/count-record.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/count-record.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/count-record.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,77 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "count-record"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-c"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+
+ltrace_saveoutput $exec_output $srcdir/$subdir/$binfile.ltrace
+
+#
+# This is a sample output and Verify the forth and fifth column.
+#
+# 13.31 0.001051 1051 1 rmdir
+# 12.81 0.001012 1012 1 fopen
+# 10.32 0.000815 407 2 remove
+# 9.56 0.000755 755 1 mkdir
+# 7.86 0.000621 621 1 fseek
+# 6.86 0.000542 542 1 fwrite
+# 6.60 0.000521 521 1 fclose
+# 6.03 0.000476 476 1 rename
+# 5.61 0.000443 443 1 symlink
+# 5.05 0.000399 399 1 chdir
+# 4.80 0.000379 379 1 access
+# 4.00 0.000316 316 1 __xstat
+# 3.81 0.000301 301 1 getcwd
+# 3.39 0.000268 268 1 fread
+#
+
+set pattern "\'1 rmdir\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 fopen\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'2 remove\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 mkdir\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 fseek\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 fwrite\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 fclose\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 rename\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 symlink\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 chdir\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 access\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 getcwd\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+set pattern "\'1 fread\'"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern
+
Added: ltrace/trunk/testsuite/ltrace.minor/demangle-lib.cpp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/demangle-lib.cpp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/demangle-lib.cpp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,97 @@
+#include<stddef.h>
+#include<iostream>
+
+#include"demangle.h"
+
+/* Number of arguments */
+int Fi_i(int bar) { return 0; }
+int Fi_s(short bar) {return 0; }
+int Fii_i(int bar, int goo) { return 0; }
+int Fiii_i(int bar, int goo, int hoo) { return 0; }
+int Fie_i(int bar, ...) { return 0; }
+
+/* Return types */
+void Fv_v(void) { ; }
+char Fv_c(void) { return 0; }
+signed char Fv_Sc(void) { return 0; }
+unsigned char Fv_Uc(void) { return 0; }
+short Fv_s(void) { return 0; }
+unsigned short Fv_Us(void) { return 0; }
+int Fv_i(void) { return 0; }
+const int Fv_Ci(void) { return 0; }
+unsigned int Fv_Ui(void) { return 0; }
+volatile int Fv_Vi(void) { return 0; }
+long Fv_l(void) { return 0; }
+unsigned long Fv_Ul(void) { return 0; }
+float Fv_f(void) { return 0; }
+double Fv_g(void) { return 0; }
+long double Fv_Lg(void) { return 0; }
+
+/* Pointers */
+void *Fv_Pv(void) { return 0; }
+void **Fv_PPv(void) { return 0; }
+
+/* References */
+int& Fv_Ri(void) { static int x; return x; }
+
+/* Argument types */
+int FPi_i(int *a) { return 0; }
+int FA10_i_i(int a[10]) { return 0; }
+int Fc_i(char bar) { return 0; }
+int Ff_i(float bar) { return 0; }
+int Fg_i(double bar) { return 0; }
+
+/* Function pointers */
+typedef int (*x)(int);
+typedef int (*y)(short);
+
+int Fx_i(x fnptr) { return 0; }
+int Fxx_i(x fnptr, x fnptr2) { return 0; }
+int Fxxx_i(x fnptr, x fnptr2,
+ x fnptr3) { return 0; }
+int Fxxi_i(x fnptr, x fnptr2,
+ x fnptr3, int i) { return 0; }
+int Fxix_i(x fnptr, int i,
+ x fnptr3) { return 0; }
+int Fxyxy_i(x fnptr, y fnptr2,
+ x fnptr3, y fnptr4) { return 0; }
+
+/* Class methods */
+class myclass;
+myclass::myclass(void) { myint = 0; }
+myclass::myclass(int x) { myint = x; }
+myclass::~myclass() { ; }
+
+int myclass::Fi_i(int bar) { return myint; }
+int myclass::Fis_i(int bar) { return bar; }
+
+void* myclass::operator new(size_t size)
+{
+ void* p = malloc(size);return p;
+}
+void myclass::operator delete(void *p) {free(p);}
+
+myclass myclass::operator++() { return myclass(++myint); }
+myclass myclass::operator++(int) { return myclass(myint++); }
+
+/* Binary */
+myclass myclass::operator+(int x) { return myclass(myint + x); }
+
+/* Assignment */
+myclass& myclass::operator=(const myclass& from)
+{
+ myint = from.myint;
+ return *this;
+}
+
+/* test clashes */
+class nested;
+
+nested::nested(void) { ; }
+nested::~nested() { ; }
+int nested::Fi_i(int bar) { return bar; }
+
+void Fmyclass_v(myclass m) { ; }
+void Fmxmx_v(myclass arg1, x arg2,
+ myclass arg3, x arg4) { ; }
+
Added: ltrace/trunk/testsuite/ltrace.minor/demangle.cpp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/demangle.cpp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/demangle.cpp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,121 @@
+/* Ltrace Test : demangle.cpp
+ Objectives : Verify that ltrace can demangle C++ symbols.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include<stddef.h>
+#include"demangle.h"
+
+/* Number of arguments */
+extern int Fi_i(int);
+extern int Fi_s (short);
+extern int Fii_i(int , int);
+extern int Fiii_i(int, int, int);
+extern int Fie_i(int bar, ...);
+
+/* Return types */
+extern void Fv_v(void);
+extern char Fv_c(void);
+extern signed char Fv_Sc(void);
+extern unsigned char Fv_Uc(void);
+extern short Fv_s(void);
+extern unsigned short Fv_Us(void);
+extern int Fv_i(void);
+extern const int Fv_Ci(void);
+extern unsigned int Fv_Ui(void);
+extern volatile int Fv_Vi(void);
+extern long Fv_l(void);
+extern unsigned long Fv_Ul(void);
+extern float Fv_f(void) ;
+extern double Fv_g(void);
+extern long double Fv_Lg(void);
+
+
+/* Pointers */
+extern void * Fv_Pv(void);
+extern void ** Fv_PPv(void);
+
+/* References */
+extern int& Fv_Ri(void);
+
+/* Argument types */
+extern int FPi_i(int *a);
+extern int FA10_i_i(int a[10]) ;
+extern int Fc_i(char bar);
+extern int Ff_i(float bar);
+extern int Fg_i(double bar);
+
+/* Function pointers */
+typedef int (*x)(int);
+typedef int (*y)(short);
+
+extern int Fx_i(x);
+extern int Fxx_i(x fnptr, x fnptr2);
+extern int Fxxx_i(x fnptr, x fnptr2, x fnptr3);
+extern int Fxxi_i(x fnptr, x fnptr2, x fnptr3, int i);
+extern int Fxix_i(x fnptr, int i, x fnptr3);
+extern int Fxyxy_i(x fnptr, y fnptr2, x fnptr3, y fnptr4);
+
+
+extern void Fmyclass_v(myclass m);
+extern void Fmxmx_v(myclass arg1, x arg2, myclass arg3, x arg4);
+
+int main ()
+{
+ int i;
+
+ i = Fi_i (0);
+ i = Fii_i (0,0);
+ i = Fiii_i (0,0,0);
+ i = Fie_i (0);
+
+ Fv_v ();
+ Fv_c ();
+ Fv_Sc ();
+ Fv_Uc ();
+ Fv_s ();
+ Fv_Us ();
+ Fv_i ();
+ Fv_Ci ();
+ Fv_Ui ();
+ Fv_Vi ();
+ Fv_l ();
+ Fv_Ul ();
+ Fv_f ();
+ Fv_g ();
+ Fv_Lg ();
+
+ Fv_Pv ();
+ Fv_PPv ();
+
+ Fv_Ri ();
+
+ FPi_i (&i);
+ FA10_i_i (&i);
+ Fc_i ('a');
+ Ff_i (1.1f);
+ Fg_i (1.1);
+
+ Fx_i (Fi_i);
+ Fxx_i (Fi_i, Fi_i);
+ Fxxx_i (Fi_i, Fi_i, Fi_i);
+ Fxxi_i (Fi_i, Fi_i, Fi_i, 0);
+ Fxyxy_i (Fi_i, Fi_s, Fi_i, Fi_s);
+
+ myclass a,c;
+ myclass* b;
+
+ a.Fi_i (0);
+ a.Fis_i (0);
+ a++;
+ c = a + 2;
+
+ nested n;
+ n.Fi_i (0);
+
+ b = (myclass*) new myclass(0);
+ delete (b);
+ Fmyclass_v (a);
+
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/demangle.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/demangle.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/demangle.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,63 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "demangle"
+set srcfile ${testfile}.cpp
+set binfile ${testfile}
+set libfile "demangle-lib"
+set libsrc $srcdir/$subdir/$libfile.cpp
+set lib_sl $srcdir/$subdir/lib$testfile.so
+
+verbose "compiling source file now....."
+if [get_compiler_info $binfile "c++"] {
+ return -1
+}
+
+verbose "compiling source file now....."
+if { [ltrace_compile_shlib $libsrc $lib_sl [list debug c++]] != ""
+ || [ltrace_compile $srcdir/$subdir/$srcfile $srcdir/$subdir/$binfile executable [list debug shlib=$lib_sl c++] ] != ""} {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-C"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# read function declarations from demangle.cpp and verify them in demangle.ltrace.
+set fd [ open $srcdir/$subdir/$srcfile r]
+while { [gets $fd line] >= 0 } {
+ if [regexp {extern (double|float|void|char|int|short|long|void \*|void \*\*) ([^ ])\(} $line match type fun] {
+ ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $fun
+ }
+}
+close $fd
+
+#read member fucntions of classs from demangle-lib.cpp and verify them in demagle.ltrace.
+set fd [ open $srcdir/$subdir/$testfile-lib.cpp r]
+while { [gets $fd line] >= 0 } {
+ if [ regexp {((myclass|nested)::[^\(]*)\(} $line match fun] {
+ # For Debug purpose.
+ verbose "fun = $fun"
+ # Extract new/delete for remove extra SPACE in $fun, for example,
+ # $fun = "myclass::operator delete" will confuse ltrace_verify_output if it
+ # was an argument to it.
+ if [regexp {(new|delete)} $fun match sub_fun] {
+ ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $sub_fun
+ } else {
+ # Verify class member functions without SPACE.
+ ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $fun
+ }
+ }
+}
+close $fd
Added: ltrace/trunk/testsuite/ltrace.minor/demangle.h
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/demangle.h 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/demangle.h 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,36 @@
+
+class myclass {
+ int myint;
+ public:
+ myclass(int x);
+ myclass(void);
+ ~myclass();
+ static int Fis_i(int bar);
+ int Fi_i(int bar);
+ /* Overloaded operators */
+ void* operator new(size_t);
+ void operator delete(void *);
+ /* Unary operation. */
+ myclass operator++();// Preincrement
+ myclass operator++(int);// Postincrement
+
+ /* Binary operation. */
+ myclass operator+(int);
+
+ /* Assignment */
+ myclass& operator=(const myclass& from);
+ /* Nested classes */
+ class nested {
+ public:
+ nested();
+ ~nested();
+ int Fi_i(int bar);
+ };
+};
+
+class nested {
+ public:
+ nested();
+ ~nested();
+ int Fi_i(int bar);
+};
Added: ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+int main ()
+{
+ int i=0;
+ printf("%d\n",i);
+ i=1;
+ printf("%d\n",i);
+
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/print-instruction-pointer.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,42 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "print-instruction-pointer"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ltrace_compile "${srcdir}/${subdir}/${srcfile}" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-i"
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Get the addrss by objdump and sed.
+catch "exec sh -c {objdump -d $srcdir/$subdir/$binfile | sed -n '/^\[0-9a-fA-F\]\[0-9a-fA-F\]* <main>/,/^\[0-9a-fA-F\]\[0-9a-fA-F\]* </p'| grep -A 1 'call\\|bl' }" output
+#verbose "output=$output"
+catch "exec sh -c {echo \"$output\" | sed -n '2p'| awk -F' ' '{print \$1}'|awk -F: '{print \$1}'}" addr1
+catch "exec sh -c {echo \"$output\" | sed -n '5p'| awk -F' ' '{print \$1}'|awk -F: '{print \$1}'}" addr2
+
+verbose "addr1 = $addr1"
+verbose "addr2 = $addr2"
+# Verify the output by checking numbers of print in main.ltrace.
+set pattern "$addr1.*printf"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
+set pattern "$addr2.*printf"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
Added: ltrace/trunk/testsuite/ltrace.minor/time-record-T.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/time-record-T.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/time-record-T.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,84 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "time-record"
+set srcfile ${testfile}.c
+set binfile ${testfile}-T
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# set options for ltrace.
+ltrace_options "-T"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+verbose "ltrace runtest output: $exec_output\n"
+
+# Check the output of this program.
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Get the time of nanosleep in C source file.
+set fd [ open $srcdir/$subdir/$srcfile r]
+while { [gets $fd line] >= 0 } {
+ if [ regexp {define NANOSLEEP_COUNT ([0-9]+)} $line match nanosleep_usec] then {
+ break
+ }
+}
+close $fd
+
+
+# Verify the time for calling sleep.
+set fd [ open $srcdir/$subdir/$binfile.ltrace r]
+set FOUND 0
+while { [gets $fd line] >= 0 } {
+ # match the line with sleep and extract the spent time in sleep and sleep argument.
+ if [ regexp {sleep\(([0-9]+).*<([0-9]+\.[0-9]+)>} $line match sleep_sec sec ] then {
+ verbose "sleep_sec = $sleep_sec, sec = $sec"
+
+ if { $sec >= $sleep_sec } then {
+ pass "Correct Time spent inside call."
+ } else {
+ fail "Spent $sec inside call, but PUT call sleep($sleep_sec)!"
+ }
+ set FOUND 1
+ break
+ }
+}
+close $fd
+
+if {$FOUND != 1} then {
+ fail "Fail to find call sleep!"
+}
+
+# Verify the time for calling nanosleep.
+set FOUND 0
+set fd [ open $srcdir/$subdir/$binfile.ltrace r]
+while { [gets $fd line] >= 0 } {
+ # match the line with nanosleep and extract spent time and nanosleep argument.
+ if [ regexp {nanosleep.*<([0-9]+\.[0-9]+)>} $line match usec] then {
+ verbose "nanosleep_usec = $nanosleep_usec, usec = $usec"
+
+ if { $usec * 1000 >= $nanosleep_usec} then {
+ pass "Correct Time spent inside call."
+ } else {
+ fail "Spent $usec inside call, but PUT call nanosleep($nanosleep_usec)!"
+ }
+ set FOUND 1
+ break
+ }
+}
+
+if { $FOUND != 1} then {
+ fail "Fail to find nanosleep"
+}
+close $fd
+
Added: ltrace/trunk/testsuite/ltrace.minor/time-record-tt.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/time-record-tt.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/time-record-tt.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,107 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "time-record"
+set srcfile ${testfile}.c
+set binfile ${testfile}-tt
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# Set options for ltrace.
+ltrace_options "-tt"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Verify the time for calling sleep.
+set fd [ open $srcdir/$subdir/$binfile.ltrace r]
+set FOUND 0
+while { [gets $fd line] >= 0 } {
+ # match the line with sleep and extract the strat time and sleep argument.
+ if [ regexp {[0-9]+:([0-9]+):([0-9]+)\.[0-9]+ sleep\(([0-9]+)} $line match start_min start_sec sleep_sec] then {
+ # Remove extra zero.
+ regexp {0([1-9])} $start_min match start_min
+ regexp {0([1-9])} $start_sec match start_sec
+
+ verbose "start_sec = $start_sec, sleep_sec = $sleep_sec"
+ # get a new line for the end time of sleep
+ gets $fd line
+ regexp {[0-9]+:([0-9]+):([0-9]+)} $line match end_min end_sec
+ verbose "end_sec = $end_sec"
+
+ # Remove extra zero.
+ regexp {0([1-9])} $end_min match end_min
+ regexp {0([1-9])} $end_sec match end_sec
+
+ if { (($end_min - $start_min)*60 + $end_sec - $start_sec)== $sleep_sec } then {
+ pass "Correct Timestamp."
+ } else {
+ fail "Start at $start_sec, End at $end_sec, but PUT call sleep($sleep_sec)!"
+ }
+ set FOUND 1
+ break
+ }
+}
+close $fd
+
+if {$FOUND != 1} then {
+ fail "Fail to find call sleep!"
+}
+
+# Get the time of sleep and nanosleep in C source file.
+set fd [ open $srcdir/$subdir/$srcfile r]
+while { [gets $fd line] >= 0 } {
+ if [ regexp {define NANOSLEEP_COUNT ([0-9]+)} $line match nanosleep_usec] then {
+ break
+ }
+}
+close $fd
+
+# Verify the time for calling nanosleep.
+set FOUND 0
+set fd [ open $srcdir/$subdir/$binfile.ltrace r]
+while { [gets $fd line] >= 0 } {
+ # match the line with sleep and extract the strat time and sleep argument.
+ if [ regexp {[0-9]+:[0-9]+:([0-9]+)\.([0-9][0-9][0-9]).* nanosleep} $line match start_sec start_usec ] then {
+ # Remove extra zeros.
+ regexp {0([1-9])} $start_sec match start_sec
+ regexp {0*([1-9][0-9]*)} $start_usec match start_usec
+
+ verbose "start_sec = $start_sec, start_usec = $start_usec, sleep_usec = $nanosleep_usec"
+ # get a new line for the end time of sleep
+ gets $fd line
+ regexp {[0-9]+:[0-9]+:([0-9]+)\.([0-9][0-9][0-9])} $line match end_sec end_usec
+
+ # Remove extra zeros.
+ regexp {0([1-9])} $end_sec match end_sec
+ regexp {0*([1-9][0-9]*)} $end_usec match end_usec
+
+ verbose "end_sec = $end_sec, end_usec = $end_usec"
+ if { (($end_sec - $start_sec)*1000 + $end_usec - $start_usec) >= $nanosleep_usec} then {
+ pass "Correct Timestamp."
+ } else {
+ fail "Start at $start_usec, End at $end_usec, but PUT call nanosleep($nanosleep_usec)!"
+ }
+ set FOUND 1
+ break
+ }
+}
+
+if { $FOUND != 1} then {
+ fail "Fail to find nanosleep"
+}
+close $fd
+
Added: ltrace/trunk/testsuite/ltrace.minor/time-record-ttt.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/time-record-ttt.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/time-record-ttt.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,112 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "time-record"
+set srcfile ${testfile}.c
+set binfile ${testfile}-ttt
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+
+# Set options for ltrace.
+ltrace_options "-ttt"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Verify the time for calling sleep.
+set fd [ open $srcdir/$subdir/$binfile.ltrace r]
+set FOUND 0
+while { [gets $fd line] >= 0 } {
+ # match the line with sleep and extract the strat time and sleep argument.
+ if [ regexp {([0-9]+)\.([0-9][0-9][0-9]).* sleep\(([0-9]+)} $line match start_sec start_usec sleep_sec] then {
+
+ # Remove extra zeros.
+ regexp {0*([1-9][0-9]*)} $start_sec match start_sec
+ regexp {0*([1-9][0-9]*)} $start_usec match start_usec
+
+ verbose "start_sec = $start_sec, start_usec = $start_usec,sleep_sec = $sleep_sec"
+ # get a new line for the end time of sleep
+ gets $fd line
+ regexp {([0-9]+)\.([0-9][0-9][0-9])} $line match end_sec end_usec
+ verbose "end_sec = $end_sec, end_usec=$end_usec"
+
+ # Remove extra zeros.
+ regexp {0*([1-9][0-9]*)} $end_sec match end_sec
+ regexp {0*([1-9][0-9]*)} $end_usec match end_usec
+
+ if { $end_sec - $start_sec >= $sleep_sec } then {
+ pass "Correct Timestamp."
+ } else {
+ fail "Start at $start_sec, End at $end_sec, but PUT call sleep($sleep_sec)!"
+ }
+ set FOUND 1
+ break
+ }
+}
+
+close $fd
+
+if {$FOUND != 1} then {
+ fail "Fail to find call sleep!"
+}
+
+
+# Get the time of nanosleep in C source file.
+set fd [ open $srcdir/$subdir/$srcfile r]
+while { [gets $fd line] >= 0 } {
+ if [ regexp {define NANOSLEEP_COUNT ([0-9]+)} $line match nanosleep_usec] then {
+ break
+ }
+}
+close $fd
+
+# Verify the time for calling nanosleep.
+set FOUND 0
+set fd [ open $srcdir/$subdir/$binfile.ltrace r]
+while { [gets $fd line] >= 0 } {
+ # match the line with sleep and extract the strat time and sleep argument.
+ if [ regexp {([0-9]+)\.([0-9][0-9][0-9]).* nanosleep} $line match start_sec start_usec ] then {
+
+ # Remove extra zeros.
+ regexp {0*([1-9][0-9]*)} $start_sec match start_sec
+ regexp {0*([1-9][0-9]*)} $start_usec match start_usec
+
+ verbose "start_sec = $start_sec, start_usec = $start_usec, nanosleep_usec = $nanosleep_usec"
+ # get a new line for the end time of sleep
+ gets $fd line
+ regexp {([0-9]+)\.([0-9][0-9][0-9])} $line match end_sec end_usec
+
+ # Remove extra zeros.
+ regexp {0*([1-9][0-9]*)} $end_sec match end_sec
+ regexp {0*([1-9][0-9]*)} $end_usec match end_usec
+
+ verbose "end_sec = $end_sec, end_usec = $end_usec"
+ if { ($end_sec - $start_sec)*1000 + $end_usec - $start_usec >= $nanosleep_usec} then {
+ pass "Correct Timestamp."
+ } else {
+ fail "Start at $start_usec, End at $end_usec, but PUT call nanosleep($nanosleep_usec)!"
+ }
+ set FOUND 1
+ break
+ }
+}
+
+if { $FOUND != 1} then {
+ fail "Fail to find nanosleep"
+}
+close $fd
+
Added: ltrace/trunk/testsuite/ltrace.minor/time-record.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/time-record.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/time-record.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,23 @@
+/* Ltrace Test : time-record.c.
+ Objectives : Verify that Ltrace can record timestamp and spent
+ time inside each call.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+#include <stdio.h>
+#include <time.h>
+
+#define SLEEP_COUNT 2
+#define NANOSLEEP_COUNT 50
+
+int
+main ()
+{
+ struct timespec request, remain;
+ request.tv_sec = 0;
+ request.tv_nsec = NANOSLEEP_COUNT * 1000000;
+
+ sleep (SLEEP_COUNT);
+ nanosleep (&request, NULL);
+
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/trace-clone.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/trace-clone.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/trace-clone.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,31 @@
+/* Ltrace Test : trace-clone.c.
+ Objectives : Verify that ltrace can trace to child process after
+ clone called.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <sched.h>
+
+int child ()
+{
+ return 0;
+}
+
+typedef int (* myfunc)();
+
+int main ()
+{
+ pid_t pid;
+ static char stack[1024];
+
+ if ((pid = clone((myfunc)&child, stack,CLONE_FS, NULL )) < 0)
+ {
+ perror("clone called failed");
+ exit (1);
+ }
+
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/trace-clone.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/trace-clone.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/trace-clone.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,44 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "trace-clone"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+global LTRACE
+
+#Run PUT for ltarce.
+spawn $LTRACE -f $srcdir/$subdir/$binfile
+set timeout 4
+expect timeout {
+ fail "Time out! Maybe caused by ltrace segment fault or improper timeout value here!"
+ return
+}
+
+catch "exec $LTRACE -f $srcdir/$subdir/$binfile" exec_output
+# Save the output
+ltrace_saveoutput "${exec_output}" ${srcdir}/${subdir}/${testfile}.ltrace
+
+#check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Operation not permitted} $exec_output ] {
+ fail "Operation not permitted, see testrun.log for details!"
+ return
+} elseif [ regexp {killed by SIGKILL} $exec_output ] {
+ fail "killed by SIGKILL!"
+ return
+}
+
+
+
+set pattern "clone"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
Added: ltrace/trunk/testsuite/ltrace.minor/trace-fork.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/trace-fork.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/trace-fork.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,33 @@
+/* Ltrace Test : trace-fork.c
+ Objectives : Verify that ltrace can trace to child process after
+ fork called.
+
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include <stdio.h>
+#include <sys/types.h>
+
+void
+child ()
+{
+ printf("Fork Child\n");
+ sleep(1);
+}
+
+int
+main ()
+{
+ pid_t pid;
+ pid = fork ();
+
+ if (pid == -1)
+ printf("fork failed!\n");
+ else if (pid == 0)
+ child();
+ else
+ {
+ printf("My child pid is %d\n",pid);
+ wait();
+ }
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.minor/trace-fork.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.minor/trace-fork.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.minor/trace-fork.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,40 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "trace-fork"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail.\n"
+}
+global LTRACE
+set exec_output ""
+
+#Run PUT for ltarce.
+spawn $LTRACE -f $srcdir/$subdir/$binfile
+set timeout 4
+expect timeout {
+ fail "Time out! Maybe caused by ltrace segment fault or improper timeout value here!"
+ return
+}
+
+catch "exec $LTRACE -f $srcdir/$subdir/$binfile" exec_output
+
+#check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+ltrace_saveoutput "${exec_output}" ${srcdir}/${subdir}/${testfile}.ltrace
+
+set pattern "fork"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern 1
+
Added: ltrace/trunk/testsuite/ltrace.torture/Makefile.in
===================================================================
--- ltrace/trunk/testsuite/ltrace.torture/Makefile.in 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.torture/Makefile.in 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,34 @@
+# Copyright (C) 1992 - 2001 Free Software Foundation, Inc.
+#
+# 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+
+CLEANFILES = *.log *.sum site.bak setval.tmp site.exp
+
+.SUFFIXES:
+clean:
+ -rm -f signals
+ -rm -f *.o *.so
+ -rm -f *.ltrace
+ -rm -f $(CLEANFILES)
+distclean: clean
+ -rm -f Makefile
+
+
+.PHONY: $(RECURSIVE_TARGETS) check clean distclean realclean
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Added: ltrace/trunk/testsuite/ltrace.torture/signals.c
===================================================================
--- ltrace/trunk/testsuite/ltrace.torture/signals.c 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.torture/signals.c 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,44 @@
+/* Ltrace Test : signals.c.
+ Objectives : Verify that ltrace can trace user defined signal.
+ This file was written by Yao Qi <qiyao at cn.ibm.com>. */
+
+#include<stdio.h>
+#include<signal.h>
+#include <sys/types.h>
+
+#define LOOP 20
+
+void
+handler(int signum,siginfo_t *info,void *act)
+{
+}
+
+int
+main ()
+{
+ struct sigaction act;
+ union sigval mysigval;
+ int i;
+ int sig;
+ pid_t pid;
+
+ mysigval.sival_int=0;
+ sig = 10;
+ pid=getpid();
+
+ sigemptyset(&act.sa_mask);
+ act.sa_sigaction=handler;
+ act.sa_flags=SA_SIGINFO;
+
+ if(sigaction(sig,&act,NULL) < 0)
+ {
+ printf("install sigal error\n");
+ }
+
+ for(i=0; i< LOOP; i++)
+ {
+ usleep(100);
+ sigqueue(pid,sig,mysigval);
+ }
+ return 0;
+}
Added: ltrace/trunk/testsuite/ltrace.torture/signals.exp
===================================================================
--- ltrace/trunk/testsuite/ltrace.torture/signals.exp 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/ltrace.torture/signals.exp 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,37 @@
+# This file was written by Yao Qi <qiyao at cn.ibm.com>.
+
+set testfile "signals"
+set srcfile ${testfile}.c
+set binfile ${testfile}
+
+
+verbose "compiling source file now....."
+# Build the shared libraries this test case needs.
+if { [ ltrace_compile "${srcdir}/${subdir}/${testfile}.c" "${srcdir}/${subdir}/${binfile}" executable {debug} ] != "" } {
+ send_user "Testcase compile failed, so all tests in this file will automatically fail\n."
+}
+
+# Set options for ltrace.
+ltrace_options "-L"
+
+# Run PUT for ltarce.
+set exec_output [ltrace_runtest $srcdir/$subdir $srcdir/$subdir/$binfile]
+
+# Check the output of this program.
+verbose "ltrace runtest output: $exec_output\n"
+if [regexp {ELF from incompatible architecture} $exec_output] {
+ fail "32-bit ltrace can not perform on 64-bit PUTs and rebuild ltrace in 64 bit mode!"
+ return
+} elseif [ regexp {Couldn't get .hash data} $exec_output ] {
+ fail "Couldn't get .hash data!"
+ return
+}
+
+# Extract LOOP from source file.
+set fd [ open $srcdir/$subdir/$srcfile r]
+while { [gets $fd line] >= 0 } {
+ regexp {define LOOP.*([0-9]+)} $line match count
+}
+set pattern "SIGUSR1"
+ltrace_verify_output ${srcdir}/${subdir}/${testfile}.ltrace $pattern $count
+
Added: ltrace/trunk/testsuite/run-my-tests.sh
===================================================================
--- ltrace/trunk/testsuite/run-my-tests.sh 2006-03-13 22:34:55 UTC (rev 34)
+++ ltrace/trunk/testsuite/run-my-tests.sh 2006-03-13 23:12:01 UTC (rev 35)
@@ -0,0 +1,43 @@
+#! /bin/sh
+bitmode=""
+
+# This shell script is used to run the ltrace test suite. It is possible to
+# run it via 'make check' using RUNTESTFLAGS. This script just makes it easy.
+
+function usage
+{
+ echo usage: `basename $0` '-m32|-m64 [<tool> | ""] [<test.exp>]'
+}
+
+# The first argument is not optional: it must either be -m32 or -m64. If the
+# second argument is used, it specifies the file name of the ltrace to be
+# tested. The third argument specifies a particular test case to run. If
+# the third argument is omitted, then all test cases are run. If you wish to
+# use the third argument, but not the second, specify the second as "".
+
+# there is a secret argument: if the name of this script is 'test', then
+# the --verbose argument is added to RUNTESTFLAGS.
+
+if [ x"$1" == x -o x"$1" != x-m32 -a x"$1" != x-m64 ]; then
+ usage
+ exit 1
+fi
+
+flags=''
+
+if [ `basename $0` == test ]; then
+ flags="--verbose "
+fi
+
+if [ x"$2" != x ]; then
+ flags="${flags}--tool_exec=$2 "
+fi
+
+flags="${flags}CFLAGS_FOR_TARGET=$1"
+
+if [ x"$3" != x ]; then
+ flags="$flags $3"
+fi
+
+set -o xtrace
+make check RUNTESTFLAGS="$flags"
Property changes on: ltrace/trunk/testsuite/run-my-tests.sh
___________________________________________________________________
Name: svn:executable
+ *
More information about the Ltrace-devel
mailing list