1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 4 * Copyright (C) 2015 Thomas Meyer (thomas@m3y3r.de) 5 * Copyright (C) 2005 Jeff Dike (jdike@karaya.com) 6 */ 7 8 #ifndef __STUB_DATA_H 9 #define __STUB_DATA_H 10 11 #include <linux/compiler_types.h> 12 #include <as-layout.h> 13 #include <sysdep/tls.h> 14 15 #define STUB_NEXT_SYSCALL(s) \ 16 ((struct stub_syscall *) (((unsigned long) s) + (s)->cmd_len)) 17 18 enum stub_syscall_type { 19 STUB_SYSCALL_UNSET = 0, 20 STUB_SYSCALL_MMAP, 21 STUB_SYSCALL_MUNMAP, 22 STUB_SYSCALL_MPROTECT, 23 }; 24 25 struct stub_syscall { 26 struct { 27 unsigned long addr; 28 unsigned long length; 29 unsigned long offset; 30 int fd; 31 int prot; 32 } mem; 33 34 enum stub_syscall_type syscall; 35 }; 36 37 struct stub_data { 38 unsigned long offset; 39 long err, child_err; 40 41 int syscall_data_len; 42 /* 128 leaves enough room for additional fields in the struct */ 43 struct stub_syscall syscall_data[(UM_KERN_PAGE_SIZE - 128) / sizeof(struct stub_syscall)] __aligned(16); 44 45 /* Stack for our signal handlers and for calling into . */ 46 unsigned char sigstack[UM_KERN_PAGE_SIZE] __aligned(UM_KERN_PAGE_SIZE); 47 }; 48 49 #endif 50