summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdtrace.in18
-rw-r--r--tapsets.cxx7
2 files changed, 22 insertions, 3 deletions
diff --git a/dtrace.in b/dtrace.in
index c18f4efd..976ba0cf 100755
--- a/dtrace.in
+++ b/dtrace.in
@@ -154,6 +154,7 @@ i = 1
build_header = False
build_source = False
add_typedefs = False
+keep_temps = False
use_cpp = False
h_ext = '.h'
filename = ""
@@ -170,6 +171,8 @@ while (i < len (sys.argv)):
build_header = True
elif (sys.argv[i] == "-G"):
build_source = True
+ elif (sys.argv[i] == "-k"):
+ keep_temps = True
elif (sys.argv[i] == "--types"):
add_typedefs = True
elif (sys.argv[i] == "--help"):
@@ -209,7 +212,10 @@ elif (build_source):
providers = provider()
(d,fn) = mkstemp(suffix=".h")
providers.generate(s_filename, fn, add_typedefs)
- os.remove(fn)
+ if (not keep_temps):
+ os.remove(fn)
+ else:
+ print "header: " + fn
(d,fn) = mkstemp(suffix=".c")
f = open(fn,mode='w')
@@ -217,6 +223,12 @@ elif (build_source):
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 (not keep_temps):
+ os.remove(fn)
+ else:
+ print "source: " + fn
if (use_cpp):
- os.remove(s_filename)
+ if (not keep_temps):
+ os.remove(s_filename)
+ else:
+ print "cpp: " + s_filename
diff --git a/tapsets.cxx b/tapsets.cxx
index fdbddd9e..4433af3f 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -4601,6 +4601,10 @@ uprobe_derived_probe_group::emit_module_decls (systemtap_session& s)
s.op->newline() << "sup->sdt_sem_address = relocation + sups->sdt_sem_address;";
s.op->newline() << "(void) __access_process_vm (tsk, sup->sdt_sem_address, &sdt_semaphore, sizeof (sdt_semaphore), 0);";
s.op->newline() << "sdt_semaphore ++;";
+ s.op->newline() << "#ifdef DEBUG_UPROBES";
+ s.op->newline() << "_stp_dbug (__FUNCTION__,__LINE__, \"+semaphore %#x @ %#lx\\n\", sdt_semaphore, sup->sdt_sem_address);";
+ s.op->newline() << "#endif";
+
s.op->newline() << "(void) __access_process_vm (tsk, sup->sdt_sem_address, &sdt_semaphore, sizeof (sdt_semaphore), 1);";
// XXX: error handling in __access_process_vm!
// XXX: need to analyze possibility of race condition
@@ -4864,6 +4868,9 @@ uprobe_derived_probe_group::emit_module_exit (systemtap_session& s)
s.op->newline() << "if (tsk) {"; // just in case the thing exited while we weren't watching
s.op->newline(1) << "(void) __access_process_vm (tsk, sup->sdt_sem_address, &sdt_semaphore, sizeof (sdt_semaphore), 0);";
s.op->newline() << "sdt_semaphore --;";
+ s.op->newline() << "#ifdef DEBUG_UPROBES";
+ s.op->newline() << "_stp_dbug (__FUNCTION__,__LINE__, \"-semaphore %#x @ %#lx\\n\", sdt_semaphore, sup->sdt_sem_address);";
+ s.op->newline() << "#endif";
s.op->newline() << "(void) __access_process_vm (tsk, sup->sdt_sem_address, &sdt_semaphore, sizeof (sdt_semaphore), 1);";
// XXX: error handling in __access_process_vm!
// XXX: need to analyze possibility of race condition