Blame SOURCES/sdt-asm-glibc.patch

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