diff options
author | Frank Ch. Eigler <fche@elastic.org> | 2009-09-15 18:29:45 -0400 |
---|---|---|
committer | Frank Ch. Eigler <fche@elastic.org> | 2009-09-15 18:29:45 -0400 |
commit | da23eceb71cc70668ab9dfd80d318b3837703d9d (patch) | |
tree | dcfb85f50cf035213bde1836d2167ceca00c8205 /dtrace.in | |
parent | 2260f4e32eb4c0b4cc95e4bef8ccdc5dc66261af (diff) | |
parent | 24fcff20ed7a4a9f2b772c572db28ee8df49161f (diff) | |
download | systemtap-steved-da23eceb71cc70668ab9dfd80d318b3837703d9d.tar.gz systemtap-steved-da23eceb71cc70668ab9dfd80d318b3837703d9d.tar.xz systemtap-steved-da23eceb71cc70668ab9dfd80d318b3837703d9d.zip |
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
* 'master' of ssh://sources.redhat.com/git/systemtap: (34 commits)
Update the langref copyright notice
Fix some probe examples in the language reference
Remove automatic authorization of servers started by root as trusted signers.
docs: add abnormal termination section to PROCESSING
Remove unneeded header file
Get the module to sign from -p4's stdout
Move --unprivileged support news to the top.
Firther updates to NEWS regarding signing and unprivileged users.
Authorize new certificates created for servers started by root as authorized signers.
2009-09-14 Dave Brolley <brolley@redhat.com>
Allow remaining process.* probes for unprivileged users.
Use the sched_switch tracepoint if available.
PR10608: mark test cases untested once compilation failed
Make check.exp not sleep so much in test_installcheck.
Make tracepoints.exp test more efficient by running as one giant script.
Only test highest optimization for exelib.exp test.
Replace small exelib.exp testcases with one jumbo testcase.
Remove duplicate uprobe_derived_probe code
Add semaphores for use with the forthcoming sdt marker checks.
Add actual pc address to semantic error about inaccessible variables.
...
Conflicts:
tapsets.cxx
Diffstat (limited to 'dtrace.in')
-rwxr-xr-x | dtrace.in | 26 |
1 files changed, 24 insertions, 2 deletions
@@ -17,9 +17,17 @@ from subprocess import call from tempfile import mkstemp class provider: + semaphores_def = "\n" + # is the type a basic scalar type? + def basic_type(self, arg): + basic_types = [ "int","int*","long","long*","short","short int","unsigned long","char","char*","float","double" ] + split_arg = arg.rsplit(None,1) + return (split_arg[0].strip() in basic_types) & (arg.find("[") == -1) def typedef_append(self, typedefs,this_probe,arg,c): if (add_typedefs): split_arg = arg.rsplit(None,1) + if (self.basic_type(arg)): + return typedefs 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() + "; ") @@ -28,11 +36,16 @@ class provider: typedefs += ("typedef " + arg.strip() + type_name + "; ") typedefs += (type_name + type_name + "_v;\n") return typedefs + def semaphore_def_append(self, this_probe): + self.semaphores_def += "__extension__ long %s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\")));\n" % (this_probe) + def semaphore_def_write(self, file): + file.write(self.semaphores_def) 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#define STAP_HAS_SEMAPHORES 1\n\n") self.h.write("\n#include <sys/sdt.h>\n\n") in_comment = False typedefs = "" @@ -64,6 +77,7 @@ class provider: arg = "" i = 0 c = 0 + self.semaphore_def_append (this_probe) while (i < len(args)): if (args[i:i+1] == ","): args_string = ('%s %s,' % (args_string, arg.strip())) @@ -91,7 +105,8 @@ class provider: 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 %s_ENABLED() %s_semaphore\n' % (this_probe_canon,this_probe)) + self.h.write ("__extension__ extern long %s_semaphore __attribute__ ((unused)) __attribute__ ((section (\".probes\")));\n" % (this_probe)) self.h.write (define_str + ") \\\n") self.h.write (stap_str + ")\n\n") elif (line.find("}") != -1 and have_provider): @@ -187,12 +202,19 @@ if (build_header): providers.generate(s_filename, filename + h_ext, add_typedefs) elif (build_source): (basename,ext) = os.path.splitext(s_filename) + + # create for semaphore_def_write + providers = provider() + (d,fn) = mkstemp(suffix=".h") + providers.generate(s_filename, fn, add_typedefs) + os.remove(fn) + (d,fn) = mkstemp(suffix=".c") f = open(fn,mode='w') f.write("static __dtrace () {}\n") + providers.semaphore_def_write(f) f.close() call(["gcc", "-fPIC", "-I.", "-I@prefix@/include", "-g", "-c", fn, "-o", filename + ".o"], shell=False) os.remove(fn) if (use_cpp): os.remove(s_filename) - |