Added s390x support. Needs 4.10 Kernel
authorZvonko Kosic <zvonko.kosic@de.ibm.com>
Tue, 7 Mar 2017 06:30:25 +0000 (07:30 +0100)
committerZvonko Kosic <zvonko.kosic@de.ibm.com>
Tue, 7 Mar 2017 06:31:17 +0000 (07:31 +0100)
src/cc/export/helpers.h
src/cc/frontends/clang/b_frontend_action.cc
src/cc/frontends/clang/loader.cc
src/cc/libbpf.c

index 1fa20a5..ea8c92d 100644 (file)
@@ -468,6 +468,17 @@ int bpf_usdt_readarg_p(int argc, struct pt_regs *ctx, void *buf, u64 len) asm("l
 #define PT_REGS_RC(ctx)                ((ctx)->gpr[3])
 #define PT_REGS_IP(ctx)                ((ctx)->nip)
 #define PT_REGS_SP(ctx)                ((ctx)->sp)
+#elif defined(__s390x__)
+#define PT_REGS_PARM1(x) ((x)->gprs[2])
+#define PT_REGS_PARM2(x) ((x)->gprs[3])
+#define PT_REGS_PARM3(x) ((x)->gprs[4])
+#define PT_REGS_PARM4(x) ((x)->gprs[5])
+#define PT_REGS_PARM5(x) ((x)->gprs[6])
+#define PT_REGS_RET(x) ((x)->gprs[14])
+#define PT_REGS_FP(x) ((x)->gprs[11]) /* Works only with CONFIG_FRAME_POINTER */
+#define PT_REGS_RC(x) ((x)->gprs[2])
+#define PT_REGS_SP(x) ((x)->gprs[15])
+#define PT_REGS_IP(x) ((x)->psw.addr)
 #elif defined(__x86_64__)
 #define PT_REGS_PARM1(ctx)     ((ctx)->di)
 #define PT_REGS_PARM2(ctx)     ((ctx)->si)
index 206ec00..0afa87f 100644 (file)
@@ -39,11 +39,17 @@ const char *calling_conv_regs_x86[] = {
 };
 const char *calling_conv_regs_ppc[] = {"gpr[3]", "gpr[4]", "gpr[5]",
                                        "gpr[6]", "gpr[7]", "gpr[8]"};
+
+const char *calling_conv_regs_s390x[] = {"gprs[2]", "gprs[3]", "gprs[4]",
+                                        "gprs[5]", "gprs[6]" };
+
 const char *calling_conv_regs_arm64[] = {"regs[0]", "regs[1]", "regs[2]",
                                        "regs[3]", "regs[4]", "regs[5]"};
 // todo: support more archs
 #if defined(__powerpc__)
 const char **calling_conv_regs = calling_conv_regs_ppc;
+#elif defined(__s390x__)
+const char **calling_conv_regs = calling_conv_regs_s390x;
 #elif defined(__aarch64__)
 const char **calling_conv_regs = calling_conv_regs_arm64;
 #else
index 7bc7d8f..99cd4e2 100644 (file)
@@ -172,6 +172,8 @@ int ClangLoader::parse(unique_ptr<llvm::Module> *mod, unique_ptr<vector<TableDes
 #else
   driver::Driver drv("", "powerpc64-unknown-linux-gnu", diags);
 #endif
+#elif defined(__s390x__)
+  driver::Driver drv("", "s390x-ibm-linux-gnu", diags);
 #elif defined(__aarch64__)
   driver::Driver drv("", "aarch64-unknown-linux-gnu", diags);
 #else
index 864b89e..a64b66c 100644 (file)
@@ -46,6 +46,8 @@
 #ifndef __NR_bpf
 #if defined(__powerpc64__)
 #define __NR_bpf 361
+#elif defined(__s390x__)
+#define __NR_bpf 351
 #elif defined(__aarch64__)
 #define __NR_bpf 280
 #else