summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordsmith <dsmith>2006-06-02 15:54:26 +0000
committerdsmith <dsmith>2006-06-02 15:54:26 +0000
commit277c1957c614aa4c56a5e192e893471e3a964cc4 (patch)
tree3a81e58bc53afddd7c1c98035a988a2d024a2843
parent3b308385ab9aa306eabac5fa6b67ef9e17106e98 (diff)
downloadsystemtap-steved-277c1957c614aa4c56a5e192e893471e3a964cc4.tar.gz
systemtap-steved-277c1957c614aa4c56a5e192e893471e3a964cc4.tar.xz
systemtap-steved-277c1957c614aa4c56a5e192e893471e3a964cc4.zip
2006-06-02 David Smith <dsmith@redhat.com>
* main.cxx (usage): Added exitcode parameter. (main): Improved a few error messages. Also, when an error is given, stap now always exits with a status of 1. * testsuite/buildok/cmdline01.stp: New test. * testsuite/parseko/cmdline01.stp: Ditto. * testsuite/parseko/cmdline02.stp: Ditto. * testsuite/parseko/cmdline03.stp: Ditto. * testsuite/parseko/cmdline04.stp: Ditto. * testsuite/parseko/cmdline05.stp: Ditto. * testsuite/parseko/cmdline06.stp: Ditto. * testsuite/parseok/cmdline01.stp: Ditto. * testsuite/parseok/cmdline02.stp: Ditto.
-rw-r--r--ChangeLog16
-rw-r--r--main.cxx33
-rwxr-xr-xtestsuite/buildok/cmdline01.stp28
-rwxr-xr-xtestsuite/parseko/cmdline01.stp5
-rwxr-xr-xtestsuite/parseko/cmdline02.stp8
-rwxr-xr-xtestsuite/parseko/cmdline03.stp8
-rwxr-xr-xtestsuite/parseko/cmdline04.stp5
-rwxr-xr-xtestsuite/parseko/cmdline05.stp5
-rwxr-xr-xtestsuite/parseko/cmdline06.stp5
-rwxr-xr-xtestsuite/parseok/cmdline01.stp10
-rwxr-xr-xtestsuite/parseok/cmdline02.stp5
11 files changed, 117 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 54d1c0b6..2425c2f9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2006-06-02 David Smith <dsmith@redhat.com>
+
+ * main.cxx (usage): Added exitcode parameter.
+ (main): Improved a few error messages. Also, when an error is
+ given, stap now always exits with a status of 1.
+
+ * testsuite/buildok/cmdline01.stp: New test.
+ * testsuite/parseko/cmdline01.stp: Ditto.
+ * testsuite/parseko/cmdline02.stp: Ditto.
+ * testsuite/parseko/cmdline03.stp: Ditto.
+ * testsuite/parseko/cmdline04.stp: Ditto.
+ * testsuite/parseko/cmdline05.stp: Ditto.
+ * testsuite/parseko/cmdline06.stp: Ditto.
+ * testsuite/parseok/cmdline01.stp: Ditto.
+ * testsuite/parseok/cmdline02.stp: Ditto.
+
2006-06-01 Josh Stone <joshua.i.stone@intel.com>
* tapsets.cxx (hrtimer_derived_probe::emit_interval): update
diff --git a/main.cxx b/main.cxx
index 95a1cfaa..46b8701a 100644
--- a/main.cxx
+++ b/main.cxx
@@ -46,7 +46,7 @@ version ()
}
void
-usage (systemtap_session& s)
+usage (systemtap_session& s, int exitcode)
{
version ();
clog
@@ -96,7 +96,7 @@ usage (systemtap_session& s)
;
// -d: dump safety-related external references
- exit (0);
+ exit (exitcode);
}
@@ -178,8 +178,8 @@ main (int argc, char * const argv [])
s.last_pass = atoi (optarg);
if (s.last_pass < 1 || s.last_pass > 5)
{
- cerr << "Invalid pass number." << endl;
- usage (s);
+ cerr << "Invalid pass number (should be 1-5)." << endl;
+ usage (s, 1);
}
break;
@@ -189,7 +189,11 @@ main (int argc, char * const argv [])
case 'e':
if (have_script)
- usage (s);
+ {
+ cerr << "Only one script can be given on the command line."
+ << endl;
+ usage (s, 1);
+ }
cmdline_script = string (optarg);
have_script = true;
break;
@@ -230,8 +234,8 @@ main (int argc, char * const argv [])
s.buffer_size = atoi (optarg);
if (s.buffer_size < 1 || s.buffer_size > 64)
{
- cerr << "Invalid buffer size." << endl;
- usage (s);
+ cerr << "Invalid buffer size (should be 1-64)." << endl;
+ usage (s, 1);
}
break;
@@ -248,21 +252,25 @@ main (int argc, char * const argv [])
break;
case 'h':
+ usage (s, 0);
+ break;
+
default:
- usage (s);
+ usage (s, 1);
+ break;
}
}
if(!s.bulk_mode && !s.merge)
{
cerr << "-M option is valid only for bulk (relayfs) mode." <<endl;
- exit(1);
+ usage (s, 1);
}
if(!s.output_file.empty() && s.bulk_mode && !s.merge)
{
cerr << "You can't specify -M, -b and -o options together." <<endl;
- exit(1);
+ usage (s, 1);
}
for (int i = optind; i < argc; i++)
@@ -278,7 +286,10 @@ main (int argc, char * const argv [])
// need a user file
if (! have_script)
- usage(s);
+ {
+ cerr << "A script must be specified." << endl;
+ usage(s, 1);
+ }
int rc = 0;
diff --git a/testsuite/buildok/cmdline01.stp b/testsuite/buildok/cmdline01.stp
new file mode 100755
index 00000000..9d087e44
--- /dev/null
+++ b/testsuite/buildok/cmdline01.stp
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# -g Guru mode. Enable parsing of unsafe expert-level constructs
+# like embedded C.
+#
+# -D NAME=VALUE
+# Add the given C preprocessor directive to the module Makefile.
+
+# Test '-g' and '-D'. The code below will give an error at
+# compilation stage unless 'FOO' is defined.
+
+./stap -g -p4 -DFOO=1 - <<EOF
+
+function footest:string()
+%{
+#ifdef FOO
+ strncpy(THIS->__retvalue, "footest called", MAXSTRINGLEN);
+#else
+#error undefined FOO
+#endif
+%}
+
+probe begin {
+ printf("%s\n", footest())
+ exit()
+}
+
+EOF
diff --git a/testsuite/parseko/cmdline01.stp b/testsuite/parseko/cmdline01.stp
new file mode 100755
index 00000000..0f1a21d7
--- /dev/null
+++ b/testsuite/parseko/cmdline01.stp
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# -M (merge) option is only valid for bulk mode
+
+./stap -p1 -M -e 'probe begin { exit() }'
diff --git a/testsuite/parseko/cmdline02.stp b/testsuite/parseko/cmdline02.stp
new file mode 100755
index 00000000..57289c2d
--- /dev/null
+++ b/testsuite/parseko/cmdline02.stp
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# -sNUM Use NUM megabyte buffers for kernel-to-user data transfer. On a
+# multiprocessor in bulk mode, this is a per-processor amount.
+#
+# NUM must be between 1 and 64
+
+./stap -p1 -s 0 -e 'probe begin { exit() }'
diff --git a/testsuite/parseko/cmdline03.stp b/testsuite/parseko/cmdline03.stp
new file mode 100755
index 00000000..7bd4a5c0
--- /dev/null
+++ b/testsuite/parseko/cmdline03.stp
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+# -p NUM Stop after pass NUM. The passes are numbered 1-5: parse, elabo-
+# rate, translate, compile, run.
+#
+# NUM must be between 1 and 5
+
+./stap -p0 -e 'probe begin { exit() }'
diff --git a/testsuite/parseko/cmdline04.stp b/testsuite/parseko/cmdline04.stp
new file mode 100755
index 00000000..b6450954
--- /dev/null
+++ b/testsuite/parseko/cmdline04.stp
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# multiple '-e' (script) options cannot be specified
+
+./stap -p1 -e 'probe begin { exit() }' -e 'probe end { exit() }'
diff --git a/testsuite/parseko/cmdline05.stp b/testsuite/parseko/cmdline05.stp
new file mode 100755
index 00000000..f6075c5f
--- /dev/null
+++ b/testsuite/parseko/cmdline05.stp
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# You can't specify '-M', '-b', and '-o' simultaneously.
+
+./stap -p1 -b -M -o stdout -e 'probe begin { exit() }'
diff --git a/testsuite/parseko/cmdline06.stp b/testsuite/parseko/cmdline06.stp
new file mode 100755
index 00000000..4c23757b
--- /dev/null
+++ b/testsuite/parseko/cmdline06.stp
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+# Bad TMPDIR environment variable should cause exit
+
+TMPDIR=/dev/null/BADTMPDIR ./stap -p1 -e 'probe begin { exit() }'
diff --git a/testsuite/parseok/cmdline01.stp b/testsuite/parseok/cmdline01.stp
new file mode 100755
index 00000000..da4e6eb3
--- /dev/null
+++ b/testsuite/parseok/cmdline01.stp
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+echo "output version"
+./stap -V
+if [ $? != 0 ]; then
+ exit $?
+fi
+
+echo "output version and help"
+./stap -h
diff --git a/testsuite/parseok/cmdline02.stp b/testsuite/parseok/cmdline02.stp
new file mode 100755
index 00000000..4ddb711d
--- /dev/null
+++ b/testsuite/parseok/cmdline02.stp
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+# Make sure verbose ('-v') option is accepted.
+
+./stap -v -p1 -e 'probe begin { exit() }'