diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5e535be
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+SOURCES/systemtap-4.6.tar.gz
diff --git a/.systemtap.metadata b/.systemtap.metadata
new file mode 100644
index 0000000..dad6e4d
--- /dev/null
+++ b/.systemtap.metadata
@@ -0,0 +1 @@
+ecc45371b378fc3824a5547b02c030b4123d6769 SOURCES/systemtap-4.6.tar.gz
diff --git a/SOURCES/rhbz1972798.patch b/SOURCES/rhbz1972798.patch
new file mode 100644
index 0000000..e93607c
--- /dev/null
+++ b/SOURCES/rhbz1972798.patch
@@ -0,0 +1,19 @@
+commit 2c11a115bdbe41a7f064ccd32b41c76c5b7c516d
+Author: Martin Cermak <mcermak@redhat.com>
+Date:   Wed Dec 1 14:04:57 2021 +0100
+
+    tapset/linux/nfs.stp:  Fix rhbz1972798
+
+diff --git a/tapset/linux/nfs.stp b/tapset/linux/nfs.stp
+index 28f0b90ed..232289e3b 100644
+--- a/tapset/linux/nfs.stp
++++ b/tapset/linux/nfs.stp
+@@ -979,7 +979,7 @@ probe nfs.aop.readpages = kernel.function ("nfs_readpages") !,
+         ino = $mapping->host->i_ino
+ 
+         nr_pages = $nr_pages
+-        file = $filp
++        file = @choose_defined($filp, $file)
+ 
+         rpages = __nfs_rpages($mapping->host)
+         rsize  = __nfs_server_rsize($mapping->host)
diff --git a/SOURCES/rhbz2025054python3.patch b/SOURCES/rhbz2025054python3.patch
new file mode 100644
index 0000000..7f5f40c
--- /dev/null
+++ b/SOURCES/rhbz2025054python3.patch
@@ -0,0 +1,95 @@
+commit 241f53050f441808e673d19b42008779f555f484 (HEAD)
+Author: Frank Ch. Eigler <fche@redhat.com>
+Date:   Fri Nov 19 22:22:45 2021 -0500
+
+    configury: let python3 be python3
+    
+    Our baroque heuristics for identifying python2/3 under their various
+    historical aliases is showing its age.  On some modern distros,
+    /usr/bin/python is to be positively NOT used.  Fixing configure.ac
+    $PYTHON3 search to only look for python3, and not even consider
+    $PYTHON_UNKNOWN.  At some point we'll want to simplify further, and
+    get rid of python2 remnants.
+
+diff --git a/configure b/configure
+index 6d0d53992636..962323156181 100755
+--- a/configure
++++ b/configure
+@@ -9350,49 +9350,7 @@ fi
+ as_fn_append ac_configure_args " python='$PYTHON' pyexecdir='$pyexecdir'"
+ 
+ # Now let's try to find python version 3.
+-if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x3"; then
+-   # Extract the first word of "python", so it can be a program name with args.
+-set dummy python; ac_word=$2
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+-$as_echo_n "checking for $ac_word... " >&6; }
+-if ${ac_cv_path_PYTHON3+:} false; then :
+-  $as_echo_n "(cached) " >&6
+-else
+-  case $PYTHON3 in
+-  [\\/]* | ?:[\\/]*)
+-  ac_cv_path_PYTHON3="$PYTHON3" # Let the user override the test with a path.
+-  ;;
+-  *)
+-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+-for as_dir in $PATH
+-do
+-  IFS=$as_save_IFS
+-  test -z "$as_dir" && as_dir=.
+-    for ac_exec_ext in '' $ac_executable_extensions; do
+-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+-    ac_cv_path_PYTHON3="$as_dir/$ac_word$ac_exec_ext"
+-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+-    break 2
+-  fi
+-done
+-  done
+-IFS=$as_save_IFS
+-
+-  ;;
+-esac
+-fi
+-PYTHON3=$ac_cv_path_PYTHON3
+-if test -n "$PYTHON3"; then
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON3" >&5
+-$as_echo "$PYTHON3" >&6; }
+-else
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-
+-
+-else
+-   for ac_prog in python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0
++for ac_prog in python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0
+ do
+   # Extract the first word of "$ac_prog", so it can be a program name with args.
+ set dummy $ac_prog; ac_word=$2
+@@ -9438,7 +9396,6 @@ fi
+ done
+ test -n "$PYTHON3" || PYTHON3=":"
+ 
+-fi
+ python3_basename=$(basename "$PYTHON3")
+ 
+ cat >>confdefs.h <<_ACEOF
+diff --git a/configure.ac b/configure.ac
+index b0a823604ca3..d1b1247637bb 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -88,12 +88,8 @@ fi
+ AS_VAR_APPEND([ac_configure_args], [" python='$PYTHON' pyexecdir='$pyexecdir'"])
+ 
+ # Now let's try to find python version 3.
+-if test "x$PYTHON_UNKNOWN" != "xno" -a "x$ac_cv_python_unknown_version" = "x3"; then
+-   AC_PATH_PROG([PYTHON3], [python])
+-else
+-   AC_PATH_PROGS([PYTHON3],
+-		 [python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0], [:])
+-fi
++AC_PATH_PROGS([PYTHON3],
++              	 [python3 python3.7 python3.6 python3.5 python3.4 python3.3 python3.2 python3.1 python3.0], [:])
+ python3_basename=$(basename "$PYTHON3")
+ AC_DEFINE_UNQUOTED([PYTHON3_BASENAME], "${python3_basename}",
+ 		   [Base name of the python3 interpreter binary.])
diff --git a/SOURCES/rhbz2027683.patch b/SOURCES/rhbz2027683.patch
new file mode 100644
index 0000000..9ca6b52
--- /dev/null
+++ b/SOURCES/rhbz2027683.patch
@@ -0,0 +1,29 @@
+commit 39b5233271b997811632871e1b6620a89b384fe8
+Author: Martin Cermak <mcermak@redhat.com>
+Date:   Thu Jan 20 18:18:00 2022 +0100
+
+    Fix python probing rhbz2027683
+
+diff --git a/tapset/python.stp b/tapset/python.stp
+new file mode 100644
+index 000000000..b5d06fcd9
+--- /dev/null
++++ b/tapset/python.stp
+@@ -0,0 +1,17 @@
++/* Systemtap tapset to make it easier to trace Python */
++
++/*
++   Define python.function.entry/return:
++*/
++probe python.function.entry = process("/usr/lib*/libpython*.so*").mark("function__entry")
++{
++    filename = user_string($arg1);
++    funcname = user_string($arg2);
++    lineno = $arg3;
++}
++probe python.function.return = process("/usr/lib*/libpython*.so*").mark("function__return")
++{
++    filename = user_string($arg1);
++    funcname = user_string($arg2);
++    lineno = $arg3;
++}
diff --git a/SOURCES/rhbz2039207.patch b/SOURCES/rhbz2039207.patch
new file mode 100644
index 0000000..a966d16
--- /dev/null
+++ b/SOURCES/rhbz2039207.patch
@@ -0,0 +1,80 @@
+commit 5abded54b
+Author: Stan Cox <scox@redhat.com>
+Date:   Fri Jan 28 15:28:27 2022 -0500
+
+    Attempt to access string in userspace if kernel access fails
+    
+    Add kernel_or_user_string_quoted(_utf16 _utf32) tapsets to handle
+    situations where a kernelspace access was assumed but string is in
+    userspace.
+
+diff --git a/tapset/linux/conversions.stp b/tapset/linux/conversions.stp
+index 82f535f6c..d3d3a0b5a 100644
+--- a/tapset/linux/conversions.stp
++++ b/tapset/linux/conversions.stp
+@@ -72,6 +72,17 @@ function kernel_string_quoted:string (addr:long)
+ 		    (unsigned long)(uintptr_t)STAP_ARG_addr);
+ %}
+ 
++/**
++ * sfunction kernel_or_user_string_quoted - Retrieves and quotes string from kernel or user memory
++ *
++ * @addr: the kernel or user memory address to retrieve the string from
++ *
++ * Similar to kernel_string_quoted except user memory is a fallback method
++ */
++function kernel_or_user_string_quoted:string (addr:long) {
++  try { return string_quoted(kernel_string(addr)) } catch { return string_quoted(user_string(addr)) }
++}
++
+ /**
+  * sfunction kernel_string_n - Retrieves string of given length from kernel memory
+  * @addr: The kernel address to retrieve the string from
+@@ -160,6 +171,16 @@ function kernel_string_quoted_utf32:string (addr:long) {
+   try { return string_quoted(kernel_string_utf32(addr)) } catch { return sprintf("0x%x", addr) }
+ }
+ 
++/**
++ * sfunction kernel_or_user_string_quoted_utf32 - Retrieves and quotes UTF-32 string from kernel or user memory
++ *
++ * @addr: the kernel or user memory address to retrieve the string from
++ *
++ * Similar to kernel_string_quoted_utf32 except user memory is a fallback method
++ */
++function kernel_or_user_string_quoted_utf32:string (addr:long) {
++ try { return string_quoted(kernel_string_utf32(addr)) } catch { return string_quoted(user_string_utf32(addr)) }
++}
+ 
+ /**
+  * sfunction kernel_string_utf16 - Retrieves UTF-16 string from kernel memory
+@@ -242,6 +263,17 @@ function kernel_string_quoted_utf16:string (addr:long) {
+   try { return string_quoted(kernel_string_utf16(addr)) } catch { return sprintf("0x%x", addr) }
+ }
+ 
++/**
++ * sfunction kernel_or_user_string_quoted_utf16 - Retrieves and quotes UTF-16 string from kernel or user memory
++ *
++ * @addr: the kernel or user memory address to retrieve the string from
++ *
++ * Similar to kernel_string_quoted_utf16 except uses user memory as a fallback method
++ */
++function kernel_or_user_string_quoted_utf16:string (addr:long) {
++ try { return string_quoted(kernel_string_utf16(addr)) } catch { return string_quoted(user_string_utf16(addr)) }
++}
++
+ 
+ /**
+  * sfunction kernel_long - Retrieves a long value stored in kernel memory
+diff --git a/tapsets.cxx b/tapsets.cxx
+index 8fc5146e2..8b8f1cad5 100644
+--- a/tapsets.cxx
++++ b/tapsets.cxx
+@@ -3757,7 +3757,7 @@ dwarf_pretty_print::print_chars (Dwarf_Die* start_type, target_symbol* e,
+       return false;
+     }
+ 
+-  string function = userspace_p ? "user_string_quoted" : "kernel_string_quoted";
++  string function = userspace_p ? "user_string_quoted" : "kernel_or_user_string_quoted";
+   Dwarf_Word size = (Dwarf_Word) -1;
+   dwarf_formudata (dwarf_attr_integrate (&type, DW_AT_byte_size, &attr), &size);
+   switch (size)
diff --git a/SOURCES/rhbz2041526.patch b/SOURCES/rhbz2041526.patch
new file mode 100644
index 0000000..c387e01
--- /dev/null
+++ b/SOURCES/rhbz2041526.patch
@@ -0,0 +1,167 @@
+diff --git a/tapset/linux/ioscheduler.stp b/tapset/linux/ioscheduler.stp
+index abb24dac9..3096a73ea 100644
+--- a/tapset/linux/ioscheduler.stp
++++ b/tapset/linux/ioscheduler.stp
+@@ -11,7 +11,9 @@
+ // </tapsetdescription>
+ %{
+ #include <linux/blkdev.h>
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5,14,0)
+ #include <linux/elevator.h>
++#endif
+ %}
+ 
+ /**
+@@ -76,7 +78,8 @@ probe ioscheduler.elv_completed_request
+ 	elevator_name = kernel_string(
+ 		@choose_defined($q->elevator->type->elevator_name,
+ 			@choose_defined($q->elevator->elevator_type->elevator_name,
+-                                        $q->elevator->elevator_name)), "")
++                                        @choose_defined($q->elevator->elevator_name,
++                                                        0))), "")
+ 	if($rq == 0)  {
+ 		disk_major = -1
+ 		disk_minor = -1
+@@ -114,7 +117,8 @@ probe ioscheduler.elv_add_request.kp =
+ 	elevator_name = kernel_string(
+ 		@choose_defined($q->elevator->type->elevator_name,
+ 			@choose_defined($q->elevator->elevator_type->elevator_name,
+-                                        $q->elevator->elevator_name)), "")
++                                        @choose_defined($q->elevator->elevator_name,
++                                                        0))), "")
+ 	q = $q
+ 	if($rq == 0)  {
+ 		disk_major = -1
+@@ -152,7 +156,8 @@ probe ioscheduler.elv_add_request.tp = kernel.trace("block_rq_insert") ?
+         elevator_name = kernel_string(
+ 			@choose_defined($rq->q->elevator->type->elevator_name,
+ 				@choose_defined($rq->q->elevator->elevator_type->elevator_name,
+-                                                $rq->q->elevator->elevator_name)), "")
++                                                @choose_defined($rq->q->elevator->elevator_name,
++                                                                0))), "")
+ 	rq = $rq
+ 
+ 	if ($rq == 0 || $rq->rq_disk ==0) {
+@@ -201,7 +206,8 @@ probe ioscheduler_trace.elv_completed_request
+         elevator_name = kernel_string(
+ 			@choose_defined($rq->q->elevator->type->elevator_name,
+ 				@choose_defined($rq->q->elevator->elevator_type->elevator_name,
+-                                                $rq->q->elevator->elevator_name)), "")
++                                                @choose_defined($rq->q->elevator->elevator_name,
++                                                                0))), "")
+ 
+ 	rq = $rq
+ 
+@@ -237,7 +243,8 @@ probe ioscheduler_trace.elv_issue_request
+         elevator_name = kernel_string(
+ 			@choose_defined($rq->q->elevator->type->elevator_name,
+ 				@choose_defined($rq->q->elevator->elevator_type->elevator_name,
+-                                                $rq->q->elevator->elevator_name)), "")
++                                                @choose_defined($rq->q->elevator->elevator_name,
++                                                                0))), "")
+ 	rq = $rq
+ 
+ 	if ($rq == 0 || $rq->rq_disk ==0) {
+@@ -272,7 +279,8 @@ probe ioscheduler_trace.elv_requeue_request
+         elevator_name = kernel_string(
+ 			@choose_defined($rq->q->elevator->type->elevator_name,
+ 				@choose_defined($rq->q->elevator->elevator_type->elevator_name,
+-                                                $rq->q->elevator->elevator_name)), "")
++                                                @choose_defined($rq->q->elevator->elevator_name,
++                                                                0))), "")
+ 	rq = $rq
+ 
+ 	if ($rq == 0 || $rq->rq_disk ==0) {
+@@ -306,7 +314,8 @@ probe ioscheduler_trace.elv_abort_request
+         elevator_name = kernel_string(
+ 			@choose_defined($rq->q->elevator->type->elevator_name,
+ 				@choose_defined($rq->q->elevator->elevator_type->elevator_name,
+-                                                $rq->q->elevator->elevator_name)), "")
++                                                @choose_defined($rq->q->elevator->elevator_name,
++                                                                0))), "")
+ 	rq = $rq
+ 
+ 	if ($rq == 0 || $rq->rq_disk ==0) {
+@@ -364,6 +373,9 @@ probe ioscheduler_trace.unplug_timer = kernel.trace("block_unplug_timer") ?
+ 
+ function disk_major_from_request:long(var_q:long)
+ %{ /* pure */
++#ifndef _ELEVATOR_H
++        STAP_ERROR ("unsupported (PR28634)");
++#else
+ 	struct request_queue *q = (struct request_queue *)((uintptr_t)STAP_ARG_var_q);
+ 
+ 	/* We need to make sure there isn't a deref hazard here when
+@@ -382,10 +394,14 @@ function disk_major_from_request:long(var_q:long)
+ 		STAP_RETVALUE = kread(&(rq_disk->major));
+ 	}
+ 	CATCH_DEREF_FAULT();
++#endif
+ %}
+ 
+ function disk_minor_from_request:long(var_q:long)
+ %{ /* pure */
++#ifndef _ELEVATOR_H
++        STAP_ERROR ("unsupported (PR28634)");
++#else
+ 	struct request_queue *q = (struct request_queue *)((uintptr_t)STAP_ARG_var_q);
+ 
+ 	/* We need to make sure there isn't a deref hazard here when
+@@ -404,4 +420,6 @@ function disk_minor_from_request:long(var_q:long)
+ 		STAP_RETVALUE = kread(&(rq_disk->first_minor));
+ 	}
+ 	CATCH_DEREF_FAULT();
++#endif
+ %}
++
+diff --git a/testsuite/systemtap.examples/io/iostat-scsi.stp b/testsuite/systemtap.examples/io/iostat-scsi.stp
+index 6b1bf19ea..3faf32fe9 100755
+--- a/testsuite/systemtap.examples/io/iostat-scsi.stp
++++ b/testsuite/systemtap.examples/io/iostat-scsi.stp
+@@ -26,6 +26,7 @@ probe module("sd_mod").function("sd_init_command") !,
+ %(kernel_v >= "2.6.31" %?
+ %{
+ #include <linux/blkdev.h>
++#include <linux/blk-mq.h>
+ %}
+ 
+ function get_nr_sectors:long(rq:long)
+@@ -47,13 +48,24 @@ probe sd_prep_fn = module("sd_mod").function("sd_prep_fn") !,
+   _cmd_flags = $rq->cmd_flags
+ }
+ 
++function scsi_cmd_to_rq(scmd) {
++    return scmd - @cast_module_sizeof("kernel", "request")
++}
++
+ probe sd_init_command = module("sd_mod").function("sd_init_command") !,
+ 			kernel.function("sd_init_command")
+ {
+-  device = kernel_string(@choose_defined($cmd, $SCpnt)->request->rq_disk->disk_name)
+-  sector_size = @choose_defined($cmd, $SCpnt)->device->sector_size
+-  nr_sectors = get_nr_sectors(@choose_defined($cmd, $SCpnt)->request)
+-  _cmd_flags = @choose_defined($cmd, $SCpnt)->request->cmd_flags
++    sector_size = @choose_defined($cmd, $SCpnt)->device->sector_size
++    # Kernel commits aa8e25e5006aac52c943c84e9056ab488630ee19 2266a2def97ce11ec979b6c58a1b637a16eca7dd
++    if (@defined(@choose_defined($cmd, $SCpnt)->request)) {
++      device = kernel_string(@choose_defined($cmd, $SCpnt)->request->rq_disk->disk_name)
++      nr_sectors = get_nr_sectors(@choose_defined($cmd, $SCpnt)->request)
++      _cmd_flags = @choose_defined($cmd, $SCpnt)->request->cmd_flags
++    } else {
++      device = kernel_string(@cast(scsi_cmd_to_rq(@choose_defined($cmd, $SCpnt)), "request", "kernel")->rq_disk->disk_name)
++      nr_sectors = get_nr_sectors(scsi_cmd_to_rq(@choose_defined($cmd, $SCpnt)))
++      _cmd_flags = @cast(scsi_cmd_to_rq(@choose_defined($cmd, $SCpnt)), "request", "kernel")->cmd_flags
++  }
+ }
+ 
+ probe sd_prep_fn !, sd_init_command
+@@ -71,7 +83,8 @@ probe sd_prep_fn !, sd_init_command
+ probe module("st").function("st_do_scsi").call !,
+       kernel.function("st_do_scsi").call
+ {
+-  device = kernel_string($STp->disk->disk_name)
++  # Kernel commit 45938335d0a9773d65a82a7ca722bb76e4b997a8
++  device = kernel_string(@choose_defined($STp->disk->disk_name, $STp->name))
+   devices[device] = 1
+   if ($direction)
+     writes[device] <<< $bytes
diff --git a/SOURCES/rhbz2047256.patch b/SOURCES/rhbz2047256.patch
new file mode 100644
index 0000000..08260cd
--- /dev/null
+++ b/SOURCES/rhbz2047256.patch
@@ -0,0 +1,179 @@
+diff --git a/analysis.cxx b/analysis.cxx
+index a7a579e..d0d6a4f 100644
+--- a/analysis.cxx
++++ b/analysis.cxx
+@@ -7,6 +7,7 @@
+ // later version.
+ 
+ #include "config.h"
++#include "session.h"
+ 
+ #ifdef HAVE_DYNINST
+ 
+@@ -46,6 +47,8 @@ analysis::analysis(string name)
+ 	char *name_str = strdup(name.c_str());
+ 	sts = NULL;
+ 	co = NULL;
++	SymtabAPI::Symtab *symTab;
++	bool isParsable;
+ 
+ 	// Use cached information if available
+ 	if (cached_info.find(name) != cached_info.end()) {
+@@ -56,6 +59,9 @@ analysis::analysis(string name)
+ 
+ 	// Not not seen before
+ 	// Create a new binary code object from the filename argument
++	isParsable = SymtabAPI::Symtab::openFile(symTab, name_str);
++	if(!isParsable) goto cleanup;
++
+ 	sts = new SymtabCodeSource(name_str);
+ 	if(!sts) goto cleanup;
+ 
+@@ -143,39 +149,40 @@ static const MachRegister dyninst_register_64[] = {
+ static const MachRegister dyninst_register_32[1]; // No 32-bit support
+ 
+ #elif defined(__powerpc__)
++/* For ppc64 still use the ppc32 register names */
+ static const MachRegister dyninst_register_64[] = {
+-    ppc64::r0,
+-    ppc64::r1,
+-    ppc64::r2,
+-    ppc64::r3,
+-    ppc64::r4,
+-    ppc64::r5,
+-    ppc64::r6,
+-    ppc64::r7,
+-    ppc64::r8,
+-    ppc64::r9,
+-    ppc64::r10,
+-    ppc64::r11,
+-    ppc64::r12,
+-    ppc64::r13,
+-    ppc64::r14,
+-    ppc64::r15,
+-    ppc64::r16,
+-    ppc64::r17,
+-    ppc64::r18,
+-    ppc64::r19,
+-    ppc64::r20,
+-    ppc64::r21,
+-    ppc64::r22,
+-    ppc64::r23,
+-    ppc64::r24,
+-    ppc64::r25,
+-    ppc64::r26,
+-    ppc64::r27,
+-    ppc64::r28,
+-    ppc64::r29,
+-    ppc64::r30,
+-    ppc64::r31
++    ppc32::r0,
++    ppc32::r1,
++    ppc32::r2,
++    ppc32::r3,
++    ppc32::r4,
++    ppc32::r5,
++    ppc32::r6,
++    ppc32::r7,
++    ppc32::r8,
++    ppc32::r9,
++    ppc32::r10,
++    ppc32::r11,
++    ppc32::r12,
++    ppc32::r13,
++    ppc32::r14,
++    ppc32::r15,
++    ppc32::r16,
++    ppc32::r17,
++    ppc32::r18,
++    ppc32::r19,
++    ppc32::r20,
++    ppc32::r21,
++    ppc32::r22,
++    ppc32::r23,
++    ppc32::r24,
++    ppc32::r25,
++    ppc32::r26,
++    ppc32::r27,
++    ppc32::r28,
++    ppc32::r29,
++    ppc32::r30,
++    ppc32::r31
+ };
+ 
+ static const MachRegister dyninst_register_32[] = {
+@@ -218,14 +225,26 @@ static const MachRegister dyninst_register_32[] = {
+ typedef map<string, LivenessAnalyzer*> precomputed_liveness;
+ static precomputed_liveness cached_liveness;
+ 
+-int liveness(string executable,
++int liveness(systemtap_session& s,
++	     target_symbol *e,
++	     string executable,
+ 	     Dwarf_Addr addr,
+ 	     location_context ctx)
+ {
++  try{
++	// Doing this inside a try/catch because dyninst may require
++	// too much memory to parse the binary.
+ 	// should cache the executable names like the other things
+ 	analysis func_to_analyze(executable);
+ 	MachRegister r;
+ 
++	// Punt if unsuccessful in parsing binary
++	if (!func_to_analyze.co){
++		s.print_warning(_F("liveness analysis unable to parse binary %s",
++				   executable.c_str()), e->tok);
++		return 0;
++	}
++
+ 	// Determine whether 32-bit or 64-bit code as the register names are different in dyninst
+ 	int reg_width = func_to_analyze.co->cs()->getAddressWidth();
+ 
+@@ -282,6 +301,11 @@ int liveness(string executable,
+ 	bool used;
+ 	la->query(iloc, LivenessAnalyzer::Before, r, used);
+ 	return (used ? 1 : -1);
++  } catch (std::bad_alloc & ex){
++    s.print_warning(_F("unable to allocate memory for liveness analysis of %s",
++				   executable.c_str()), e->tok);
++    return 0;
++  }
+ }
+ 
+ #endif // HAVE_DYNINST
+diff --git a/analysis.h b/analysis.h
+index 9b6d115..6bea675 100644
+--- a/analysis.h
++++ b/analysis.h
+@@ -17,13 +17,15 @@
+ 
+ #ifdef HAVE_DYNINST
+ 
+-extern int liveness(std::string executable,
++extern int liveness(systemtap_session& s,
++		    target_symbol *e,
++		    std::string executable,
+ 		    Dwarf_Addr location,
+ 		    location_context ctx);
+ 
+ #else
+ 
+-#define liveness(executable, location, var) (0)
++#define liveness(session, target, executable, location, var) (0)
+ 
+ #endif // HAVE_DYNINST
+ #endif // ANALYSIS_H
+diff --git a/tapsets.cxx b/tapsets.cxx
+index 60794bb..8fc5146 100644
+--- a/tapsets.cxx
++++ b/tapsets.cxx
+@@ -4732,7 +4732,7 @@ dwarf_var_expanding_visitor::visit_target_symbol (target_symbol *e)
+ 
+       // Now that have location information check if change to variable has any effect
+       if (lvalue) {
+-	      if (liveness(q.dw.mod_info->elf_path, addr, ctx) < 0) {
++	      if (liveness(q.sess, e, q.dw.mod_info->elf_path, addr, ctx) < 0) {
+ 		      q.sess.print_warning(_F("write at %p will have no effect",
+ 					      (void *)addr), e->tok);
+ 	      }
diff --git a/SOURCES/rhbz2058908.patch b/SOURCES/rhbz2058908.patch
new file mode 100644
index 0000000..fcfbc0e
--- /dev/null
+++ b/SOURCES/rhbz2058908.patch
@@ -0,0 +1,27 @@
+commit aa27023c941f88da383e8f2eeec2a81312243e6e
+Author: Frank Ch. Eigler <fche@redhat.com>
+Date:   Fri Mar 11 10:29:55 2022 -0500
+
+    sys/sdt.h: set x86-64 STAP_SDT_ASM_CONSTRAINT back to "nor"
+    
+    It turns out the kernel and some other sdt consumers haven't learned
+    how to use %xmm registers in sdt operands.  So under this duress, stap
+    will go back to the old school integer register set "nor" as a
+    default.  We'll revisit this in the future, though this egg might not
+    turn into a chicken.
+    
+    https://bugzilla.redhat.com/show_bug.cgi?id=2058908
+
+diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h
+index 48cb7263f..ca0162b4d 100644
+--- a/includes/sys/sdt.h
++++ b/includes/sys/sdt.h
+@@ -100,8 +100,6 @@
+ # ifndef STAP_SDT_ARG_CONSTRAINT
+ # if defined __powerpc__
+ # define STAP_SDT_ARG_CONSTRAINT        nZr
+-# elif defined __x86_64__
+-# define STAP_SDT_ARG_CONSTRAINT norx
+ # else
+ # define STAP_SDT_ARG_CONSTRAINT        nor
+ # endif
diff --git a/SOURCES/sdt-asm-glibc.patch b/SOURCES/sdt-asm-glibc.patch
new file mode 100644
index 0000000..0aa9261
--- /dev/null
+++ b/SOURCES/sdt-asm-glibc.patch
@@ -0,0 +1,154 @@
+commit ecab2afea46099b4e7dfd551462689224afdbe3a
+Author: Stan Cox <scox@redhat.com>
+Date:   Wed Dec 1 16:19:22 2021 -0500
+
+    Handle user supplied sdt probe argument template
+    
+    User supplied templates were erroneously removed by commit eaa15b047,
+    which complicated the template expansion. To do the above the
+    expansion of STAP_PROBE_ASM(provider, fooprobe,
+    STAP_PROBE_ASM_TEMPLATE(3)) adds an unused argument:
+    STAP_PROBE_ASM(provider, fooprobe, /*template expansion*/ "%[SDT..]..",
+    "use _SDT_ASM_TEMPLATE") A supplied template
+    STAP_PROBE_ASM(provider, fooprobe, "4@%rdx 8@%rax") is left alone.  If
+    the varargs has 2 args (the fake "use ..") then macro expansion
+    inserts the expanded string, otherwise "4@.." becomes an ascii op.
+
+diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h
+index 28d236d91..24d5e01c3 100644
+--- a/includes/sys/sdt.h
++++ b/includes/sys/sdt.h
+@@ -290,7 +290,7 @@ __extension__ extern unsigned long long __sdt_unsp;
+   _SDT_ASM_1(.purgem _SDT_TYPE_)					      \
+   _SDT_ASM_1(.purgem _SDT_TYPE)
+ 
+-#define _SDT_ASM_BODY(provider, name, pack_args, args)			      \
++#define _SDT_ASM_BODY(provider, name, pack_args, args, ...)		      \
+   _SDT_DEF_MACROS							      \
+   _SDT_ASM_1(990:	_SDT_NOP)					      \
+   _SDT_ASM_3(		.pushsection .note.stapsdt,_SDT_ASM_AUTOGROUP,"note") \
+@@ -417,9 +417,9 @@ __extension__ extern unsigned long long __sdt_unsp;
+    counted, so we don't have to worry about the behavior of macros
+    called without any arguments.  */
+ 
+-#ifdef SDT_USE_VARIADIC
+ #define _SDT_NARG(...) __SDT_NARG(__VA_ARGS__, 12,11,10,9,8,7,6,5,4,3,2,1,0)
+ #define __SDT_NARG(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12, N, ...) N
++#ifdef SDT_USE_VARIADIC
+ #define _SDT_PROBE_N(provider, name, N, ...) \
+   _SDT_PROBE(provider, name, N, (__VA_ARGS__))
+ #define STAP_PROBEV(provider, name, ...) \
+@@ -468,9 +468,15 @@ __extension__ extern unsigned long long __sdt_unsp;
+     Note that these can use operand templates like %0 or %[name],
+     and likewise they must write %%reg for a literal operand of %reg.  */
+ 
++#define _SDT_ASM_BODY_1(p,n,...) _SDT_ASM_BODY(p,n,_SDT_ASM_SUBSTR,(__VA_ARGS__))
++#define _SDT_ASM_BODY_2(p,n,...) _SDT_ASM_BODY(p,n,/*_SDT_ASM_STRING */,__VA_ARGS__)
++#define _SDT_ASM_BODY_N2(p,n,no,...) _SDT_ASM_BODY_ ## no(p,n,__VA_ARGS__)
++#define _SDT_ASM_BODY_N1(p,n,no,...) _SDT_ASM_BODY_N2(p,n,no,__VA_ARGS__)
++#define _SDT_ASM_BODY_N(p,n,...) _SDT_ASM_BODY_N1(p,n,_SDT_NARG(0, __VA_ARGS__),__VA_ARGS__)
++
+ #if __STDC_VERSION__ >= 199901L
+ # define STAP_PROBE_ASM(provider, name, ...)		\
+-  _SDT_ASM_BODY(provider, name, /*_SDT_ASM_STRING */, __VA_ARGS__)	\
++  _SDT_ASM_BODY_N(provider, name, __VA_ARGS__)					\
+   _SDT_ASM_BASE
+ # define STAP_PROBE_ASM_OPERANDS(n, ...) _SDT_ASM_OPERANDS_##n(__VA_ARGS__)
+ #else
+@@ -478,7 +484,7 @@ __extension__ extern unsigned long long __sdt_unsp;
+   _SDT_ASM_BODY(provider, name, /* _SDT_ASM_STRING */, (args))	\
+   _SDT_ASM_BASE
+ #endif
+-#define STAP_PROBE_ASM_TEMPLATE(n)	_SDT_ASM_TEMPLATE_##n
++#define STAP_PROBE_ASM_TEMPLATE(n) _SDT_ASM_TEMPLATE_##n,"use _SDT_ASM_TEMPLATE_"
+ 
+ 
+ /* DTrace compatible macro names.  */
+diff --git a/testsuite/systemtap.base/sdt_casm.c b/testsuite/systemtap.base/sdt_casm.c
+index 1cff23c5f..9b357086c 100644
+--- a/testsuite/systemtap.base/sdt_casm.c
++++ b/testsuite/systemtap.base/sdt_casm.c
+@@ -3,6 +3,7 @@
+ int main()
+ {
+     int x = 42;
++    int y = 43;
+     __asm__ __volatile__ (
+             STAP_PROBE_ASM(testsuite, probe0, STAP_PROBE_ASM_TEMPLATE(0))
+             );
+@@ -10,5 +11,9 @@ int main()
+             STAP_PROBE_ASM(testsuite, probe1, STAP_PROBE_ASM_TEMPLATE(1))
+             :: STAP_PROBE_ASM_OPERANDS(1, x)
+             );
++    // Create a template to test explicit template support
++    __asm__ __volatile__ (
++			  STAP_PROBE_ASM(testsuite, probe2, -4@%[ARG1] -4@%[ARG2])
++			  :: [ARG1] "rm" (x), [ARG2] "rm" (y));
+     return 0;
+ }
+diff --git a/testsuite/systemtap.base/sdt_casm.exp b/testsuite/systemtap.base/sdt_casm.exp
+index 5791cb2b9..0cd1cb517 100644
+--- a/testsuite/systemtap.base/sdt_casm.exp
++++ b/testsuite/systemtap.base/sdt_casm.exp
+@@ -18,7 +18,8 @@ proc cleanup_handler { verbose } {
+ 
+ set script $srcdir/$subdir/$test.stp
+ set ::result_string {PASS: probe0
+-PASS: probe1}
++PASS: probe1
++PASS: probe2}
+ 
+ set asm_flags [sdt_includes]
+ set asm_flags "$asm_flags additional_flags=-std=c99"
+diff --git a/testsuite/systemtap.base/sdt_casm.stp b/testsuite/systemtap.base/sdt_casm.stp
+index 4f2539c93..530a79175 100644
+--- a/testsuite/systemtap.base/sdt_casm.stp
++++ b/testsuite/systemtap.base/sdt_casm.stp
+@@ -10,3 +10,11 @@ probe process.mark("probe1")
+     else
+         printf("FAIL: %s (%d != 42)\n", $$name, $arg1)
+ }
++
++probe process.mark("probe2") 
++{
++    if ($arg1 == 42 && $arg2 == 43)
++        printf("PASS: %s\n", $$name)
++    else
++        printf("FAIL: %s (%d/%d != 42/43)\n", $$name, $arg1, $arg2)
++}
+commit 209b5a19c (HEAD -> master, origin/master, origin/HEAD)
+Author: Stan Cox <scox@redhat.com>
+Date:   Tue Dec 7 09:55:01 2021 -0500
+
+    sys/sdt.h fp constraints: aarch64, s390
+    
+    Remove float constraints as per commit 1d3653936 but for aarch64 and s390.
+
+commit 1d3653936 (HEAD -> master, origin/master, origin/HEAD)
+Author: Frank Ch. Eigler <fche@redhat.com>
+Date:   Mon Dec 6 12:06:06 2021 -0500
+
+    sys/sdt.h fp constraints cont'd, x86-64 edition
+    
+    It appears that various versions of gcc continue to show signs of
+    confusion at our newly offered asm-operand alternatives for floating
+    point sdt.h marker parameters.
+    
+    e.g., https://bugzilla.redhat.com/show_bug.cgi?id=2028798
+    
+    We may need to restore previous constraints broadly, forcing the
+    compiler to plop floating point parameters into integer storage.
+
+--- a/includes/sys/sdt.h
++++ b/includes/sys/sdt.h
+@@ -102,9 +102,5 @@
+ # define STAP_SDT_ARG_CONSTRAINT        nZr
+ # elif defined __x86_64__
+-# define STAP_SDT_ARG_CONSTRAINT norfxy
+-# elif defined __aarch64__
+-# define STAP_SDT_ARG_CONSTRAINT norw
+-# elif defined __s390__ || defined __s390x__
+-# define STAP_SDT_ARG_CONSTRAINT        norf
++# define STAP_SDT_ARG_CONSTRAINT norx
+ # else
+ # define STAP_SDT_ARG_CONSTRAINT        nor
diff --git a/SPECS/systemtap.spec b/SPECS/systemtap.spec
new file mode 100644
index 0000000..ac916a1
--- /dev/null
+++ b/SPECS/systemtap.spec
@@ -0,0 +1,1576 @@
+%{!?with_sqlite: %global with_sqlite 0%{?fedora} >= 17 || 0%{?rhel} >= 7}
+# prefer prebuilt docs
+%{!?with_docs: %global with_docs 0}
+%{!?with_htmldocs: %global with_htmldocs 0}
+%{!?with_monitor: %global with_monitor 1}
+# crash is not available
+%ifarch ppc ppc64 %{sparc} %{mips} %{riscv}
+%{!?with_crash: %global with_crash 0}
+%else
+%{!?with_crash: %global with_crash 1}
+%endif
+%{!?with_rpm: %global with_rpm 1}
+%{!?elfutils_version: %global elfutils_version 0.179}
+%{!?with_boost: %global with_boost 0}
+%ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64
+%{!?with_dyninst: %global with_dyninst 0%{?fedora} >= 18 || 0%{?rhel} >= 7}
+%else
+%{!?with_dyninst: %global with_dyninst 0}
+%endif
+%{!?with_bpf: %global with_bpf 0%{?fedora} >= 22 || 0%{?rhel} >= 8}
+%{!?with_systemd: %global with_systemd 0%{?fedora} >= 19 || 0%{?rhel} >= 7}
+%{!?with_emacsvim: %global with_emacsvim 0%{?fedora} >= 19 || 0%{?rhel} >= 7}
+%{!?with_java: %global with_java 0%{?fedora} >= 19 || 0%{?rhel} >= 7}
+%{!?with_debuginfod: %global with_debuginfod 0%{?fedora} >= 25 || 0%{?rhel} >= 7}
+%{!?with_virthost: %global with_virthost 0%{?fedora} >= 19 || 0%{?rhel} >= 7}
+%{!?with_virtguest: %global with_virtguest 1}
+%{!?with_dracut: %global with_dracut 0%{?fedora} >= 19 || 0%{?rhel} >= 6}
+%ifarch x86_64
+%{!?with_mokutil: %global with_mokutil 0%{?fedora} >= 18 || 0%{?rhel} >= 7}
+%{!?with_openssl: %global with_openssl 0%{?fedora} >= 18 || 0%{?rhel} >= 7}
+%else
+%{!?with_mokutil: %global with_mokutil 0}
+%{!?with_openssl: %global with_openssl 0}
+%endif
+%{!?with_pyparsing: %global with_pyparsing 0%{?fedora} >= 18 || 0%{?rhel} >= 7}
+%{!?with_python3: %global with_python3 0%{?fedora} >= 23 || 0%{?rhel} > 7}
+%{!?with_python2_probes: %global with_python2_probes (0%{?fedora} <= 28 && 0%{?rhel} <= 7)}
+%{!?with_python3_probes: %global with_python3_probes (0%{?fedora} >= 23 || 0%{?rhel} > 7)}
+%{!?with_httpd: %global with_httpd 0}
+%{!?with_specific_python: %global with_specific_python 0%{?fedora} >= 31}
+%{!?with_sysusers: %global with_sysusers 0%{?fedora} >= 32 || 0%{?rhel} >= 9}
+
+# Virt is supported on these arches, even on el7, but it's not in core EL7
+%if 0%{?rhel} <= 7
+%ifarch ppc64le aarch64
+%global with_virthost 0
+%endif
+%endif
+
+%if 0%{?fedora} >= 18 || 0%{?rhel} >= 6
+   %define initdir %{_initddir}
+%else
+   # RHEL5 doesn't know _initddir
+   %define initdir %{_initrddir}
+%endif
+
+%if %{with_virtguest}
+   %if 0%{?fedora} >= 18 || 0%{?rhel} >= 7
+      %define udevrulesdir /usr/lib/udev/rules.d
+   %else
+      %if 0%{?rhel} >= 6
+         %define udevrulesdir /lib/udev/rules.d
+      %else
+         # RHEL5
+         %define udevrulesdir /etc/udev/rules.d
+      %endif
+   %endif
+%endif
+
+%if 0%{?fedora} >= 19 || 0%{?rhel} >= 7
+   %define dracutstap %{_prefix}/lib/dracut/modules.d/99stap
+%else
+   %define dracutstap %{_prefix}/share/dracut/modules.d/99stap
+%endif
+
+%if 0%{?rhel} == 6 || 0%{?rhel} == 7
+    %define dracutbindir /sbin
+%else
+    %define dracutbindir %{_bindir}
+%endif
+
+%if 0%{?rhel} == 6
+    %{!?_rpmmacrodir: %define _rpmmacrodir /etc/rpm/}
+%else
+    %{!?_rpmmacrodir: %define _rpmmacrodir %{_rpmconfigdir}/macros.d}
+%endif
+
+# To avoid testsuite/*/*.stp has shebang which doesn't start with '/'
+%define __brp_mangle_shebangs_exclude_from .stp$
+
+%define _systemtap_runtime_preinstall \
+# See systemd-sysusers(8) sysusers.d(5)\
+\
+g     stapusr  156\
+g     stapsys  157\
+g     stapdev  158
+
+%define _systemtap_server_preinstall \
+# See systemd-sysusers(8) sysusers.d(5)\
+\
+g     stap-server  -\
+u     stap-server  -      "systemtap compiler server"   /var/lib/stap-server   /sbin/nologin\
+m     stap-server stap-server
+
+
+%define _systemtap_testsuite_preinstall \
+# See systemd-sysusers(8) sysusers.d(5)\
+\
+u     stapusr  -          "systemtap testsuite user"    /   /sbin/nologin\
+u     stapsys  -          "systemtap testsuite user"    /   /sbin/nologin\
+u     stapdev  -          "systemtap testsuite user"    /   /sbin/nologin\
+m     stapusr  stapusr\
+m     stapsys  stapusr\
+m     stapsys  stapsys\
+m     stapdev  stapusr\
+m     stapdev  stapdev
+
+
+Name: systemtap
+Version: 4.6
+Release: 12%{?release_override}%{?dist}
+# for version, see also configure.ac
+
+
+# Packaging abstract:
+#
+# systemtap              empty req:-client req:-devel
+# systemtap-server       /usr/bin/stap-server*, req:-devel
+# systemtap-devel        /usr/bin/stap, runtime, tapset, req:kernel-devel
+# systemtap-runtime      /usr/bin/staprun, /usr/bin/stapsh, /usr/bin/stapdyn
+# systemtap-client       /usr/bin/stap, samples, docs, tapset(bonus), req:-runtime
+# systemtap-initscript   /etc/init.d/systemtap, dracut module, req:systemtap
+# systemtap-sdt-devel    /usr/include/sys/sdt.h /usr/bin/dtrace
+# systemtap-testsuite    /usr/share/systemtap/testsuite*, req:systemtap, req:sdt-devel
+# systemtap-runtime-java libHelperSDT.so, HelperSDT.jar, stapbm, req:-runtime
+# systemtap-runtime-virthost  /usr/bin/stapvirt, req:libvirt req:libxml2
+# systemtap-runtime-virtguest udev rules, init scripts/systemd service, req:-runtime
+# systemtap-runtime-python2 HelperSDT python2 module, req:-runtime
+# systemtap-runtime-python3 HelperSDT python3 module, req:-runtime
+#
+# Typical scenarios:
+#
+# stap-client:           systemtap-client
+# stap-server:           systemtap-server
+# local user:            systemtap
+#
+# Unusual scenarios:
+#
+# intermediary stap-client for --remote:       systemtap-client (-runtime unused)
+# intermediary stap-server for --use-server:   systemtap-server (-devel unused)
+
+Summary: Programmable system-wide instrumentation system
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz
+
+Patch1: rhbz2025054python3.patch
+Patch2: rhbz1972798.patch
+Patch3: sdt-asm-glibc.patch
+Patch4: rhbz2041526.patch
+Patch5: rhbz2027683.patch
+Patch6: rhbz2047256.patch
+Patch7: rhbz2039207.patch
+Patch8: rhbz2058908.patch
+
+# Build*
+BuildRequires: make
+BuildRequires: gcc-c++
+BuildRequires: cpio
+BuildRequires: gettext-devel
+BuildRequires: pkgconfig(nss)
+BuildRequires: pkgconfig(avahi-client)
+%if %{with_debuginfod}
+BuildRequires: pkgconfig(libdebuginfod)
+%endif
+%if %{with_dyninst}
+BuildRequires: dyninst-devel >= 10.0
+BuildRequires: pkgconfig(libselinux)
+%endif
+%if %{with_sqlite}
+BuildRequires: sqlite-devel > 3.7
+%endif
+%if %{with_monitor}
+BuildRequires: pkgconfig(json-c)
+BuildRequires: pkgconfig(ncurses)
+%endif
+%if %{with_systemd}
+BuildRequires: systemd
+%endif
+# Needed for libstd++ < 4.0, without <tr1/memory>
+%if %{with_boost}
+BuildRequires: boost-devel
+%endif
+%if %{with_crash}
+BuildRequires: crash-devel zlib-devel
+%endif
+%if %{with_rpm}
+BuildRequires: rpm-devel
+%endif
+BuildRequires: elfutils-devel >= %{elfutils_version}
+%if %{with_docs}
+BuildRequires: /usr/bin/latex /usr/bin/dvips /usr/bin/ps2pdf
+%if 0%{?fedora} >= 18 || 0%{?rhel} >= 7
+BuildRequires: tex(fullpage.sty) tex(fancybox.sty) tex(bchr7t.tfm) tex(graphicx.sty)
+%endif
+%if %{with_htmldocs}
+# On F10, xmlto's pdf support was broken off into a sub-package,
+# called 'xmlto-tex'.  To avoid a specific F10 BuildReq, we'll do a
+# file-based buildreq on '/usr/share/xmlto/format/fo/pdf'.
+BuildRequires: xmlto /usr/share/xmlto/format/fo/pdf
+%endif
+%endif
+%if %{with_emacsvim}
+# for _emacs_sitelispdir macros etc.
+BuildRequires: emacs
+%endif
+%if %{with_java}
+BuildRequires: java-devel
+%endif
+%if %{with_virthost}
+# BuildRequires: libvirt-devel >= 1.0.2
+BuildRequires: pkgconfig(libvirt)
+BuildRequires: pkgconfig(libxml-2.0)
+%endif
+BuildRequires: readline-devel
+%if 0%{?rhel} <= 5
+BuildRequires: pkgconfig(ncurses)
+%endif
+%if %{with_python2_probes}
+BuildRequires: python2-devel
+%if 0%{?fedora} >= 1
+BuildRequires: python2-setuptools
+%else
+BuildRequires: python-setuptools
+%endif
+%endif
+%if %{with_python3}
+BuildRequires: python3
+%endif
+%if %{with_python3_probes}
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+%endif
+%if %{with_specific_python}
+BuildRequires: /usr/bin/pathfix.py
+%endif
+
+%if %{with_httpd}
+BuildRequires: libmicrohttpd-devel
+BuildRequires: libuuid-devel
+%endif
+%if %{with_sysusers}
+BuildRequires:  systemd-rpm-macros
+%endif
+
+
+# Install requirements
+Requires: systemtap-client = %{version}-%{release}
+Requires: systemtap-devel = %{version}-%{release}
+
+%description
+SystemTap is an instrumentation system for systems running Linux.
+Developers can write instrumentation scripts to collect data on
+the operation of the system.  The base systemtap package contains/requires
+the components needed to locally develop and execute systemtap scripts.
+
+# ------------------------------------------------------------------------
+
+%package server
+Summary: Instrumentation System Server
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap-devel = %{version}-%{release}
+Conflicts: systemtap-devel < %{version}-%{release}
+Conflicts: systemtap-runtime < %{version}-%{release}
+Conflicts: systemtap-client < %{version}-%{release}
+Requires: nss coreutils
+Requires: zip unzip
+Requires(pre): shadow-utils
+BuildRequires: nss-devel avahi-devel
+%if %{with_openssl}
+Requires: openssl
+%endif
+%if %{with_systemd}
+Requires: systemd
+%else
+Requires(post): chkconfig
+Requires(preun): chkconfig
+Requires(preun): initscripts
+Requires(postun): initscripts
+%endif
+
+%description server
+This is the remote script compilation server component of systemtap.
+It announces itself to nearby clients with avahi (if available), and
+compiles systemtap scripts to kernel objects on their demand.
+
+
+%package devel
+Summary: Programmable system-wide instrumentation system - development headers, tools
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+
+%if 0%{?rhel} >= 8 || 0%{?fedora} >= 20
+Recommends: (kernel-debug-devel if kernel-debug)
+Recommends: (kernel-devel if kernel)
+%else
+Requires: kernel-devel-uname-r
+%endif
+
+Requires: gcc make
+# for compiling --runtime=dyninst sripts, need elfutils headers, bz1930973
+Requires: elfutils-devel >= %{elfutils_version}
+
+Conflicts: systemtap-client < %{version}-%{release}
+Conflicts: systemtap-server < %{version}-%{release}
+Conflicts: systemtap-runtime < %{version}-%{release}
+# Suggest: kernel-debuginfo
+
+%description devel
+This package contains the components needed to compile a systemtap
+script from source form into executable (.ko) forms.  It may be
+installed on a self-contained developer workstation (along with the
+systemtap-client and systemtap-runtime packages), or on a dedicated
+remote server (alongside the systemtap-server package).  It includes
+a copy of the standard tapset library and the runtime library C files.
+
+
+%package runtime
+Summary: Programmable system-wide instrumentation system - runtime
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires(pre): shadow-utils
+Conflicts: systemtap-devel < %{version}-%{release}
+Conflicts: systemtap-server < %{version}-%{release}
+Conflicts: systemtap-client < %{version}-%{release}
+
+%description runtime
+SystemTap runtime contains the components needed to execute
+a systemtap script that was already compiled into a module
+using a local or remote systemtap-devel installation.
+
+
+%package client
+Summary: Programmable system-wide instrumentation system - client
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: zip unzip
+Requires: systemtap-runtime = %{version}-%{release}
+Requires: coreutils grep sed unzip zip
+Requires: openssh-clients
+Conflicts: systemtap-devel < %{version}-%{release}
+Conflicts: systemtap-server < %{version}-%{release}
+Conflicts: systemtap-runtime < %{version}-%{release}
+%if %{with_mokutil}
+Requires: mokutil
+%endif
+
+%description client
+This package contains/requires the components needed to develop
+systemtap scripts, and compile them using a local systemtap-devel
+or a remote systemtap-server installation, then run them using a
+local or remote systemtap-runtime.  It includes script samples and
+documentation, and a copy of the tapset library for reference.
+
+
+%package initscript
+Summary: Systemtap Initscripts
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap = %{version}-%{release}
+%if %{with_systemd}
+Requires: systemd
+%else
+Requires(post): chkconfig
+Requires(preun): chkconfig
+Requires(preun): initscripts
+Requires(postun): initscripts
+%endif
+
+%description initscript
+This package includes a SysVinit script to launch selected systemtap
+scripts at system startup, along with a dracut module for early
+boot-time probing if supported.
+
+
+%package sdt-devel
+Summary: Static probe support tools
+License: GPLv2+ and Public Domain
+URL: http://sourceware.org/systemtap/
+%if %{with_pyparsing}
+%if %{with_python3}
+Requires: python3-pyparsing
+%else
+%if 0%{?rhel} >= 7
+Requires: pyparsing
+%else
+Requires: python2-pyparsing
+%endif
+%endif
+%endif
+
+%description sdt-devel
+This package includes the <sys/sdt.h> header file used for static
+instrumentation compiled into userspace programs and libraries, along
+with the optional dtrace-compatibility preprocessor to process related
+.d files into tracing-macro-laden .h headers.
+
+
+%package testsuite
+Summary: Instrumentation System Testsuite
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap = %{version}-%{release}
+Requires: systemtap-sdt-devel = %{version}-%{release}
+Requires: systemtap-server = %{version}-%{release}
+Requires: dejagnu which elfutils grep nc
+%if %{with_debuginfod}
+Requires: elfutils-debuginfod
+%endif
+# work around fedora ci gating kvetching about i686<->x86-64 conflicts
+%ifarch x86_64
+Conflicts: systemtap-testsuite = %{version}-%{release}.i686
+%endif
+%ifarch i686
+Conflicts: systemtap-testsuite = %{version}-%{release}.x86_64
+%endif
+Requires: gcc gcc-c++ make glibc-devel
+# testsuite/systemtap.base/ptrace.exp needs strace
+Requires: strace
+# testsuite/systemtap.base/ipaddr.exp needs nc. Unfortunately, the rpm
+# that provides nc has changed over time (from 'nc' to
+# 'nmap-ncat'). So, we'll do a file-based require.
+Requires: /usr/bin/nc
+%ifnarch ia64 ppc64le aarch64
+%if 0%{?fedora} >= 21 || 0%{?rhel} >= 8
+# no prelink
+%else
+Requires: prelink
+%endif
+%endif
+# testsuite/systemtap.server/client.exp needs avahi
+Requires: avahi
+%if %{with_crash}
+# testsuite/systemtap.base/crash.exp needs crash
+Requires: crash
+%endif
+%if %{with_java}
+Requires: systemtap-runtime-java = %{version}-%{release}
+%endif
+%if %{with_python2_probes}
+Requires: systemtap-runtime-python2 = %{version}-%{release}
+%endif
+%if %{with_python3_probes}
+Requires: systemtap-runtime-python3 = %{version}-%{release}
+%endif
+%ifarch x86_64
+%if 0%{?rhel} >= 8 || 0%{?fedora} >= 20
+# fweimer, personal correspondence
+Recommends: glibc-devel(x86-32)
+%else
+Requires: /usr/lib/libc.so
+%endif
+# ... and /usr/lib/libgcc_s.so.*
+# ... and /usr/lib/libstdc++.so.*
+%endif
+%if 0%{?fedora} >= 18
+Requires: stress
+%endif
+# The following "meta" files for the systemtap examples run "perf":
+#   testsuite/systemtap.examples/hw_watch_addr.meta
+#   testsuite/systemtap.examples/memory/hw_watch_sym.meta
+Requires: perf
+
+%description testsuite
+This package includes the dejagnu-based systemtap stress self-testing
+suite.  This may be used by system administrators to thoroughly check
+systemtap on the current system.
+
+
+%if %{with_java}
+%package runtime-java
+Summary: Systemtap Java Runtime Support
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap-runtime = %{version}-%{release}
+# work around fedora ci gating kvetching about i686<->x86-64 conflicts
+%ifarch x86_64
+Conflicts: systemtap-runtime = %{version}-%{release}.i686
+%endif
+%ifarch i686
+Conflicts: systemtap-runtime = %{version}-%{release}.x86_64
+%endif
+Requires: byteman > 2.0
+Requires: iproute
+Requires: java-devel
+
+%description runtime-java
+This package includes support files needed to run systemtap scripts
+that probe Java processes running on the OpenJDK runtimes using Byteman.
+%endif
+
+%if %{with_python2_probes}
+%package runtime-python2
+Summary: Systemtap Python 2 Runtime Support
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap-runtime = %{version}-%{release}
+
+%description runtime-python2
+This package includes support files needed to run systemtap scripts
+that probe python 2 processes.
+%endif
+
+%if %{with_python3_probes}
+%package runtime-python3
+Summary: Systemtap Python 3 Runtime Support
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap-runtime = %{version}-%{release}
+
+%if ! (%{with_python2_probes})
+# Provide an clean upgrade path when the python2 package is removed
+Obsoletes: %{name}-runtime-python2 < %{version}-%{release}
+%endif
+
+%description runtime-python3
+This package includes support files needed to run systemtap scripts
+that probe python 3 processes.
+%endif
+
+%if %{with_python3_probes}
+%package exporter
+Summary: Systemtap-prometheus interoperation mechanism
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap-runtime = %{version}-%{release}
+
+%description exporter
+This package includes files for a systemd service that manages
+systemtap sessions and relays prometheus metrics from the sessions
+to remote requesters on demand.
+%endif
+
+%if %{with_virthost}
+%package runtime-virthost
+Summary: Systemtap Cross-VM Instrumentation - host
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+# only require libvirt-libs really
+#Requires: libvirt >= 1.0.2
+Requires: libxml2
+
+%description runtime-virthost
+This package includes the components required to run systemtap scripts
+inside a libvirt-managed domain from the host without using a network
+connection.
+%endif
+
+%if %{with_virtguest}
+%package runtime-virtguest
+Summary: Systemtap Cross-VM Instrumentation - guest
+License: GPLv2+
+URL: http://sourceware.org/systemtap/
+Requires: systemtap-runtime = %{version}-%{release}
+%if %{with_systemd}
+Requires(post): findutils coreutils
+Requires(preun): grep coreutils
+Requires(postun): grep coreutils
+%else
+Requires(post): chkconfig initscripts
+Requires(preun): chkconfig initscripts
+Requires(postun): initscripts
+%endif
+
+%description runtime-virtguest
+This package installs the services necessary on a virtual machine for a
+systemtap-runtime-virthost machine to execute systemtap scripts.
+%endif
+
+# ------------------------------------------------------------------------
+
+%prep
+%setup -q
+
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+
+%build
+
+# Enable/disable the dyninst pure-userspace backend
+%if %{with_dyninst}
+%global dyninst_config --with-dyninst
+%else
+%global dyninst_config --without-dyninst
+%endif
+
+# Enable/disable the sqlite coverage testing support
+%if %{with_sqlite}
+%global sqlite_config --enable-sqlite
+%else
+%global sqlite_config --disable-sqlite
+%endif
+
+%if %{with_debuginfod}
+%global debuginfod_config --with-debuginfod
+%else
+%global debuginfod_config --without-debuginfod
+%endif
+
+
+# Enable/disable the crash extension
+%if %{with_crash}
+%global crash_config --enable-crash
+%else
+%global crash_config --disable-crash
+%endif
+
+# Enable/disable the code to find and suggest needed rpms
+%if %{with_rpm}
+%global rpm_config --with-rpm
+%else
+%global rpm_config --without-rpm
+%endif
+
+%if %{with_docs}
+%if %{with_htmldocs}
+%global docs_config --enable-docs --enable-htmldocs
+%else
+%global docs_config --enable-docs --disable-htmldocs
+%endif
+%else
+%global docs_config --enable-docs=prebuilt
+%endif
+
+%if %{with_java}
+%global java_config --with-java=%{_jvmdir}/java
+%else
+%global java_config --without-java
+%endif
+
+%if %{with_python3}
+%global python3_config --with-python3
+%else
+%global python3_config --without-python3
+%endif
+%if %{with_python2_probes}
+%global python2_probes_config --with-python2-probes
+%else
+%global python2_probes_config --without-python2-probes
+%endif
+%if %{with_python3_probes}
+%global python3_probes_config --with-python3-probes
+%else
+%global python3_probes_config --without-python3-probes
+%endif
+
+%if %{with_virthost}
+%global virt_config --enable-virt
+%else
+%global virt_config --disable-virt
+%endif
+
+%if %{with_dracut}
+%global dracut_config --with-dracutstap=%{dracutstap} --with-dracutbindir=%{dracutbindir}
+%else
+%global dracut_config %{nil}
+%endif
+
+%if %{with_httpd}
+%global httpd_config --enable-httpd
+%else
+%global httpd_config --disable-httpd
+%endif
+
+%if %{with_bpf}
+%global bpf_config --with-bpf
+%else
+%global bpf_config --without-bpf
+%endif
+
+# We don't ship compileworthy python code, just oddball samples
+%global py_auto_byte_compile 0
+
+%configure %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} %{debuginfod_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}"
+make %{?_smp_mflags} V=1
+
+
+%install
+make DESTDIR=$RPM_BUILD_ROOT install
+%find_lang %{name}
+for dir in $(ls -1d $RPM_BUILD_ROOT%{_mandir}/{??,??_??}) ; do
+    dir=$(echo $dir | sed -e "s|^$RPM_BUILD_ROOT||")
+    lang=$(basename $dir)
+    echo "%%lang($lang) $dir/man*/*" >> %{name}.lang
+done
+
+%if %{with_sysusers}
+mkdir -p %{buildroot}%{_sysusersdir}
+echo '%_systemtap_runtime_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-runtime.conf
+echo '%_systemtap_server_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-server.conf
+echo '%_systemtap_testsuite_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-testsuite.conf
+%endif
+
+
+ln -s %{_datadir}/systemtap/examples
+
+# Fix paths in the example scripts.
+find $RPM_BUILD_ROOT%{_datadir}/systemtap/examples -type f -name '*.stp' -print0 | xargs -0 sed -i -r -e '1s@^#!.+stap@#!%{_bindir}/stap@'
+
+# To make rpmlint happy, remove any .gitignore files in the testsuite.
+find testsuite -type f -name '.gitignore' -print0 | xargs -0 rm -f
+
+# Because "make install" may install staprun with whatever mode, the
+# post-processing programs rpmbuild runs won't be able to read it.
+# So, we change permissions so that they can read it.  We'll set the
+# permissions back to 04110 in the %files section below.
+chmod 755 $RPM_BUILD_ROOT%{_bindir}/staprun
+
+#install the useful stap-prep script
+install -c -m 755 stap-prep $RPM_BUILD_ROOT%{_bindir}/stap-prep
+
+# Copy over the testsuite
+cp -rp testsuite $RPM_BUILD_ROOT%{_datadir}/systemtap
+
+# We want the manuals in the special doc dir, not the generic doc install dir.
+# We build it in place and then move it away so it doesn't get installed
+# twice. rpm can specify itself where the (versioned) docs go with the
+# %doc directive.
+mkdir docs.installed
+mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/*.pdf docs.installed/
+%if %{with_docs}
+%if %{with_htmldocs}
+mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/tapsets docs.installed/
+mv $RPM_BUILD_ROOT%{_datadir}/doc/systemtap/SystemTap_Beginners_Guide docs.installed/
+%endif
+%endif
+
+install -D -m 644 macros.systemtap $RPM_BUILD_ROOT%{_rpmmacrodir}/macros.systemtap
+
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/stap-server
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/stap-server/.systemtap
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server
+touch $RPM_BUILD_ROOT%{_localstatedir}/log/stap-server/log
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/systemtap
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/systemtap
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d
+install -m 644 initscript/logrotate.stap-server $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/stap-server
+
+# If using systemd systemtap.service file, retain the old init script in %{_libexecdir} as a helper.
+%if %{with_systemd}
+mkdir -p $RPM_BUILD_ROOT%{_unitdir}
+touch $RPM_BUILD_ROOT%{_unitdir}/systemtap.service
+install -m 644 initscript/systemtap.service $RPM_BUILD_ROOT%{_unitdir}/systemtap.service
+mkdir -p $RPM_BUILD_ROOT%{_sbindir}
+install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{_sbindir}/systemtap-service
+%else
+mkdir -p $RPM_BUILD_ROOT%{initdir}
+install -m 755 initscript/systemtap $RPM_BUILD_ROOT%{initdir}
+mkdir -p $RPM_BUILD_ROOT%{_sbindir}
+ln -sf %{initdir}/systemtap $RPM_BUILD_ROOT%{_sbindir}/systemtap-service
+# TODO CHECK CORRECTNESS: symlink %{_sbindir}/systemtap-service to %{initdir}/systemtap
+%endif
+
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/conf.d
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/script.d
+install -m 644 initscript/config.systemtap $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/config
+
+%if %{with_systemd}
+mkdir -p $RPM_BUILD_ROOT%{_unitdir}
+touch $RPM_BUILD_ROOT%{_unitdir}/stap-server.service
+install -m 644 stap-server.service $RPM_BUILD_ROOT%{_unitdir}/stap-server.service
+mkdir -p $RPM_BUILD_ROOT%{_tmpfilesdir}
+install -m 644 stap-server.conf $RPM_BUILD_ROOT%{_tmpfilesdir}/stap-server.conf
+%else
+install -m 755 initscript/stap-server $RPM_BUILD_ROOT%{initdir}
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/stap-server/conf.d
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
+install -m 644 initscript/config.stap-server $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/stap-server
+%endif
+
+%if %{with_emacsvim}
+mkdir -p $RPM_BUILD_ROOT%{_emacs_sitelispdir}
+install -p -m 644 emacs/systemtap-mode.el* $RPM_BUILD_ROOT%{_emacs_sitelispdir}
+mkdir -p $RPM_BUILD_ROOT%{_emacs_sitestartdir}
+install -p -m 644 emacs/systemtap-init.el $RPM_BUILD_ROOT%{_emacs_sitestartdir}/systemtap-init.el
+for subdir in ftdetect ftplugin indent syntax
+do
+    mkdir -p $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/$subdir
+    install -p -m 644 vim/$subdir/*.vim $RPM_BUILD_ROOT%{_datadir}/vim/vimfiles/$subdir
+done
+%endif
+
+%if %{with_virtguest}
+   mkdir -p $RPM_BUILD_ROOT%{udevrulesdir}
+   %if %{with_systemd}
+      install -p -m 644 staprun/guest/99-stapsh.rules $RPM_BUILD_ROOT%{udevrulesdir}
+      mkdir -p $RPM_BUILD_ROOT%{_unitdir}
+      install -p -m 644 staprun/guest/stapsh@.service $RPM_BUILD_ROOT%{_unitdir}
+   %else
+      install -p -m 644 staprun/guest/99-stapsh-init.rules $RPM_BUILD_ROOT%{udevrulesdir}
+      install -p -m 755 staprun/guest/stapshd $RPM_BUILD_ROOT%{initdir}
+      mkdir -p $RPM_BUILD_ROOT%{_libexecdir}/systemtap
+      install -p -m 755 staprun/guest/stapsh-daemon $RPM_BUILD_ROOT%{_libexecdir}/systemtap
+      mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules
+      # Technically, this is only needed for RHEL5, in which the MODULE_ALIAS is missing, but
+      # it does no harm in RHEL6 as well
+      install -p -m 755 staprun/guest/virtio_console.modules $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules
+   %endif
+%endif
+
+%if %{with_dracut}
+   mkdir -p $RPM_BUILD_ROOT%{dracutstap}
+   install -p -m 755 initscript/99stap/module-setup.sh $RPM_BUILD_ROOT%{dracutstap}
+   install -p -m 755 initscript/99stap/install $RPM_BUILD_ROOT%{dracutstap}
+   install -p -m 755 initscript/99stap/check $RPM_BUILD_ROOT%{dracutstap}
+   install -p -m 755 initscript/99stap/start-staprun.sh $RPM_BUILD_ROOT%{dracutstap}
+   touch $RPM_BUILD_ROOT%{dracutstap}/params.conf
+%endif
+
+%if %{with_specific_python}
+# Some files got ambiguous python shebangs, we fix them after everything else is done
+pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/*
+%endif
+
+%pre runtime
+%if %{with_sysusers}
+echo '%_systemtap_runtime_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-runtime.conf -
+%else
+getent group stapusr >/dev/null || groupadd -f -g 156 -r stapusr
+getent group stapsys >/dev/null || groupadd -f -g 157 -r stapsys
+getent group stapdev >/dev/null || groupadd -f -g 158 -r stapdev
+%endif
+exit 0
+
+%pre server
+%if %{with_sysusers}
+echo '%_systemtap_server_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-server.conf -
+%else
+getent group stap-server >/dev/null || groupadd -f -g 155 -r stap-server
+getent passwd stap-server >/dev/null || \
+  useradd -c "Systemtap Compile Server" -u 155 -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server 2>/dev/null || \
+  useradd -c "Systemtap Compile Server" -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server
+%endif
+exit 0
+
+%pre testsuite
+%if %{with_sysusers}
+echo '%_systemtap_testsuite_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-testsuite.conf -
+%else
+getent passwd stapusr >/dev/null || \
+    useradd -c "Systemtap 'stapusr' User" -g stapusr -r -s /sbin/nologin stapusr
+getent passwd stapsys >/dev/null || \
+    useradd -c "Systemtap 'stapsys' User" -g stapsys -G stapusr -r -s /sbin/nologin stapsys
+getent passwd stapdev >/dev/null || \
+    useradd -c "Systemtap 'stapdev' User" -g stapdev -G stapusr -r -s /sbin/nologin stapdev
+%endif
+exit 0
+
+%post server
+
+# We have some duplication between the %files listings for the
+# ~stap-server directories and the explicit mkdir/chown/chmod bits
+# here.  Part of the reason may be that a preexisting stap-server
+# account may well be placed somewhere other than
+# %{_localstatedir}/lib/stap-server, but we'd like their permissions
+# set similarly.
+
+test -e ~stap-server && chmod 750 ~stap-server
+
+if [ ! -f ~stap-server/.systemtap/rc ]; then
+  mkdir -p ~stap-server/.systemtap
+  chown stap-server:stap-server ~stap-server/.systemtap
+  # PR16276: guess at a reasonable number for a default --rlimit-nproc
+  numcpu=`/usr/bin/getconf _NPROCESSORS_ONLN`
+  if [ -z "$numcpu" -o "$numcpu" -lt 1 ]; then numcpu=1; fi
+  nproc=`expr $numcpu \* 30`
+  echo "--rlimit-as=614400000 --rlimit-cpu=60 --rlimit-nproc=$nproc --rlimit-stack=1024000 --rlimit-fsize=51200000" > ~stap-server/.systemtap/rc
+  chown stap-server:stap-server ~stap-server/.systemtap/rc
+fi
+
+test -e %{_localstatedir}/log/stap-server/log || {
+     touch %{_localstatedir}/log/stap-server/log
+     chmod 644 %{_localstatedir}/log/stap-server/log
+     chown stap-server:stap-server %{_localstatedir}/log/stap-server/log
+}
+# Prepare the service
+%if %{with_systemd}
+     # Note, Fedora policy doesn't allow network services enabled by default
+     # /bin/systemctl enable stap-server.service >/dev/null 2>&1 || :
+     /bin/systemd-tmpfiles --create %{_tmpfilesdir}/stap-server.conf >/dev/null 2>&1 || :
+%else
+    /sbin/chkconfig --add stap-server
+%endif
+exit 0
+
+%triggerin client -- systemtap-server
+if test -e ~stap-server/.systemtap/ssl/server/stap.cert; then
+   # echo Authorizing ssl-peer/trusted-signer certificate for local systemtap-server
+   %{_libexecdir}/systemtap/stap-authorize-cert ~stap-server/.systemtap/ssl/server/stap.cert %{_sysconfdir}/systemtap/ssl/client >/dev/null
+   %{_libexecdir}/systemtap/stap-authorize-cert ~stap-server/.systemtap/ssl/server/stap.cert %{_sysconfdir}/systemtap/staprun >/dev/null
+fi
+exit 0
+# XXX: corresponding %triggerun?
+
+%preun server
+# Check that this is the actual deinstallation of the package, as opposed to
+# just removing the old package on upgrade.
+if [ $1 = 0 ] ; then
+    %if %{with_systemd}
+       /bin/systemctl --no-reload disable stap-server.service >/dev/null 2>&1 || :
+       /bin/systemctl stop stap-server.service >/dev/null 2>&1 || :
+    %else
+        /sbin/service stap-server stop >/dev/null 2>&1
+        /sbin/chkconfig --del stap-server
+    %endif
+fi
+exit 0
+
+%postun server
+# Check whether this is an upgrade of the package.
+# If so, restart the service if it's running
+if [ "$1" -ge "1" ] ; then
+    %if %{with_systemd}
+        /bin/systemctl condrestart stap-server.service >/dev/null 2>&1 || :
+    %else
+        /sbin/service stap-server condrestart >/dev/null 2>&1 || :
+    %endif
+fi
+exit 0
+
+%post initscript
+%if %{with_systemd}
+    /bin/systemctl enable systemtap.service >/dev/null 2>&1 || :
+%else
+    /sbin/chkconfig --add systemtap
+%endif
+exit 0
+
+%preun initscript
+# Check that this is the actual deinstallation of the package, as opposed to
+# just removing the old package on upgrade.
+if [ $1 = 0 ] ; then
+    %if %{with_systemd}
+        /bin/systemctl --no-reload disable systemtap.service >/dev/null 2>&1 || :
+        /bin/systemctl stop systemtap.service >/dev/null 2>&1 || :
+    %else
+        /sbin/service systemtap stop >/dev/null 2>&1
+        /sbin/chkconfig --del systemtap
+    %endif
+fi
+exit 0
+
+%postun initscript
+# Check whether this is an upgrade of the package.
+# If so, restart the service if it's running
+if [ "$1" -ge "1" ] ; then
+    %if %{with_systemd}
+        /bin/systemctl condrestart systemtap.service >/dev/null 2>&1 || :
+    %else
+        /sbin/service systemtap condrestart >/dev/null 2>&1 || :
+    %endif
+fi
+exit 0
+
+%post runtime-virtguest
+%if %{with_systemd}
+   # Start services if there are ports present
+   if [ -d /dev/virtio-ports ]; then
+      (find /dev/virtio-ports -iname 'org.systemtap.stapsh.[0-9]*' -type l \
+         | xargs -n 1 basename \
+         | xargs -n 1 -I {} /bin/systemctl start stapsh@{}.service) >/dev/null 2>&1 || :
+   fi
+%else
+   /sbin/chkconfig --add stapshd
+   /sbin/chkconfig stapshd on
+   /sbin/service stapshd start >/dev/null 2>&1 || :
+%endif
+exit 0
+
+%preun runtime-virtguest
+# Stop service if this is an uninstall rather than an upgrade
+if [ $1 = 0 ]; then
+   %if %{with_systemd}
+      # We need to stop all stapsh services. Because they are instantiated from
+      # a template service file, we can't simply call disable. We need to find
+      # all the running ones and stop them all individually
+      for service in `/bin/systemctl --full | grep stapsh@ | cut -d ' ' -f 1`; do
+         /bin/systemctl stop $service >/dev/null 2>&1 || :
+      done
+   %else
+      /sbin/service stapshd stop >/dev/null 2>&1
+      /sbin/chkconfig --del stapshd
+   %endif
+fi
+exit 0
+
+%postun runtime-virtguest
+# Restart service if this is an upgrade rather than an uninstall
+if [ "$1" -ge "1" ]; then
+   %if %{with_systemd}
+      # We need to restart all stapsh services. Because they are instantiated from
+      # a template service file, we can't simply call restart. We need to find
+      # all the running ones and restart them all individually
+      for service in `/bin/systemctl --full | grep stapsh@ | cut -d ' ' -f 1`; do
+         /bin/systemctl condrestart $service >/dev/null 2>&1 || :
+      done
+   %else
+      /sbin/service stapshd condrestart >/dev/null 2>&1
+   %endif
+fi
+exit 0
+
+%if %{with_python3_probes}
+%if %{with_systemd}
+%preun exporter
+if [ $1 = 0 ] ; then
+  /bin/systemctl stop stap-exporter.service >/dev/null 2>&1 || :
+  /bin/systemctl disable stap-exporter.service >/dev/null 2>&1 || :
+fi
+exit 0
+
+%postun exporter
+# Restart service if this is an upgrade rather than an uninstall
+if [ "$1" -ge "1" ]; then
+   /bin/systemctl condrestart stap-exporter >/dev/null 2>&1 || :
+fi
+exit 0
+%endif
+%endif
+
+%post
+# Remove any previously-built uprobes.ko materials
+(make -C %{_datadir}/systemtap/runtime/uprobes clean) >/dev/null 2>&1 || true
+(/sbin/rmmod uprobes) >/dev/null 2>&1 || true
+
+%preun
+# Ditto
+(make -C %{_datadir}/systemtap/runtime/uprobes clean) >/dev/null 2>&1 || true
+(/sbin/rmmod uprobes) >/dev/null 2>&1 || true
+
+# ------------------------------------------------------------------------
+
+%files
+# The main "systemtap" rpm doesn't include any files.
+
+%files server -f systemtap.lang
+%{_bindir}/stap-server
+%dir %{_libexecdir}/systemtap
+%{_libexecdir}/systemtap/stap-serverd
+%{_libexecdir}/systemtap/stap-start-server
+%{_libexecdir}/systemtap/stap-stop-server
+%{_libexecdir}/systemtap/stap-gen-cert
+%{_libexecdir}/systemtap/stap-sign-module
+%{_libexecdir}/systemtap/stap-authorize-cert
+%{_libexecdir}/systemtap/stap-env
+%{_mandir}/man7/error*
+%{_mandir}/man7/stappaths.7*
+%{_mandir}/man7/warning*
+%{_mandir}/man8/stap-server.8*
+%if %{with_systemd}
+%{_unitdir}/stap-server.service
+%{_tmpfilesdir}/stap-server.conf
+%else
+%{initdir}/stap-server
+%dir %{_sysconfdir}/stap-server/conf.d
+%config(noreplace) %{_sysconfdir}/sysconfig/stap-server
+%endif
+%config(noreplace) %{_sysconfdir}/logrotate.d/stap-server
+%dir %{_sysconfdir}/stap-server
+%dir %attr(0750,stap-server,stap-server) %{_localstatedir}/lib/stap-server
+%dir %attr(0700,stap-server,stap-server) %{_localstatedir}/lib/stap-server/.systemtap
+%dir %attr(0755,stap-server,stap-server) %{_localstatedir}/log/stap-server
+%ghost %config(noreplace) %attr(0644,stap-server,stap-server) %{_localstatedir}/log/stap-server/log
+%ghost %attr(0755,stap-server,stap-server) %{_localstatedir}/run/stap-server
+%doc README README.unprivileged AUTHORS NEWS 
+%{!?_licensedir:%global license %%doc}
+%license COPYING
+%if %{with_sysusers}
+%{_sysusersdir}/systemtap-server.conf
+%endif
+
+
+%files devel -f systemtap.lang
+%{_bindir}/stap
+%{_bindir}/stap-prep
+%{_bindir}/stap-report
+%dir %{_datadir}/systemtap
+%{_datadir}/systemtap/runtime
+%{_datadir}/systemtap/tapset
+%{_mandir}/man1/stap.1*
+%{_mandir}/man1/stap-prep.1*
+%{_mandir}/man1/stap-report.1*
+%{_mandir}/man7/error*
+%{_mandir}/man7/stappaths.7*
+%{_mandir}/man7/warning*
+%doc README README.unprivileged AUTHORS NEWS 
+%{!?_licensedir:%global license %%doc}
+%license COPYING
+%if %{with_java}
+%dir %{_libexecdir}/systemtap
+%{_libexecdir}/systemtap/libHelperSDT.so
+%endif
+%if %{with_emacsvim}
+%{_emacs_sitelispdir}/*.el*
+%{_emacs_sitestartdir}/systemtap-init.el
+%{_datadir}/vim/vimfiles/*/*.vim
+%endif
+# Notice that the stap-resolve-module-function.py file is used by
+# *both* the python2 and python3 subrpms.  Both subrpms use that same
+# python script to help list python probes.
+%if %{with_python3_probes} || %{with_python2_probes}
+%{_libexecdir}/systemtap/python/stap-resolve-module-function.py
+%exclude %{_libexecdir}/systemtap/python/stap-resolve-module-function.py?
+%endif
+
+
+%files runtime -f systemtap.lang
+%attr(4110,root,stapusr) %{_bindir}/staprun
+%{_bindir}/stapsh
+%{_bindir}/stap-merge
+%{_bindir}/stap-report
+%if %{with_dyninst}
+%{_bindir}/stapdyn
+%endif
+%if %{with_bpf}
+%{_bindir}/stapbpf
+%endif
+%dir %{_libexecdir}/systemtap
+%{_libexecdir}/systemtap/stapio
+%{_libexecdir}/systemtap/stap-authorize-cert
+%if %{with_crash}
+%dir %{_libdir}/systemtap
+%{_libdir}/systemtap/staplog.so*
+%endif
+%{_mandir}/man1/stap-report.1*
+%{_mandir}/man7/error*
+%{_mandir}/man7/stappaths.7*
+%{_mandir}/man7/warning*
+%{_mandir}/man8/stapsh.8*
+%{_mandir}/man8/staprun.8*
+%if %{with_dyninst}
+%{_mandir}/man8/stapdyn.8*
+%endif
+%if %{with_bpf}
+%{_mandir}/man8/stapbpf.8*
+%endif
+%doc README README.security AUTHORS NEWS 
+%{!?_licensedir:%global license %%doc}
+%license COPYING
+%if %{with_sysusers}
+%{_sysusersdir}/systemtap-runtime.conf
+%endif
+
+
+%files client -f systemtap.lang
+%doc README README.unprivileged AUTHORS NEWS
+%{_datadir}/systemtap/examples
+%{!?_licensedir:%global license %%doc}
+%license COPYING
+%doc docs.installed/*.pdf
+%if %{with_docs}
+%if %{with_htmldocs}
+%doc docs.installed/tapsets/*.html
+%doc docs.installed/SystemTap_Beginners_Guide
+%endif
+%endif
+%{_bindir}/stap
+%{_bindir}/stap-prep
+%{_bindir}/stap-report
+%{_mandir}/man1/stap.1*
+%{_mandir}/man1/stap-prep.1*
+%{_mandir}/man1/stap-merge.1*
+%{_mandir}/man1/stap-report.1*
+%{_mandir}/man1/stapref.1*
+%{_mandir}/man3/*
+%{_mandir}/man7/error*
+%{_mandir}/man7/stappaths.7*
+%{_mandir}/man7/warning*
+%dir %{_datadir}/systemtap
+%{_datadir}/systemtap/tapset
+
+
+
+%files initscript
+%if %{with_systemd}
+%{_unitdir}/systemtap.service
+%{_sbindir}/systemtap-service
+%else
+%{initdir}/systemtap
+%{_sbindir}/systemtap-service
+%endif
+%dir %{_sysconfdir}/systemtap
+%dir %{_sysconfdir}/systemtap/conf.d
+%dir %{_sysconfdir}/systemtap/script.d
+%config(noreplace) %{_sysconfdir}/systemtap/config
+%dir %{_localstatedir}/cache/systemtap
+%ghost %{_localstatedir}/run/systemtap
+%{_mandir}/man8/systemtap-service.8*
+%if %{with_dracut}
+   %dir %{dracutstap}
+   %{dracutstap}/*
+%endif
+
+
+%files sdt-devel
+%{_bindir}/dtrace
+%{_includedir}/sys/sdt.h
+%{_includedir}/sys/sdt-config.h
+%{_mandir}/man1/dtrace.1*
+%{_rpmmacrodir}/macros.systemtap
+%doc README AUTHORS NEWS 
+%{!?_licensedir:%global license %%doc}
+%license COPYING
+
+
+%files testsuite
+%dir %{_datadir}/systemtap
+%{_datadir}/systemtap/testsuite
+%if %{with_sysusers}
+%{_sysusersdir}/systemtap-testsuite.conf
+%endif
+
+
+%if %{with_java}
+%files runtime-java
+%dir %{_libexecdir}/systemtap
+%{_libexecdir}/systemtap/libHelperSDT.so
+%{_libexecdir}/systemtap/HelperSDT.jar
+%{_libexecdir}/systemtap/stapbm
+%endif
+
+%if %{with_python2_probes}
+%files runtime-python2
+%{python_sitearch}/HelperSDT
+%{python_sitearch}/HelperSDT-*.egg-info
+%endif
+%if %{with_python3_probes}
+%files runtime-python3
+%{python3_sitearch}/HelperSDT
+%{python3_sitearch}/HelperSDT-*.egg-info
+%endif
+
+%if %{with_virthost}
+%files runtime-virthost
+%{_mandir}/man1/stapvirt.1*
+%{_bindir}/stapvirt
+%endif
+
+%if %{with_virtguest}
+%files runtime-virtguest
+%if %{with_systemd}
+   %{udevrulesdir}/99-stapsh.rules
+   %{_unitdir}/stapsh@.service
+%else
+   %{udevrulesdir}/99-stapsh-init.rules
+   %dir %{_libexecdir}/systemtap
+   %{_libexecdir}/systemtap/stapsh-daemon
+   %{initdir}/stapshd
+   %{_sysconfdir}/sysconfig/modules/virtio_console.modules
+%endif
+%endif
+
+%if %{with_python3_probes}
+%files exporter
+%{_sysconfdir}/stap-exporter
+%{_sysconfdir}/sysconfig/stap-exporter
+%{_unitdir}/stap-exporter.service
+%{_mandir}/man8/stap-exporter.8*
+%{_sbindir}/stap-exporter
+%endif
+
+# ------------------------------------------------------------------------
+
+# Future new-release entries should be of the form
+# * DDD MMM DD YYYY YOURNAME <YOUREMAIL> - V-R
+# - Upstream release, see wiki page below for detailed notes.
+#   http://sourceware.org/systemtap/wiki/SystemTapReleases
+
+# PRERELEASE
+%changelog
+* Fri Mar 11 2022 Frank Ch. Eigler <fche@redhat.com> - 4.6-12
+- rhbz2058908: Change sys/sdt.h on x86-64 to stop allowing xmm registers
+
+* Wed Feb 2 2022 Stan Cox <scox@redhat.com> - 4.6-11
+- rhbz2039207: Attempt userspace string access if kernel access fails
+
+* Tue Feb 1 2022 Martin Cermak <mcermak@redhat.com> - 4.6-10
+- rhbz2047256: [ppc64le] Assertion `index >= 0' failed
+
+* Fri Jan 21 2022 Martin Cermak <mcermak@redhat.com> - 4.6-9
+- rhbz2027683: python tapset regression
+- rhbz2027683: systemtap.examples/io/iostat-scsi.stp PR28633
+
+* Mon Jan 17 2022 Martin Cermak <mcermak@redhat.com> - 4.6-6
+- rhbz2041526/pr28634: move elevator.h to block/
+
+* Tue Dec 07 2021 Stan Cox <scox@redhat.com> - 4.6.5
+- sys/sdt.h remove aarch64 and s390 float constraints
+
+* Mon Dec 06 2021 Stan Cox <scox@redhat.com> - 4.6.4
+- sys/sdt.h remove float constraints that may cause gcc reload issues.
+
+* Thu Dec 02 2021 Frank Ch. Eigler <fche@redhat.com> - 4.6.3
+- rhbz2972798 - nfs tapset tweaks
+- sys/sdt.h fixes for glibc ftbfs
+
+* Thu Nov 25 2021 Martin Cermak <mcermak@redhat.com> - 4.6.2
+- rhbz2012907: Fix use of sysuser.d/* for user/group management
+
+* Fri Nov 19 2021 Frank Ch. Eigler <fche@redhat.com> - 4.6-1
+- Upstream release.
+
+* Thu Sep 09 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-8
+- rhbz1985124: Kernel 5.14 compatibility omnibus cont'd.
+
+* Thu Aug 12 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-7
+- rhbz1985124: Kernel 5.14 compatibility omnibus.
+
+* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 4.5-5
+- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
+  Related: rhbz#1991688
+
+* Mon Jul 26 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-3
+- rhbz1982908: Import hardening c*flags from specs/rhel standards
+
+* Tue May 18 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-2
+- Respin against newer dyninst.
+
+* Fri May 07 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-1
+- Upstream release.
+
+* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 4.5-0.202102101545git8d5e0abc542c
+- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
+
+* Mon Nov 09 2020 Frank Ch. Eigler <fche@redhat.com> - 4.4-1
+- Upstream release.
+
+* Thu Jun 11 2020 Frank Ch. Eigler <fche@redhat.com> - 4.3-1
+- Upstream release.
+
+* Mon Nov 18 2019 Sagar Patel <sapatel@redhat.com> - 4.2-1
+- Upstream release.
+
+* Tue May 07 2019 Serguei Makarov <smakarov@redhat.com> - 4.1-1
+- Upstream release.
+
+* Sat Oct 13 2018 Frank Ch. Eigler <fche@redhat.com> - 4.0-1
+- Upstream release.
+
+* Thu Jun 07 2018 Frank Ch. Eigler <fche@redhat.com> - 3.3-1
+- Upstream release.
+
+* Wed Oct 18 2017 Frank Ch. Eigler <fche@redhat.com> - 3.2-1
+- Upstream release.
+
+* Fri Feb 17 2017 Frank Ch. Eigler <fche@redhat.com> - 3.1-1
+- Upstream release.
+
+* Sun Mar 27 2016 Frank Ch. Eigler <fche@redhat.com> - 3.0-1
+- Upstream release.
+
+* Thu Oct 08 2015 Frank Ch. Eigler <fche@redhat.com> - 2.9-1
+- Upstream release.
+
+* Wed Jun 17 2015 Abegail Jakop <ajakop@redhat.com> - 2.8-1
+- Upstream release.
+
+* Wed Feb 18 2015 Frank Ch. Eigler <fche@redhat.com> - 2.7-1
+- Upstream release.
+
+* Fri Sep 05 2014 Josh Stone <jistone@redhat.com> - 2.6-1
+- Upstream release.
+
+* Mon Jul 07 2014 Josh Stone <jistone@redhat.com>
+- Flip with_dyninst to an %%ifarch passlist.
+
+* Wed Apr 30 2014 Jonathan Lebon <jlebon@redhat.com> - 2.5-1
+- Upstream release.
+
+* Thu Feb 13 2014 Lukas Berk <lberk@redhat.com>
+- Add directory checks for runtime-java sym links
+
+* Mon Jan 06 2014 Jonathan Lebon <jlebon@redhat.com>
+- Added dracut module to initscript package
+
+* Wed Nov 06 2013 Frank Ch. Eigler <fche@redhat.com> - 2.4-1
+- Upstream release.
+
+* Wed Oct 09 2013 Jonathan Lebon <jlebon@redhat.com>
+- Added runtime-virthost and runtime-virtguest packages.
+
+* Thu Jul 25 2013 Frank Ch. Eigler <fche@redhat.com> - 2.3-1
+- Upstream release.
+
+* Thu May 16 2013 Frank Ch. Eigler <fche@redhat.com> - 2.2.1-1
+- Upstream release.
+
+* Tue May 14 2013 Frank Ch. Eigler <fche@redhat.com> - 2.2-1
+- Upstream release.
+
+* Wed Feb 13 2013 Serguei Makarov <smakarov@redhat.com> - 2.1-1
+- Upstream release.
+
+* Tue Oct 09 2012 Josh Stone <jistone@redhat.com> - 2.0-1
+- Upstream release.
+
+* Fri Jul 13 2012 Peter Robinson <pbrobinson@fedoraproject.org>
+- Fix ifarch statement
+- use file based requires for glibc-devel on x86_64 so that we work in koji
+
+* Sun Jun 17 2012 Frank Ch. Eigler <fche@redhat.com> - 1.8-1
+- Upstream release.
+
+* Wed Feb 01 2012 Frank Ch. Eigler <fche@redhat.com> - 1.7-1
+- Upstream release.
+
+* Fri Jan 13 2012 David Smith <dsmith@redhat.com> - 1.6-2
+- Fixed /bin/mktemp require.
+
+* Mon Jul 25 2011 Stan Cox <scox@redhat.com> - 1.6-1
+- Upstream release.
+
+* Mon May 23 2011 Stan Cox <scox@redhat.com> - 1.5-1
+- Upstream release.
+
+* Mon Jan 17 2011 Frank Ch. Eigler <fche@redhat.com> - 1.4-1
+- Upstream release.
+
+* Wed Jul 21 2010 Josh Stone <jistone@redhat.com> - 1.3-1
+- Upstream release.
+
+* Mon Mar 22 2010 Frank Ch. Eigler <fche@redhat.com> - 1.2-1
+- Upstream release.
+
+* Mon Dec 21 2009 David Smith <dsmith@redhat.com> - 1.1-1
+- Upstream release.
+
+* Tue Sep 22 2009 Josh Stone <jistone@redhat.com> - 1.0-1
+- Upstream release.
+
+* Tue Aug  4 2009 Josh Stone <jistone@redhat.com> - 0.9.9-1
+- Upstream release.
+
+* Thu Jun 11 2009 Josh Stone <jistone@redhat.com> - 0.9.8-1
+- Upstream release.
+
+* Thu Apr 23 2009 Josh Stone <jistone@redhat.com> - 0.9.7-1
+- Upstream release.
+
+* Fri Mar 27 2009 Josh Stone <jistone@redhat.com> - 0.9.5-1
+- Upstream release.
+
+* Wed Mar 18 2009 Will Cohen <wcohen@redhat.com> - 0.9-2
+- Add location of man pages.
+
+* Tue Feb 17 2009 Frank Ch. Eigler <fche@redhat.com> - 0.9-1
+- Upstream release.
+
+* Thu Nov 13 2008 Frank Ch. Eigler <fche@redhat.com> - 0.8-1
+- Upstream release.
+
+* Tue Jul 15 2008 Frank Ch. Eigler <fche@redhat.com> - 0.7-1
+- Upstream release.
+
+* Fri Feb  1 2008 Frank Ch. Eigler <fche@redhat.com> - 0.6.1-3
+- Add zlib-devel to buildreq; missing from crash-devel
+- Process testsuite .stp files for #!stap->#!/usr/bin/stap
+
+* Fri Jan 18 2008 Frank Ch. Eigler <fche@redhat.com> - 0.6.1-1
+- Add crash-devel buildreq to build staplog.so crash(8) module.
+- Many robustness & functionality improvements:
+
+* Wed Dec  5 2007 Will Cohen <wcohen@redhat.com> - 0.6-2
+- Correct Source to point to location contain code.
+
+* Thu Aug  9 2007 David Smith <dsmith@redhat.com> - 0.6-1
+- Bumped version, added libcap-devel BuildRequires.
+
+* Wed Jul 11 2007 Will Cohen <wcohen@redhat.com> - 0.5.14-2
+- Fix Requires and BuildRequires for sqlite.
+
+* Mon Jul  2 2007 Frank Ch. Eigler <fche@redhat.com> - 0.5.14-1
+- Many robustness improvements: 1117, 1134, 1305, 1307, 1570, 1806,
+  2033, 2116, 2224, 2339, 2341, 2406, 2426, 2438, 2583, 3037,
+  3261, 3282, 3331, 3428 3519, 3545, 3625, 3648, 3880, 3888, 3911,
+  3952, 3965, 4066, 4071, 4075, 4078, 4081, 4096, 4119, 4122, 4127,
+  4146, 4171, 4179, 4183, 4221, 4224, 4254, 4281, 4319, 4323, 4326,
+  4329, 4332, 4337, 4415, 4432, 4444, 4445, 4458, 4467, 4470, 4471,
+  4518, 4567, 4570, 4579, 4589, 4609, 4664
+
+* Mon Mar 26 2007 Frank Ch. Eigler <fche@redhat.com> - 0.5.13-1
+- An emergency / preliminary refresh, mainly for compatibility
+  with 2.6.21-pre kernels.
+
+* Mon Jan  1 2007 Frank Ch. Eigler <fche@redhat.com> - 0.5.12-1
+- Many changes, see NEWS file.
+
+* Tue Sep 26 2006 David Smith <dsmith@redhat.com> - 0.5.10-1
+- Added 'systemtap-runtime' subpackage.
+
+* Wed Jul 19 2006 Roland McGrath <roland@redhat.com> - 0.5.9-1
+- PRs 2669, 2913
+
+* Fri Jun 16 2006 Roland McGrath <roland@redhat.com> - 0.5.8-1
+- PRs 2627, 2520, 2228, 2645
+
+* Fri May  5 2006 Frank Ch. Eigler <fche@redhat.com> - 0.5.7-1
+- PRs 2511 2453 2307 1813 1944 2497 2538 2476 2568 1341 2058 2220 2437
+  1326 2014 2599 2427 2438 2465 1930 2149 2610 2293 2634 2506 2433
+
+* Tue Apr  4 2006 Roland McGrath <roland@redhat.com> - 0.5.5-1
+- Many changes, affected PRs include: 2068, 2293, 1989, 2334,
+  1304, 2390, 2425, 953.
+
+* Wed Feb  1 2006 Frank Ch. Eigler <fche@redhat.com> - 0.5.4-1
+- PRs 1916, 2205, 2142, 2060, 1379
+
+* Mon Jan 16 2006 Roland McGrath <roland@redhat.com> - 0.5.3-1
+- Many changes, affected PRs include: 2056, 1144, 1379, 2057,
+  2060, 1972, 2140, 2148
+
+* Mon Dec 19 2005 Roland McGrath <roland@redhat.com> - 0.5.2-1
+- Fixed build with gcc 4.1, various tapset changes.
+
+* Wed Dec  7 2005 Roland McGrath <roland@redhat.com> - 0.5.1-1
+- elfutils update, build changes
+
+* Fri Dec 02 2005  Frank Ch. Eigler  <fche@redhat.com> - 0.5-1
+- Many fixes and improvements: 1425, 1536, 1505, 1380, 1329, 1828, 1271,
+  1339, 1340, 1345, 1837, 1917, 1903, 1336, 1868, 1594, 1564, 1276, 1295
+
+* Mon Oct 31 2005 Roland McGrath <roland@redhat.com> - 0.4.2-1
+- Many fixes and improvements: PRs 1344, 1260, 1330, 1295, 1311, 1368,
+  1182, 1131, 1332, 1366, 1456, 1271, 1338, 1482, 1477, 1194.
+
+* Wed Sep 14 2005 Roland McGrath <roland@redhat.com> - 0.4.1-1
+- Many fixes and improvements since 0.2.2; relevant PRs include:
+  1122, 1134, 1155, 1172, 1174, 1175, 1180, 1186, 1187, 1191, 1193, 1195,
+  1197, 1205, 1206, 1209, 1213, 1244, 1257, 1258, 1260, 1265, 1268, 1270,
+  1289, 1292, 1306, 1335, 1257
+
+* Wed Sep  7 2005 Frank Ch. Eigler <fche@redhat.com>
+- Bump version.
+
+* Tue Aug 16 2005 Frank Ch. Eigler <fche@redhat.com>
+- Bump version.
+
+* Wed Aug  3 2005 Martin Hunt <hunt@redhat.com> - 0.2.2-1
+- Add directory /var/cache/systemtap
+- Add stp_check to /usr/libexec/systemtap
+
+* Wed Aug  3 2005 Roland McGrath <roland@redhat.com> - 0.2.1-1
+- New version 0.2.1, various fixes.
+
+* Fri Jul 29 2005 Roland McGrath <roland@redhat.com> - 0.2-1
+- New version 0.2, requires elfutils 0.111
+
+* Mon Jul 25 2005 Roland McGrath <roland@redhat.com>
+- Clean up spec file, build bundled elfutils.
+
+* Thu Jul 21 2005 Martin Hunt <hunt@redhat.com>
+- Set Version to use version from autoconf.
+- Fix up some of the path names.
+- Add Requires and BuildRequires.
+
+* Tue Jul 19 2005 Will Cohen <wcohen@redhat.com>
+- Initial creation of RPM.