]> sourceware.org Git - systemtap.git/commitdiff
Add support for s390 floating point registers
authorStan Cox <scox@redhat.com>
Fri, 8 Oct 2021 13:42:47 +0000 (09:42 -0400)
committerStan Cox <scox@redhat.com>
Fri, 8 Oct 2021 13:42:47 +0000 (09:42 -0400)
Add float registers.  Add move from float register to general
register.  Allow an sdt argument to be a float register.

includes/sys/sdt.h
runtime/loc2c-runtime.h
tapsets.cxx
testsuite/systemtap.base/sdt_notes.exp

index f757a46a1b3afbd9f9b597fc8b28ce8083c75a5f..9ecb1cb6fed2bbb9f58aaca640c5840e471b67ac 100644 (file)
 # 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
 # else
 # define STAP_SDT_ARG_CONSTRAINT        nor
 # endif
index 163954e01a42c8db3abf3bb11c73c46951b25985..e6c624d37478a0ae24fc0de850a4030f4e30ae97 100644 (file)
   
 #elif defined (__s390__) || defined (__s390x__)
 
+#define _fetch_float_register(regno) \
+  ({unsigned long v;  __asm__ __volatile__("lgdr %[_DEST],%%f%n[_REGNO]" : [_DEST] "=r" (v): [_REGNO] "n" (-(regno-16))) ; v;})
+
 #undef pt_regs_fetch_register
 #undef pt_regs_store_register
 #define pt_regs_fetch_register(pt_regs,regno) \
-  ((intptr_t) pt_regs->gprs[regno])
+  (regno < 16 ? ((intptr_t) pt_regs->gprs[regno]) : (_fetch_float_register(regno)))
 #define pt_regs_store_register(pt_regs,regno,value) \
   (pt_regs->gprs[regno] = (value))
-#define pt_regs_maxno 16 /* NUM_GPRS */
+#define pt_regs_maxno 32 /* NUM_GPRS */
   
 #endif
 
index 30352a7e93dc504350259974afe75a12121ba892..1c82aaf6942082b7e3d04ec7bda6c238112382e0 100644 (file)
@@ -6707,7 +6707,23 @@ sdt_uprobe_var_expanding_visitor::build_dwarf_registers ()
     DRI ("%r13", 13, DI);
     DRI ("%r14", 14, DI);
     DRI ("%r15", 15, DI);
-  } else if (elf_machine == EM_ARM) {
+    DRI ("%f0", 16, DI);
+    DRI ("%f1", 17, DI);
+    DRI ("%f2", 18, DI);
+    DRI ("%f3", 19, DI);
+    DRI ("%f4", 20, DI);
+    DRI ("%f5", 21, DI);
+    DRI ("%f6", 22, DI);
+    DRI ("%f7", 23, DI);
+    DRI ("%f8", 24, DI);
+    DRI ("%f9", 25, DI);
+    DRI ("%f10", 26, DI);
+    DRI ("%f11", 27, DI);
+    DRI ("%f12", 28, DI);
+    DRI ("%f13", 29, DI);
+    DRI ("%f14", 30, DI);
+    DRI ("%f15", 31, DI);
+} else if (elf_machine == EM_ARM) {
     DRI ("r0", 0, SI);
     DRI ("r1", 1, SI);
     DRI ("r2", 2, SI);
index 5fbb2abe008e100be8f96e776abe2b0254b4d44e..bbb9175f071d5c33e660203c337aed47a0137303 100644 (file)
@@ -2,8 +2,11 @@ set test "sdt_notes"
 
 # Test layout of .note.stapsdt section and interaction with eu-readelf and gdb
 
+set exeflags [sdt_includes]
+set exeflags "$exeflags additional_flags=-O2"
+
 set res [target_compile $srcdir/$subdir/sdt_types.c \
-            sdt_types.x executable additional_flags=-O2]
+            sdt_types.x executable $exeflags]
 if { $res != "" } {
     verbose "target_compile failed: $res" 2
     untested "$test compiling types"
This page took 0.045603 seconds and 5 git commands to generate.