summaryrefslogtreecommitdiffstats
path: root/main.cxx
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2009-07-11 19:59:42 +0200
committerMark Wielaard <mjw@redhat.com>2009-07-11 19:59:42 +0200
commit5a5732e52738b4f00995e705a170230c106885b6 (patch)
treea694f978686400505c10df4f8020027a25218db1 /main.cxx
parent4eb0c58b7d5c97a822e76c9070bc45e9b09a7c9e (diff)
downloadsystemtap-steved-5a5732e52738b4f00995e705a170230c106885b6.tar.gz
systemtap-steved-5a5732e52738b4f00995e705a170230c106885b6.tar.xz
systemtap-steved-5a5732e52738b4f00995e705a170230c106885b6.zip
Add -O[0123s] gcc optimization flags for gcc pass 4 speedup.
* session.h (struct systemtap_session): Add gcc_flags string field. * main.cxx (usage): Document -O[0123s]. (main): Default gcc_flags to -O0. Add O:: to getopt_long. Handle case 'O' to set gcc_flags. * buildrun.cxx (compile_pass): Add gcc_flags to EXTRA_CFLAGS. * stap1.in: Add -O[0123s] documentation. * testsuite/systemtap.base/cache.exp: Add tests for -O[0123s].
Diffstat (limited to 'main.cxx')
-rw-r--r--main.cxx27
1 files changed, 26 insertions, 1 deletions
diff --git a/main.cxx b/main.cxx
index 9dc658ff..2aeff580 100644
--- a/main.cxx
+++ b/main.cxx
@@ -111,6 +111,14 @@ usage (systemtap_session& s, int exitcode)
<< " " << s.module_name << endl
<< " -o FILE send script output to file, instead of stdout. This supports" << endl
<< " strftime(3) formats for FILE" << endl
+ << " -O[0123s] optimization to use for C code. Passed to gcc in pass 4." << endl
+ << " -O Alias for -O1" << endl
+ << " -O0 Fast compilation" << endl
+ << " -O1 Optimize, takes a bit more time" << endl
+ << " -O2 Optimize more, takes more time" << endl
+ << " -O3 Optimize even more, takes even more time" << endl
+ << " -Os Optimize for size, like -O2 but tuned for small code size" << endl
+ << " Default is -O0." << endl
<< " -c CMD start the probes, run CMD, and exit when it finishes" << endl
<< " -x PID sets target() to PID" << endl
<< " -F run as on-file flight recorder with -o." << endl
@@ -403,6 +411,7 @@ main (int argc, char * const argv [])
s.ignore_dwarf = false;
s.load_only = false;
s.skip_badvars = false;
+ s.gcc_flags = "-O0";
// Location of our signing certificate.
// If we're root, use the database in SYSCONFDIR, otherwise
@@ -487,7 +496,7 @@ main (int argc, char * const argv [])
{ "vp", 1, &long_opt, LONG_OPT_VERBOSE_PASS },
{ NULL, 0, NULL, 0 }
};
- int grc = getopt_long (argc, argv, "hVMvtp:I:e:o:R:r:m:kgPc:x:D:bs:uqwl:d:L:FS:",
+ int grc = getopt_long (argc, argv, "hVMvtp:I:e:o:O::R:r:m:kgPc:x:D:bs:uqwl:d:L:FS:",
long_options, NULL);
if (grc < 0)
break;
@@ -551,6 +560,22 @@ main (int argc, char * const argv [])
s.output_file = string (optarg);
break;
+ case 'O':
+ if (optarg == NULL)
+ s.gcc_flags = "-O1";
+ else
+ s.gcc_flags = "-O" + string (optarg);
+
+ if (s.gcc_flags != "-O0" && s.gcc_flags != "-O1"
+ && s.gcc_flags != "-O2" && s.gcc_flags != "-O3"
+ && s.gcc_flags != "-Os")
+ {
+ cerr << "'" << s.gcc_flags << "'"
+ << " isn't a valid optimization option." << endl;
+ usage (s, 1);
+ }
+ break;
+
case 'R':
s.runtime_path = string (optarg);
break;