Blame SOURCES/sdt-asm-glibc.patch

3c8958
commit ecab2afea46099b4e7dfd551462689224afdbe3a
3c8958
Author: Stan Cox <scox@redhat.com>
3c8958
Date:   Wed Dec 1 16:19:22 2021 -0500
3c8958
3c8958
    Handle user supplied sdt probe argument template
3c8958
    
3c8958
    User supplied templates were erroneously removed by commit eaa15b047,
3c8958
    which complicated the template expansion. To do the above the
3c8958
    expansion of STAP_PROBE_ASM(provider, fooprobe,
3c8958
    STAP_PROBE_ASM_TEMPLATE(3)) adds an unused argument:
3c8958
    STAP_PROBE_ASM(provider, fooprobe, /*template expansion*/ "%[SDT..]..",
3c8958
    "use _SDT_ASM_TEMPLATE") A supplied template
3c8958
    STAP_PROBE_ASM(provider, fooprobe, "4@%rdx 8@%rax") is left alone.  If
3c8958
    the varargs has 2 args (the fake "use ..") then macro expansion
3c8958
    inserts the expanded string, otherwise "4@.." becomes an ascii op.
3c8958
3c8958
diff --git a/includes/sys/sdt.h b/includes/sys/sdt.h
3c8958
index 28d236d91..24d5e01c3 100644
3c8958
--- a/includes/sys/sdt.h
3c8958
+++ b/includes/sys/sdt.h
3c8958
@@ -290,7 +290,7 @@ __extension__ extern unsigned long long __sdt_unsp;
3c8958
   _SDT_ASM_1(.purgem _SDT_TYPE_)					      \
3c8958
   _SDT_ASM_1(.purgem _SDT_TYPE)
3c8958
 
3c8958
-#define _SDT_ASM_BODY(provider, name, pack_args, args)			      \
3c8958
+#define _SDT_ASM_BODY(provider, name, pack_args, args, ...)		      \
3c8958
   _SDT_DEF_MACROS							      \
3c8958
   _SDT_ASM_1(990:	_SDT_NOP)					      \
3c8958
   _SDT_ASM_3(		.pushsection .note.stapsdt,_SDT_ASM_AUTOGROUP,"note") \
3c8958
@@ -417,9 +417,9 @@ __extension__ extern unsigned long long __sdt_unsp;
3c8958
    counted, so we don't have to worry about the behavior of macros
3c8958
    called without any arguments.  */
3c8958
 
3c8958
-#ifdef SDT_USE_VARIADIC
3c8958
 #define _SDT_NARG(...) __SDT_NARG(__VA_ARGS__, 12,11,10,9,8,7,6,5,4,3,2,1,0)
3c8958
 #define __SDT_NARG(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12, N, ...) N
3c8958
+#ifdef SDT_USE_VARIADIC
3c8958
 #define _SDT_PROBE_N(provider, name, N, ...) \
3c8958
   _SDT_PROBE(provider, name, N, (__VA_ARGS__))
3c8958
 #define STAP_PROBEV(provider, name, ...) \
3c8958
@@ -468,9 +468,15 @@ __extension__ extern unsigned long long __sdt_unsp;
3c8958
     Note that these can use operand templates like %0 or %[name],
3c8958
     and likewise they must write %%reg for a literal operand of %reg.  */
3c8958
 
3c8958
+#define _SDT_ASM_BODY_1(p,n,...) _SDT_ASM_BODY(p,n,_SDT_ASM_SUBSTR,(__VA_ARGS__))
3c8958
+#define _SDT_ASM_BODY_2(p,n,...) _SDT_ASM_BODY(p,n,/*_SDT_ASM_STRING */,__VA_ARGS__)
3c8958
+#define _SDT_ASM_BODY_N2(p,n,no,...) _SDT_ASM_BODY_ ## no(p,n,__VA_ARGS__)
3c8958
+#define _SDT_ASM_BODY_N1(p,n,no,...) _SDT_ASM_BODY_N2(p,n,no,__VA_ARGS__)
3c8958
+#define _SDT_ASM_BODY_N(p,n,...) _SDT_ASM_BODY_N1(p,n,_SDT_NARG(0, __VA_ARGS__),__VA_ARGS__)
3c8958
+
3c8958
 #if __STDC_VERSION__ >= 199901L
3c8958
 # define STAP_PROBE_ASM(provider, name, ...)		\
3c8958
-  _SDT_ASM_BODY(provider, name, /*_SDT_ASM_STRING */, __VA_ARGS__)	\
3c8958
+  _SDT_ASM_BODY_N(provider, name, __VA_ARGS__)					\
3c8958
   _SDT_ASM_BASE
3c8958
 # define STAP_PROBE_ASM_OPERANDS(n, ...) _SDT_ASM_OPERANDS_##n(__VA_ARGS__)
3c8958
 #else
3c8958
@@ -478,7 +484,7 @@ __extension__ extern unsigned long long __sdt_unsp;
3c8958
   _SDT_ASM_BODY(provider, name, /* _SDT_ASM_STRING */, (args))	\
3c8958
   _SDT_ASM_BASE
3c8958
 #endif
3c8958
-#define STAP_PROBE_ASM_TEMPLATE(n)	_SDT_ASM_TEMPLATE_##n
3c8958
+#define STAP_PROBE_ASM_TEMPLATE(n) _SDT_ASM_TEMPLATE_##n,"use _SDT_ASM_TEMPLATE_"
3c8958
 
3c8958
 
3c8958
 /* DTrace compatible macro names.  */
3c8958
diff --git a/testsuite/systemtap.base/sdt_casm.c b/testsuite/systemtap.base/sdt_casm.c
3c8958
index 1cff23c5f..9b357086c 100644
3c8958
--- a/testsuite/systemtap.base/sdt_casm.c
3c8958
+++ b/testsuite/systemtap.base/sdt_casm.c
3c8958
@@ -3,6 +3,7 @@
3c8958
 int main()
3c8958
 {
3c8958
     int x = 42;
3c8958
+    int y = 43;
3c8958
     __asm__ __volatile__ (
3c8958
             STAP_PROBE_ASM(testsuite, probe0, STAP_PROBE_ASM_TEMPLATE(0))
3c8958
             );
3c8958
@@ -10,5 +11,9 @@ int main()
3c8958
             STAP_PROBE_ASM(testsuite, probe1, STAP_PROBE_ASM_TEMPLATE(1))
3c8958
             :: STAP_PROBE_ASM_OPERANDS(1, x)
3c8958
             );
3c8958
+    // Create a template to test explicit template support
3c8958
+    __asm__ __volatile__ (
3c8958
+			  STAP_PROBE_ASM(testsuite, probe2, -4@%[ARG1] -4@%[ARG2])
3c8958
+			  :: [ARG1] "rm" (x), [ARG2] "rm" (y));
3c8958
     return 0;
3c8958
 }
3c8958
diff --git a/testsuite/systemtap.base/sdt_casm.exp b/testsuite/systemtap.base/sdt_casm.exp
3c8958
index 5791cb2b9..0cd1cb517 100644
3c8958
--- a/testsuite/systemtap.base/sdt_casm.exp
3c8958
+++ b/testsuite/systemtap.base/sdt_casm.exp
3c8958
@@ -18,7 +18,8 @@ proc cleanup_handler { verbose } {
3c8958
 
3c8958
 set script $srcdir/$subdir/$test.stp
3c8958
 set ::result_string {PASS: probe0
3c8958
-PASS: probe1}
3c8958
+PASS: probe1
3c8958
+PASS: probe2}
3c8958
 
3c8958
 set asm_flags [sdt_includes]
3c8958
 set asm_flags "$asm_flags additional_flags=-std=c99"
3c8958
diff --git a/testsuite/systemtap.base/sdt_casm.stp b/testsuite/systemtap.base/sdt_casm.stp
3c8958
index 4f2539c93..530a79175 100644
3c8958
--- a/testsuite/systemtap.base/sdt_casm.stp
3c8958
+++ b/testsuite/systemtap.base/sdt_casm.stp
3c8958
@@ -10,3 +10,11 @@ probe process.mark("probe1")
3c8958
     else
3c8958
         printf("FAIL: %s (%d != 42)\n", $$name, $arg1)
3c8958
 }
3c8958
+
3c8958
+probe process.mark("probe2") 
3c8958
+{
3c8958
+    if ($arg1 == 42 && $arg2 == 43)
3c8958
+        printf("PASS: %s\n", $$name)
3c8958
+    else
3c8958
+        printf("FAIL: %s (%d/%d != 42/43)\n", $$name, $arg1, $arg2)
3c8958
+}
3c8958
commit 209b5a19c (HEAD -> master, origin/master, origin/HEAD)
3c8958
Author: Stan Cox <scox@redhat.com>
3c8958
Date:   Tue Dec 7 09:55:01 2021 -0500
3c8958
3c8958
    sys/sdt.h fp constraints: aarch64, s390
3c8958
    
3c8958
    Remove float constraints as per commit 1d3653936 but for aarch64 and s390.
3c8958
3c8958
commit 1d3653936 (HEAD -> master, origin/master, origin/HEAD)
3c8958
Author: Frank Ch. Eigler <fche@redhat.com>
3c8958
Date:   Mon Dec 6 12:06:06 2021 -0500
3c8958
3c8958
    sys/sdt.h fp constraints cont'd, x86-64 edition
3c8958
    
3c8958
    It appears that various versions of gcc continue to show signs of
3c8958
    confusion at our newly offered asm-operand alternatives for floating
3c8958
    point sdt.h marker parameters.
3c8958
    
3c8958
    e.g., https://bugzilla.redhat.com/show_bug.cgi?id=2028798
3c8958
    
3c8958
    We may need to restore previous constraints broadly, forcing the
3c8958
    compiler to plop floating point parameters into integer storage.
3c8958
3c8958
--- a/includes/sys/sdt.h
3c8958
+++ b/includes/sys/sdt.h
3c8958
@@ -102,9 +102,5 @@
3c8958
 # define STAP_SDT_ARG_CONSTRAINT        nZr
3c8958
 # elif defined __x86_64__
3c8958
-# define STAP_SDT_ARG_CONSTRAINT norfxy
3c8958
-# elif defined __aarch64__
3c8958
-# define STAP_SDT_ARG_CONSTRAINT norw
3c8958
-# elif defined __s390__ || defined __s390x__
3c8958
-# define STAP_SDT_ARG_CONSTRAINT        norf
3c8958
+# define STAP_SDT_ARG_CONSTRAINT norx
3c8958
 # else
3c8958
 # define STAP_SDT_ARG_CONSTRAINT        nor