summaryrefslogtreecommitdiffstats
path: root/gen-stapmark.h
diff options
context:
space:
mode:
Diffstat (limited to 'gen-stapmark.h')
-rwxr-xr-xgen-stapmark.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/gen-stapmark.h b/gen-stapmark.h
new file mode 100755
index 00000000..f7fb84d7
--- /dev/null
+++ b/gen-stapmark.h
@@ -0,0 +1,48 @@
+#! /usr/bin/perl
+
+sub bitset {
+ my $num = shift;
+ my $bit = shift;
+ return ($num & (1 << $bit));
+}
+
+sub gensn {
+ my $permutation = shift;
+ my $arity = shift;
+
+ my $SN = "";
+ for (0..$arity-1) { $SN .= bitset($permutation,$_) ? "S" : "N"; }
+
+ print "#define STAP_MARK_" . $SN . "(n,";
+ for (0..$arity-1) { if ($_) { print ",";}
+ print "a" . (($_)+1); }
+ print ") do { \\\n";
+ print " static void (*__systemtap_mark_##n##_" . $SN . ")(";
+ for (0..$arity-1) { if ($_) { print ",";}
+ print bitset($permutation,$_)
+ ? "const char *"
+ : "int64_t"; }
+ print "); \\\n";
+ print " if (unlikely (__systemtap_mark_##n##_" . $SN . ")) \\\n";
+ print " (void) (__systemtap_mark_##n##_" . $SN . "(";
+ for (0..$arity-1) { if ($_) { print ",";}
+ print "(a" . (($_)+1) . ")"; }
+ print ")); \\\n";
+ print "} while (0)\n\n";
+}
+
+sub permute {
+ my $arity = shift;
+ for (0 .. (1<<$arity)-1) {
+ &gensn ($_, $arity);
+ }
+}
+
+
+die "give me one number" unless $#ARGV == 0;
+
+print "/* Generated by '$0 @ARGV' on " . gmtime() . " */\n\n";
+
+for (1 .. $ARGV[0]) {
+ &permute($_);
+}