summaryrefslogtreecommitdiffstats
path: root/dtrace
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2009-07-15 15:16:54 +0200
committerMark Wielaard <mjw@redhat.com>2009-07-15 15:16:54 +0200
commite4aaabda45427a9b983fa2f01d172dfe5926adaa (patch)
tree3564c880b9383e1d181a7de11e3c93a14a88bd22 /dtrace
parent00b01a991cc4300f18c747853e85841d187b1fa4 (diff)
downloadsystemtap-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-xdtrace183
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)