diff options
Diffstat (limited to 'arch/um/include')
| -rw-r--r-- | arch/um/include/mem.h | 1 | ||||
| -rw-r--r-- | arch/um/include/registers.h | 1 | ||||
| -rw-r--r-- | arch/um/include/sysdep-i386/ptrace_user.h | 13 | ||||
| -rw-r--r-- | arch/um/include/sysdep-i386/stub.h | 18 | ||||
| -rw-r--r-- | arch/um/include/sysdep-x86_64/ptrace_user.h | 14 | ||||
| -rw-r--r-- | arch/um/include/sysdep-x86_64/stub.h | 19 | ||||
| -rw-r--r-- | arch/um/include/tlb.h | 30 |
7 files changed, 78 insertions, 18 deletions
diff --git a/arch/um/include/mem.h b/arch/um/include/mem.h index 10c46c3894..99d3ad4a03 100644 --- a/arch/um/include/mem.h +++ b/arch/um/include/mem.h | |||
| @@ -13,6 +13,7 @@ extern int physmem_subst_mapping(void *virt, int fd, __u64 offset, int w); | |||
| 13 | extern int is_remapped(void *virt); | 13 | extern int is_remapped(void *virt); |
| 14 | extern int physmem_remove_mapping(void *virt); | 14 | extern int physmem_remove_mapping(void *virt); |
| 15 | extern void physmem_forget_descriptor(int fd); | 15 | extern void physmem_forget_descriptor(int fd); |
| 16 | extern unsigned long to_phys(void *virt); | ||
| 16 | 17 | ||
| 17 | #endif | 18 | #endif |
| 18 | 19 | ||
diff --git a/arch/um/include/registers.h b/arch/um/include/registers.h index 8744abb522..0a35e6d0ba 100644 --- a/arch/um/include/registers.h +++ b/arch/um/include/registers.h | |||
| @@ -14,6 +14,7 @@ extern int restore_fp_registers(int pid, unsigned long *fp_regs); | |||
| 14 | extern void save_registers(int pid, union uml_pt_regs *regs); | 14 | extern void save_registers(int pid, union uml_pt_regs *regs); |
| 15 | extern void restore_registers(int pid, union uml_pt_regs *regs); | 15 | extern void restore_registers(int pid, union uml_pt_regs *regs); |
| 16 | extern void init_registers(int pid); | 16 | extern void init_registers(int pid); |
| 17 | extern void get_safe_registers(unsigned long * regs); | ||
| 17 | 18 | ||
| 18 | #endif | 19 | #endif |
| 19 | 20 | ||
diff --git a/arch/um/include/sysdep-i386/ptrace_user.h b/arch/um/include/sysdep-i386/ptrace_user.h index eca8066e7a..899aa4b2a7 100644 --- a/arch/um/include/sysdep-i386/ptrace_user.h +++ b/arch/um/include/sysdep-i386/ptrace_user.h | |||
| @@ -20,11 +20,24 @@ | |||
| 20 | #define PT_SYSCALL_ARG3_OFFSET PT_OFFSET(EDX) | 20 | #define PT_SYSCALL_ARG3_OFFSET PT_OFFSET(EDX) |
| 21 | #define PT_SYSCALL_ARG4_OFFSET PT_OFFSET(ESI) | 21 | #define PT_SYSCALL_ARG4_OFFSET PT_OFFSET(ESI) |
| 22 | #define PT_SYSCALL_ARG5_OFFSET PT_OFFSET(EDI) | 22 | #define PT_SYSCALL_ARG5_OFFSET PT_OFFSET(EDI) |
| 23 | #define PT_SYSCALL_ARG6_OFFSET PT_OFFSET(EBP) | ||
| 23 | 24 | ||
| 24 | #define PT_SYSCALL_RET_OFFSET PT_OFFSET(EAX) | 25 | #define PT_SYSCALL_RET_OFFSET PT_OFFSET(EAX) |
| 25 | 26 | ||
| 27 | #define REGS_SYSCALL_NR EAX /* This is used before a system call */ | ||
| 28 | #define REGS_SYSCALL_ARG1 EBX | ||
| 29 | #define REGS_SYSCALL_ARG2 ECX | ||
| 30 | #define REGS_SYSCALL_ARG3 EDX | ||
| 31 | #define REGS_SYSCALL_ARG4 ESI | ||
| 32 | #define REGS_SYSCALL_ARG5 EDI | ||
| 33 | #define REGS_SYSCALL_ARG6 EBP | ||
| 34 | |||
| 35 | #define REGS_IP_INDEX EIP | ||
| 36 | #define REGS_SP_INDEX UESP | ||
| 37 | |||
| 26 | #define PT_IP_OFFSET PT_OFFSET(EIP) | 38 | #define PT_IP_OFFSET PT_OFFSET(EIP) |
| 27 | #define PT_IP(regs) ((regs)[EIP]) | 39 | #define PT_IP(regs) ((regs)[EIP]) |
| 40 | #define PT_SP_OFFSET PT_OFFSET(UESP) | ||
| 28 | #define PT_SP(regs) ((regs)[UESP]) | 41 | #define PT_SP(regs) ((regs)[UESP]) |
| 29 | 42 | ||
| 30 | #ifndef FRAME_SIZE | 43 | #ifndef FRAME_SIZE |
diff --git a/arch/um/include/sysdep-i386/stub.h b/arch/um/include/sysdep-i386/stub.h new file mode 100644 index 0000000000..fed9ff1cea --- /dev/null +++ b/arch/um/include/sysdep-i386/stub.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004 Jeff Dike (jdike@addtoit.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __SYSDEP_STUB_H | ||
| 7 | #define __SYSDEP_STUB_H | ||
| 8 | |||
| 9 | #include <asm/ptrace.h> | ||
| 10 | #include <asm/unistd.h> | ||
| 11 | |||
| 12 | extern void stub_segv_handler(int sig); | ||
| 13 | |||
| 14 | #define STUB_SYSCALL_RET EAX | ||
| 15 | #define STUB_MMAP_NR __NR_mmap2 | ||
| 16 | #define MMAP_OFFSET(o) ((o) >> PAGE_SHIFT) | ||
| 17 | |||
| 18 | #endif | ||
diff --git a/arch/um/include/sysdep-x86_64/ptrace_user.h b/arch/um/include/sysdep-x86_64/ptrace_user.h index 31729973fb..128faf0273 100644 --- a/arch/um/include/sysdep-x86_64/ptrace_user.h +++ b/arch/um/include/sysdep-x86_64/ptrace_user.h | |||
| @@ -55,6 +55,20 @@ | |||
| 55 | #define PTRACE_OLDSETOPTIONS 21 | 55 | #define PTRACE_OLDSETOPTIONS 21 |
| 56 | #endif | 56 | #endif |
| 57 | 57 | ||
| 58 | /* These are before the system call, so the the system call number is RAX | ||
| 59 | * rather than ORIG_RAX, and arg4 is R10 rather than RCX | ||
| 60 | */ | ||
| 61 | #define REGS_SYSCALL_NR PT_INDEX(RAX) | ||
| 62 | #define REGS_SYSCALL_ARG1 PT_INDEX(RDI) | ||
| 63 | #define REGS_SYSCALL_ARG2 PT_INDEX(RSI) | ||
| 64 | #define REGS_SYSCALL_ARG3 PT_INDEX(RDX) | ||
| 65 | #define REGS_SYSCALL_ARG4 PT_INDEX(R10) | ||
| 66 | #define REGS_SYSCALL_ARG5 PT_INDEX(R8) | ||
| 67 | #define REGS_SYSCALL_ARG6 PT_INDEX(R9) | ||
| 68 | |||
| 69 | #define REGS_IP_INDEX PT_INDEX(RIP) | ||
| 70 | #define REGS_SP_INDEX PT_INDEX(RSP) | ||
| 71 | |||
| 58 | #endif | 72 | #endif |
| 59 | 73 | ||
| 60 | /* | 74 | /* |
diff --git a/arch/um/include/sysdep-x86_64/stub.h b/arch/um/include/sysdep-x86_64/stub.h new file mode 100644 index 0000000000..6b5447ad59 --- /dev/null +++ b/arch/um/include/sysdep-x86_64/stub.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2004 Jeff Dike (jdike@addtoit.com) | ||
| 3 | * Licensed under the GPL | ||
| 4 | */ | ||
| 5 | |||
| 6 | #ifndef __SYSDEP_STUB_H | ||
| 7 | #define __SYSDEP_STUB_H | ||
| 8 | |||
| 9 | #include <asm/ptrace.h> | ||
| 10 | #include <asm/unistd.h> | ||
| 11 | #include <sysdep/ptrace_user.h> | ||
| 12 | |||
| 13 | extern void stub_segv_handler(int sig); | ||
| 14 | |||
| 15 | #define STUB_SYSCALL_RET PT_INDEX(RAX) | ||
| 16 | #define STUB_MMAP_NR __NR_mmap | ||
| 17 | #define MMAP_OFFSET(o) (o) | ||
| 18 | |||
| 19 | #endif | ||
diff --git a/arch/um/include/tlb.h b/arch/um/include/tlb.h index da1097285b..c6f9628f39 100644 --- a/arch/um/include/tlb.h +++ b/arch/um/include/tlb.h | |||
| @@ -37,31 +37,25 @@ struct host_vm_op { | |||
| 37 | extern void mprotect_kernel_vm(int w); | 37 | extern void mprotect_kernel_vm(int w); |
| 38 | extern void force_flush_all(void); | 38 | extern void force_flush_all(void); |
| 39 | extern void fix_range_common(struct mm_struct *mm, unsigned long start_addr, | 39 | extern void fix_range_common(struct mm_struct *mm, unsigned long start_addr, |
| 40 | unsigned long end_addr, int force, int data, | 40 | unsigned long end_addr, int force, |
| 41 | void (*do_ops)(int, struct host_vm_op *, int)); | 41 | void (*do_ops)(union mm_context *, |
| 42 | struct host_vm_op *, int)); | ||
| 42 | extern int flush_tlb_kernel_range_common(unsigned long start, | 43 | extern int flush_tlb_kernel_range_common(unsigned long start, |
| 43 | unsigned long end); | 44 | unsigned long end); |
| 44 | 45 | ||
| 45 | extern int add_mmap(unsigned long virt, unsigned long phys, unsigned long len, | 46 | extern int add_mmap(unsigned long virt, unsigned long phys, unsigned long len, |
| 46 | int r, int w, int x, struct host_vm_op *ops, int index, | 47 | int r, int w, int x, struct host_vm_op *ops, int index, |
| 47 | int last_filled, int data, | 48 | int last_filled, union mm_context *mmu, |
| 48 | void (*do_ops)(int, struct host_vm_op *, int)); | 49 | void (*do_ops)(union mm_context *, struct host_vm_op *, |
| 50 | int)); | ||
| 49 | extern int add_munmap(unsigned long addr, unsigned long len, | 51 | extern int add_munmap(unsigned long addr, unsigned long len, |
| 50 | struct host_vm_op *ops, int index, int last_filled, | 52 | struct host_vm_op *ops, int index, int last_filled, |
| 51 | int data, void (*do_ops)(int, struct host_vm_op *, int)); | 53 | union mm_context *mmu, |
| 54 | void (*do_ops)(union mm_context *, struct host_vm_op *, | ||
| 55 | int)); | ||
| 52 | extern int add_mprotect(unsigned long addr, unsigned long len, int r, int w, | 56 | extern int add_mprotect(unsigned long addr, unsigned long len, int r, int w, |
| 53 | int x, struct host_vm_op *ops, int index, | 57 | int x, struct host_vm_op *ops, int index, |
| 54 | int last_filled, int data, | 58 | int last_filled, union mm_context *mmu, |
| 55 | void (*do_ops)(int, struct host_vm_op *, int)); | 59 | void (*do_ops)(union mm_context *, struct host_vm_op *, |
| 60 | int)); | ||
| 56 | #endif | 61 | #endif |
| 57 | |||
| 58 | /* | ||
| 59 | * Overrides for Emacs so that we follow Linus's tabbing style. | ||
| 60 | * Emacs will notice this stuff at the end of the file and automatically | ||
| 61 | * adjust the settings for this buffer only. This must remain at the end | ||
| 62 | * of the file. | ||
| 63 | * --------------------------------------------------------------------------- | ||
| 64 | * Local variables: | ||
| 65 | * c-file-style: "linux" | ||
| 66 | * End: | ||
| 67 | */ | ||
