# 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
#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
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);
# 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"