aacff36
From 3c4705bfdda45feb860a1f121631773e5fe8e53f Mon Sep 17 00:00:00 2001
aacff36
From: Shawn Anastasio <shawnanastasio@yahoo.com>
aacff36
Date: Thu, 9 Aug 2018 19:11:26 -0500
aacff36
Subject: [PATCH 1/4] sandbox/linux/bpf_dsl: Modify seccomp_macros to add
aacff36
 support for ppc64
aacff36
aacff36
---
aacff36
 sandbox/linux/bpf_dsl/seccomp_macros.h | 43 ++++++++++++++++++++++++++
aacff36
 1 file changed, 43 insertions(+)
aacff36
aacff36
Index: chromium-120.0.6099.71/sandbox/linux/bpf_dsl/seccomp_macros.h
aacff36
===================================================================
aacff36
--- chromium-120.0.6099.71.orig/sandbox/linux/bpf_dsl/seccomp_macros.h
aacff36
+++ chromium-120.0.6099.71/sandbox/linux/bpf_dsl/seccomp_macros.h
aacff36
@@ -14,6 +14,9 @@
aacff36
 #if defined(__mips__)
aacff36
 // sys/user.h in eglibc misses size_t definition
aacff36
 #include <stddef.h>
aacff36
+#elif defined(__powerpc64__)
aacff36
+// Manually define greg_t on ppc64
aacff36
+typedef unsigned long long greg_t;
aacff36
 #endif
aacff36
 #endif
aacff36
 
aacff36
@@ -343,6 +346,51 @@ struct regs_struct {
aacff36
 #define SECCOMP_PT_PARM4(_regs) (_regs).regs[3]
aacff36
 #define SECCOMP_PT_PARM5(_regs) (_regs).regs[4]
aacff36
 #define SECCOMP_PT_PARM6(_regs) (_regs).regs[5]
aacff36
+
aacff36
+#elif defined(__powerpc64__)
aacff36
+#include <asm/ptrace.h>
aacff36
+
aacff36
+typedef struct pt_regs regs_struct;
aacff36
+
aacff36
+#ifdef ARCH_CPU_LITTLE_ENDIAN
aacff36
+#define SECCOMP_ARCH AUDIT_ARCH_PPC64LE
aacff36
+#else
aacff36
+#define SECCOMP_ARCH AUDIT_ARCH_PPC64
aacff36
+#endif
aacff36
+
aacff36
+#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
aacff36
+
aacff36
+#define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
aacff36
+#define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
aacff36
+#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
aacff36
+#define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
aacff36
+#define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
aacff36
+#define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
aacff36
+#define SECCOMP_PARM4(_ctx) SECCOMP_REG(_ctx, 6)
aacff36
+#define SECCOMP_PARM5(_ctx) SECCOMP_REG(_ctx, 7)
aacff36
+#define SECCOMP_PARM6(_ctx) SECCOMP_REG(_ctx, 8)
aacff36
+
aacff36
+#define SECCOMP_NR_IDX (offsetof(struct arch_seccomp_data, nr))
aacff36
+#define SECCOMP_ARCH_IDX (offsetof(struct arch_seccomp_data, arch))
aacff36
+#define SECCOMP_IP_MSB_IDX \
aacff36
+  (offsetof(struct arch_seccomp_data, instruction_pointer) + 4)
aacff36
+#define SECCOMP_IP_LSB_IDX \
aacff36
+  (offsetof(struct arch_seccomp_data, instruction_pointer) + 0)
aacff36
+#define SECCOMP_ARG_MSB_IDX(nr) \
aacff36
+  (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 4)
aacff36
+#define SECCOMP_ARG_LSB_IDX(nr) \
aacff36
+  (offsetof(struct arch_seccomp_data, args) + 8 * (nr) + 0)
aacff36
+
aacff36
+#define SECCOMP_PT_RESULT(_regs) (_regs).gpr[3]
aacff36
+#define SECCOMP_PT_SYSCALL(_regs) (_regs).gpr[0]
aacff36
+#define SECCOMP_PT_IP(_regs) (_regs).nip
aacff36
+#define SECCOMP_PT_PARM1(_regs) (_regs).gpr[3]
aacff36
+#define SECCOMP_PT_PARM2(_regs) (_regs).gpr[4]
aacff36
+#define SECCOMP_PT_PARM3(_regs) (_regs).gpr[5]
aacff36
+#define SECCOMP_PT_PARM4(_regs) (_regs).gpr[6]
aacff36
+#define SECCOMP_PT_PARM5(_regs) (_regs).gpr[7]
aacff36
+#define SECCOMP_PT_PARM6(_regs) (_regs).gpr[8]
aacff36
+
aacff36
 #else
aacff36
 #error Unsupported target platform
aacff36