| Index: sandbox/linux/seccomp-bpf/linux_seccomp.h
 | 
| diff --git a/sandbox/linux/seccomp-bpf/linux_seccomp.h b/sandbox/linux/seccomp-bpf/linux_seccomp.h
 | 
| index 0de0259da39ecdb745e5923b9a6ff3961c13be00..558014d9a18b18113c77c401036a72abfa0d78cf 100644
 | 
| --- a/sandbox/linux/seccomp-bpf/linux_seccomp.h
 | 
| +++ b/sandbox/linux/seccomp-bpf/linux_seccomp.h
 | 
| @@ -26,6 +26,9 @@
 | 
|  #ifndef EM_X86_64
 | 
|  #define EM_X86_64 62
 | 
|  #endif
 | 
| +#ifndef EM_MIPS
 | 
| +#define EM_MIPS   8
 | 
| +#endif
 | 
|  
 | 
|  #ifndef __AUDIT_ARCH_64BIT
 | 
|  #define __AUDIT_ARCH_64BIT 0x80000000
 | 
| @@ -42,6 +45,9 @@
 | 
|  #ifndef AUDIT_ARCH_X86_64
 | 
|  #define AUDIT_ARCH_X86_64 (EM_X86_64|__AUDIT_ARCH_64BIT|__AUDIT_ARCH_LE)
 | 
|  #endif
 | 
| +#ifndef AUDIT_ARCH_MIPSEL
 | 
| +#define AUDIT_ARCH_MIPSEL    (EM_MIPS|__AUDIT_ARCH_LE)
 | 
| +#endif
 | 
|  
 | 
|  // For prctl.h
 | 
|  #ifndef PR_SET_SECCOMP
 | 
| @@ -189,6 +195,42 @@
 | 
|  #define SECCOMP_ARG_LSB_IDX(nr) (offsetof(struct arch_seccomp_data, args) +   \
 | 
|                                   8*(nr) + 0)
 | 
|  
 | 
| +#elif defined(__mips__) && (_MIPS_SIM == _MIPS_SIM_ABI32)
 | 
| +#define MIN_SYSCALL         __NR_O32_Linux
 | 
| +#define MAX_PUBLIC_SYSCALL  (MIN_SYSCALL + __NR_Linux_syscalls)
 | 
| +#define MAX_SYSCALL         MAX_PUBLIC_SYSCALL
 | 
| +#define SECCOMP_ARCH        AUDIT_ARCH_MIPSEL
 | 
| +
 | 
| +// MIPS sigcontext_t is different from i386/x86_64 and ARM.
 | 
| +// See </arch/mips/include/uapi/asm/sigcontext.h> in the Linux kernel.
 | 
| +#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.gregs[_reg])
 | 
| +// Based on MIPS o32 ABI syscall convention.
 | 
| +// On MIPS, when indirect syscall is being made (syscall(__NR_foo)),
 | 
| +// real identificator (__NR_foo) is not in v0, but in a0
 | 
| +#define SECCOMP_RESULT(_ctx)    SECCOMP_REG(_ctx, 2)
 | 
| +#define SECCOMP_SYSCALL(_ctx)   SECCOMP_REG(_ctx, 2)
 | 
| +#define SECCOMP_IP(_ctx)        (_ctx)->uc_mcontext.pc
 | 
| +#define SECCOMP_PARM1(_ctx)     SECCOMP_REG(_ctx, 4)
 | 
| +#define SECCOMP_PARM2(_ctx)     SECCOMP_REG(_ctx, 5)
 | 
| +#define SECCOMP_PARM3(_ctx)     SECCOMP_REG(_ctx, 6)
 | 
| +#define SECCOMP_PARM4(_ctx)     SECCOMP_REG(_ctx, 7)
 | 
| +// Only the first 4 arguments of syscall are in registers.
 | 
| +// The rest are on the stack.
 | 
| +#define SECCOMP_PARM5(_ctx)     (long int)(*((intptr_t*)SECCOMP_REG(_ctx,     \
 | 
| +                                                                    29) + 4))
 | 
| +#define SECCOMP_PARM6(_ctx)     (long int)(*((intptr_t*)SECCOMP_REG(_ctx,     \
 | 
| +                                                                    29) + 5))
 | 
| +#define SECCOMP_NR_IDX          (offsetof(struct arch_seccomp_data, nr))
 | 
| +#define SECCOMP_ARCH_IDX        (offsetof(struct arch_seccomp_data, arch))
 | 
| +#define SECCOMP_IP_MSB_IDX      (offsetof(struct arch_seccomp_data,           \
 | 
| +                                          instruction_pointer) + 4)
 | 
| +#define SECCOMP_IP_LSB_IDX      (offsetof(struct arch_seccomp_data,           \
 | 
| +                                          instruction_pointer) + 0)
 | 
| +#define SECCOMP_ARG_MSB_IDX(nr) (offsetof(struct arch_seccomp_data, args) +   \
 | 
| +                                 8*(nr) + 4)
 | 
| +#define SECCOMP_ARG_LSB_IDX(nr) (offsetof(struct arch_seccomp_data, args) +   \
 | 
| +                                 8*(nr) + 0)
 | 
| +
 | 
|  #else
 | 
|  #error Unsupported target platform
 | 
|  
 | 
| 
 |