diff --git a/.gitignore b/.gitignore
index 7e2d8f3..5e535be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1 @@
-SOURCES/systemtap-4.5.tar.gz
+SOURCES/systemtap-4.6.tar.gz
diff --git a/.systemtap.metadata b/.systemtap.metadata
index cd69235..dad6e4d 100644
--- a/.systemtap.metadata
+++ b/.systemtap.metadata
@@ -1 +1 @@
-c549d5fa7aaf6a8cef3371f5757d912d41eae934 SOURCES/systemtap-4.5.tar.gz
+ecc45371b378fc3824a5547b02c030b4123d6769 SOURCES/systemtap-4.6.tar.gz
diff --git a/SOURCES/rhbz1991631.patch b/SOURCES/rhbz1991631.patch
deleted file mode 100644
index 9598ac8..0000000
--- a/SOURCES/rhbz1991631.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-commit 515a6a2d63cdf16c5bc599f0d29283289219d9a4
-Author: Frank Ch. Eigler <fche@redhat.com>
-Date:   Thu Jun 24 13:30:38 2021 -0400
-
-    rhbz1972828: tapsets: iommu tracepoints
-    
-    Disable detection of intel-iommu tracepoint family on non-x86
-    platforms, because the 5.13ish kernel headers for this tracepoint
-    include references to functions like clcache_flush_range which don't
-    exist on all non-x86.
-
-diff --git a/tapsets.cxx b/tapsets.cxx
-index a5e41129f..20e0cb68f 100644
---- a/tapsets.cxx
-+++ b/tapsets.cxx
-@@ -11930,6 +11930,13 @@ static vector<string> tracepoint_extra_decls (systemtap_session& s,
- 	they_live.push_back ("#include <linux/phy.h>");
-     }
- 
-+  if (header.find("intel_iommu") != string::npos && s.architecture != "x86_64" && s.architecture != "i386")
-+    {
-+      // need asm/cacheflush.h for clflush_cache_range() used in that header,
-+      // but this function does not exist on e.g. ppc
-+      they_live.push_back ("#error nope");
-+    }
-+
-   if (header.find("wbt") != string::npos)
-     {
-       // blk-wbt.h gets included as "../../../block/blk-wbt.h", so we
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
index 548c5c2..8c5f4a8 100644
--- a/SPECS/systemtap.spec
+++ b/SPECS/systemtap.spec
@@ -4,14 +4,13 @@
 %{!?with_htmldocs: %global with_htmldocs 0}
 %{!?with_monitor: %global with_monitor 1}
 # crash is not available
-%ifarch ppc ppc64 %{sparc} %{mips}
+%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}
-%{!?pie_supported: %global pie_supported 1}
 %{!?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}
@@ -39,6 +38,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
@@ -89,8 +89,8 @@
 %define __brp_mangle_shebangs_exclude_from .stp$
 
 Name: systemtap
-Version: 4.5
-Release: 3%{?release_override}%{?dist}
+Version: 4.6
+Release: 4%{?release_override}%{?dist}
 # for version, see also configure.ac
 
 
@@ -126,7 +126,7 @@ License: GPLv2+
 URL: http://sourceware.org/systemtap/
 Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz
 
-Patch1: rhbz1991631.patch
+Patch1: sdt-asm-glibc.patch
 
 # Build*
 BuildRequires: make
@@ -139,7 +139,7 @@ BuildRequires: pkgconfig(avahi-client)
 BuildRequires: pkgconfig(libdebuginfod)
 %endif
 %if %{with_dyninst}
-BuildRequires: dyninst-devel >= 11.0
+BuildRequires: dyninst-devel >= 10.0
 BuildRequires: pkgconfig(libselinux)
 %endif
 %if %{with_sqlite}
@@ -176,6 +176,7 @@ BuildRequires: xmlto /usr/share/xmlto/format/fo/pdf
 %endif
 %endif
 %if %{with_emacsvim}
+# for _emacs_sitelispdir macros etc.
 BuildRequires: emacs
 %endif
 %if %{with_java}
@@ -198,6 +199,9 @@ BuildRequires: python2-setuptools
 BuildRequires: python-setuptools
 %endif
 %endif
+%if %{with_python3}
+BuildRequires: python3
+%endif
 %if %{with_python3_probes}
 BuildRequires: python3-devel
 BuildRequires: python3-setuptools
@@ -210,6 +214,10 @@ BuildRequires: /usr/bin/pathfix.py
 BuildRequires: libmicrohttpd-devel
 BuildRequires: libuuid-devel
 %endif
+%if %{with_sysusers}
+BuildRequires:  systemd-rpm-macros
+%endif
+
 
 # Install requirements
 Requires: systemtap-client = %{version}-%{release}
@@ -486,7 +494,7 @@ This package includes support files needed to run systemtap scripts
 that probe python 3 processes.
 %endif
 
-%if %{with_python3}
+%if %{with_python3_probes}
 %package exporter
 Summary: Systemtap-prometheus interoperation mechanism
 License: GPLv2+
@@ -504,7 +512,8 @@ to remote requesters on demand.
 Summary: Systemtap Cross-VM Instrumentation - host
 License: GPLv2+
 URL: http://sourceware.org/systemtap/
-Requires: libvirt >= 1.0.2
+# only require libvirt-libs really
+#Requires: libvirt >= 1.0.2
 Requires: libxml2
 
 %description runtime-virthost
@@ -587,14 +596,6 @@ systemtap-runtime-virthost machine to execute systemtap scripts.
 %global docs_config --enable-docs=prebuilt
 %endif
 
-# Enable pie as configure defaults to disabling it
-%if %{pie_supported}
-%global pie_config --enable-pie
-%else
-%global pie_config --disable-pie
-%endif
-
-
 %if %{with_java}
 %global java_config --with-java=%{_jvmdir}/java
 %else
@@ -644,8 +645,8 @@ systemtap-runtime-virthost machine to execute systemtap scripts.
 # 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} %{pie_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}
+%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
@@ -657,6 +658,13 @@ for dir in $(ls -1d $RPM_BUILD_ROOT%{_mandir}/{??,??_??}) ; do
     echo "%%lang($lang) $dir/man*/*" >> %{name}.lang
 done
 
+%if %{with_sysusers}
+install -p -D -m 0644 systemtap-runtime.sysusers %{buildroot}%{_sysusersdir}/systemtap-runtime.conf
+install -p -D -m 0644 systemtap-server.sysusers %{buildroot}%{_sysusersdir}/systemtap-server.conf
+install -p -D -m 0644 systemtap-testsuite.sysusers %{buildroot}%{_sysusersdir}/systemtap-testsuite.conf
+%endif
+
+
 ln -s %{_datadir}/systemtap/examples
 
 # Fix paths in the example scripts.
@@ -780,24 +788,37 @@ pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{python3_sitearch
 %endif
 
 %pre runtime
+%if %{with_sysusers}
+%sysusers_create_compat $RPM_BUILD_ROOT/systemtap-runtime.sysusers
+%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}
+%sysusers_create_compat $RPM_BUILD_ROOT/systemtap-server.sysusers
+%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}
+%sysusers_create_compat $RPM_BUILD_ROOT/systemtap-testsuite.sysusers
+%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
@@ -954,7 +975,7 @@ if [ "$1" -ge "1" ]; then
 fi
 exit 0
 
-%if %{with_python3}
+%if %{with_python3_probes}
 %if %{with_systemd}
 %preun exporter
 if [ $1 = 0 ] ; then
@@ -1019,6 +1040,9 @@ exit 0
 %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
@@ -1088,6 +1112,9 @@ exit 0
 %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
@@ -1154,6 +1181,9 @@ exit 0
 %files testsuite
 %dir %{_datadir}/systemtap
 %{_datadir}/systemtap/testsuite
+%if %{with_sysusers}
+%{_sysusersdir}/systemtap-testsuite.conf
+%endif
 
 
 %if %{with_java}
@@ -1195,7 +1225,7 @@ exit 0
 %endif
 %endif
 
-%if %{with_python3}
+%if %{with_python3_probes}
 %files exporter
 %{_sysconfdir}/stap-exporter
 %{_sysconfdir}/sysconfig/stap-exporter
@@ -1213,6 +1243,18 @@ exit 0
 
 # PRERELEASE
 %changelog
+* Tue Dec 07 2021 Stan Cox <scox@redhat.com> - 4.6.4
+- sys/sdt.h remove aarch64 and s390 float constraints
+
+* Mon Dec 06 2021 Stan Cox <scox@redhat.com> - 4.6.3
+- sys/sdt.h remove float constraints that may cause gcc reload issues.
+
+* Thu Dec 02 2021 Frank Ch. Eigler <fche@redhat.com> - 4.6.2
+- sys/sdt.h fixes for glibc ftbfs
+
+* Mon Nov 15 2021 Frank Ch. Eigler <fche@redhat.com> - 4.6-1
+- Upstream release.
+
 * Thu Aug 12 2021 Frank Ch. Eigler <fche@redhat.com> - 4.5-3
 - rhbz1991631 iommu tracepoints break ppc64le