diff options
author | Mark Wielaard <mjw@redhat.com> | 2009-07-15 15:16:54 +0200 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2009-07-15 15:16:54 +0200 |
commit | e4aaabda45427a9b983fa2f01d172dfe5926adaa (patch) | |
tree | 3564c880b9383e1d181a7de11e3c93a14a88bd22 /dtrace | |
parent | 00b01a991cc4300f18c747853e85841d187b1fa4 (diff) | |
download | systemtap-steved-e4aaabda45427a9b983fa2f01d172dfe5926adaa.tar.gz systemtap-steved-e4aaabda45427a9b983fa2f01d172dfe5926adaa.tar.xz systemtap-steved-e4aaabda45427a9b983fa2f01d172dfe5926adaa.zip |
PR10399 dtrace should obey prefix install path
* dtrace: Renamed to...
* dtrace.in: Add -I@prefix/include to gcc invocation.
* configure.ac (AC_CONFIG_FILES): List dtrace.
* configure: Regenerated.
Diffstat (limited to 'dtrace')
-rwxr-xr-x | dtrace | 183 |
1 files changed, 0 insertions, 183 deletions
diff --git a/dtrace b/dtrace deleted file mode 100755 index 0c7711dc..00000000 --- a/dtrace +++ /dev/null @@ -1,183 +0,0 @@ -#!/usr/bin/python - -# This handles the systemtap equivalent of -# $(DTRACE) $(DTRACEFLAGS) -G -s $^ -o $@ -# $(DTRACE) $(DTRACEFLAGS) -h -s $^ -o $@ -# which is a step that builds DTrace provider and probe definitions - -# Copyright (C) 2009 Red Hat Inc. -# -# This file is part of systemtap, and is free software. You can -# redistribute it and/or modify it under the terms of the GNU General -# Public License (GPL); either version 2, or (at your option) any -# later version. - -import os,posix,string,sys -from subprocess import call -from tempfile import mkstemp - -class provider: - def typedef_append(self, typedefs,this_probe,arg,c): - if (add_typedefs): - split_arg = arg.rsplit(None,1) - type_name = " %s_arg%d" % (this_probe.replace("__","_"),c) - if (len(split_arg) > 1): - typedefs += ("typedef " + arg.replace(" " + split_arg[1].split("[")[0].lstrip("*"),type_name).strip() + "; ") - typedefs += (type_name + type_name + "_v;\n") - else: - typedefs += ("typedef " + arg.strip() + type_name + "; ") - typedefs += (type_name + type_name + "_v;\n") - return typedefs - def generate(self, provider, header, add_typedefs): - have_provider = False - self.f = open(provider) - self.h = open(header,mode='w') - self.h.write("/* Generated by the Systemtap dtrace wrapper */\n") - self.h.write("\n#include <sys/sdt.h>\n\n") - in_comment = False - typedefs = "" - while (True): - line = self.f.readline() - if (line == ""): - break - if (line.find("/*") != -1): - in_comment = True - if (line.find("*/") != -1): - in_comment = False - continue - if (in_comment): - continue - if (line.find("provider") != -1): - tokens = line.split() - have_provider = True - self.provider = tokens[1] - elif (not have_provider): - if (add_typedefs): - self.h.write (line) - elif (have_provider and line.find("probe ") != -1): - while (line.find(")") < 0): - line += self.f.readline() - this_probe = line[line.find("probe ")+5:line.find("(")].strip() - this_probe_canon = self.provider.upper() + "_" + this_probe.replace("__","_").upper() - args = (line[line.find("(")+1:line.find(")")]) - args_string = "" - arg = "" - i = 0 - c = 0 - while (i < len(args)): - if (args[i:i+1] == ","): - args_string = ('%s %s,' % (args_string, arg.strip())) - c += 1 - typedefs = self.typedef_append (typedefs,this_probe,arg,c) - arg = "" - else: - arg = arg + args[i] - i += 1 - if (i != 0): - args_string = ('%s %s' % (args_string, arg.strip())) - if (len(args_string) == 0): - c = 0 - stap_str = "STAP_PROBE(provider,%s" % (this_probe) - else: - c += 1 - typedefs = self.typedef_append (typedefs,this_probe,arg,c) - stap_str = "STAP_PROBE%d(provider,%s" % (c,this_probe) - define_str = "#define %s(" % (this_probe_canon) - i = 1 - while (i <= c): - if (i != 1): - define_str += "," - define_str = define_str + "arg%s" % (i); - stap_str = stap_str + ",arg%s" % (i); - i += 1 - self.h.write ('/* %s (%s) */\n' % (this_probe_canon,args_string)) - self.h.write ('#define %s_ENABLED() 1\n' % this_probe_canon) - self.h.write (define_str + ") \\\n") - self.h.write (stap_str + ")\n\n") - elif (line.find("}") != -1 and have_provider): - have_provider = False - if (add_typedefs): - self.h.write (typedefs) - self.h.close() - - -def usage (): - print "Usage " + sys.argv[0] + " [--help] [-h | -G] -s File.d [-o File]" - -def help (): - usage() - print "Where -h builds a systemtap header file from the .d file" - print " -o specifies an explicit output file name," - print " The default for -G is file.o and -h is file.h" - print " -s specifies the name of the .d input file" - print " -G builds a stub file.o from file.d," - print " which is required by some packages that use dtrace." - sys.exit(1) - -def open_file (arg): - if (len (sys.argv) <= arg): - return False - try: - file = open(sys.argv[arg], 'r') - except IOError: - print (sys.argv[arg] + " not found") - sys.exit(1) - return file - - -######################################################################## -# main -######################################################################## - -if (len (sys.argv) < 2): - usage() - sys.exit(1) - -i = 1 -build_header = False -build_source = False -add_typedefs = False -filename = "" -while (i < len (sys.argv)): - if (sys.argv[i] == "-o"): - i += 1 - filename = sys.argv[i] - elif (sys.argv[i] == "-s"): - i += 1 - s_filename = sys.argv[i] - elif (sys.argv[i] == "-h"): - build_header = True - elif (sys.argv[i] == "-G"): - build_header = True - build_source = True - elif (sys.argv[i] == "--types"): - add_typedefs = True - elif (sys.argv[i] == "--help"): - help() - i += 1 -if (build_header == False and build_source == False): - usage() - sys.exit(1) - -if (filename == ""): - if (s_filename != ""): - (filename,ext) = os.path.splitext(s_filename) - filename = os.path.basename(filename) - else: - usage - sys.exit(1) -else: - (filename,ext) = os.path.splitext(filename) - -if (build_header): - providers = provider() - providers.generate(s_filename, filename + ".h", add_typedefs) -if (build_source): - (basename,ext) = os.path.splitext(s_filename) - basename = os.path.basename(basename) - (d,fn) = mkstemp(suffix=".c",prefix=basename) - f = open(fn,mode='w') - f.write("#include \"" + filename + ".h\"\nstatic __dtrace () {}\n") - f.close() - call(["gcc", "-fPIC", "-I.", "-g", "-c", fn, "-o", filename + ".o"], shell=False) - os.remove(fn) |