mirror of
https://github.com/xemu-project/xemu.git
synced 2024-12-13 06:27:28 +00:00
02e5d7d78e
This patch implements strace argument printing functionality for following syscalls: * mlock, munlock, mlockall, munlockall - lock and unlock memory int mlock(const void *addr, size_t len) int munlock(const void *addr, size_t len) int mlockall(int flags) int munlockall(void) man page: https://man7.org/linux/man-pages/man2/mlock.2.html Implementation notes: Syscall mlockall() takes an argument that is composed of predefined values which represent flags that determine the type of locking operation that is to be performed. For that reason, a printing function "print_mlockall" was stated in file "strace.list". This printing function uses an already existing function "print_flags()" to print the "flags" argument. These flags are stated inside an array "mlockall_flags" that contains values of type "struct flags". These values are instantiated using an existing macro "FLAG_TARGET()" that crates aproppriate target flag values based on those defined in files '/target_syscall.h'. These target flag values were changed from "TARGET_MLOCKALL_MCL*" to "TARGET_MCL_*" so that they can be aproppriately set and recognised in "strace.c" with "FLAG_TARGET()". Value for "MCL_ONFAULT" was added in this patch. This value was also added in "syscall.c" in function "target_to_host_mlockall_arg()". Because this flag value was added in kernel version 4.4, it is enwrapped in an #ifdef directive (both in "syscall.c" and in "strace.c") as to support older kernel versions. The other syscalls have only primitive argument types, so the rest of the implementation was handled by stating an appropriate printing format in file "strace.list". Syscall mlock2() is not implemented in "syscall.c" and thus it's argument printing is not implemented in this patch. Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Message-Id: <20200811164553.27713-4-Filip.Bozuta@syrmia.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
160 lines
3.8 KiB
C
160 lines
3.8 KiB
C
#ifndef I386_TARGET_SYSCALL_H
|
|
#define I386_TARGET_SYSCALL_H
|
|
|
|
/* default linux values for the selectors */
|
|
#define __USER_CS (0x23)
|
|
#define __USER_DS (0x2B)
|
|
|
|
struct target_pt_regs {
|
|
long ebx;
|
|
long ecx;
|
|
long edx;
|
|
long esi;
|
|
long edi;
|
|
long ebp;
|
|
long eax;
|
|
int xds;
|
|
int xes;
|
|
long orig_eax;
|
|
long eip;
|
|
int xcs;
|
|
long eflags;
|
|
long esp;
|
|
int xss;
|
|
};
|
|
|
|
/* ioctls */
|
|
|
|
#define TARGET_LDT_ENTRIES 8192
|
|
#define TARGET_LDT_ENTRY_SIZE 8
|
|
|
|
#define TARGET_GDT_ENTRIES 9
|
|
#define TARGET_GDT_ENTRY_TLS_ENTRIES 3
|
|
#define TARGET_GDT_ENTRY_TLS_MIN 6
|
|
#define TARGET_GDT_ENTRY_TLS_MAX (TARGET_GDT_ENTRY_TLS_MIN + TARGET_GDT_ENTRY_TLS_ENTRIES - 1)
|
|
|
|
struct target_modify_ldt_ldt_s {
|
|
unsigned int entry_number;
|
|
abi_ulong base_addr;
|
|
unsigned int limit;
|
|
unsigned int flags;
|
|
};
|
|
|
|
/* vm86 defines */
|
|
|
|
#define TARGET_BIOSSEG 0x0f000
|
|
|
|
#define TARGET_CPU_086 0
|
|
#define TARGET_CPU_186 1
|
|
#define TARGET_CPU_286 2
|
|
#define TARGET_CPU_386 3
|
|
#define TARGET_CPU_486 4
|
|
#define TARGET_CPU_586 5
|
|
|
|
#define TARGET_VM86_SIGNAL 0 /* return due to signal */
|
|
#define TARGET_VM86_UNKNOWN 1 /* unhandled GP fault - IO-instruction or similar */
|
|
#define TARGET_VM86_INTx 2 /* int3/int x instruction (ARG = x) */
|
|
#define TARGET_VM86_STI 3 /* sti/popf/iret instruction enabled virtual interrupts */
|
|
|
|
/*
|
|
* Additional return values when invoking new vm86()
|
|
*/
|
|
#define TARGET_VM86_PICRETURN 4 /* return due to pending PIC request */
|
|
#define TARGET_VM86_TRAP 6 /* return due to DOS-debugger request */
|
|
|
|
/*
|
|
* function codes when invoking new vm86()
|
|
*/
|
|
#define TARGET_VM86_PLUS_INSTALL_CHECK 0
|
|
#define TARGET_VM86_ENTER 1
|
|
#define TARGET_VM86_ENTER_NO_BYPASS 2
|
|
#define TARGET_VM86_REQUEST_IRQ 3
|
|
#define TARGET_VM86_FREE_IRQ 4
|
|
#define TARGET_VM86_GET_IRQ_BITS 5
|
|
#define TARGET_VM86_GET_AND_RESET_IRQ 6
|
|
|
|
/*
|
|
* This is the stack-layout seen by the user space program when we have
|
|
* done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout
|
|
* is 'kernel_vm86_regs' (see below).
|
|
*/
|
|
|
|
struct target_vm86_regs {
|
|
/*
|
|
* normal regs, with special meaning for the segment descriptors..
|
|
*/
|
|
abi_long ebx;
|
|
abi_long ecx;
|
|
abi_long edx;
|
|
abi_long esi;
|
|
abi_long edi;
|
|
abi_long ebp;
|
|
abi_long eax;
|
|
abi_long __null_ds;
|
|
abi_long __null_es;
|
|
abi_long __null_fs;
|
|
abi_long __null_gs;
|
|
abi_long orig_eax;
|
|
abi_long eip;
|
|
unsigned short cs, __csh;
|
|
abi_long eflags;
|
|
abi_long esp;
|
|
unsigned short ss, __ssh;
|
|
/*
|
|
* these are specific to v86 mode:
|
|
*/
|
|
unsigned short es, __esh;
|
|
unsigned short ds, __dsh;
|
|
unsigned short fs, __fsh;
|
|
unsigned short gs, __gsh;
|
|
};
|
|
|
|
struct target_revectored_struct {
|
|
abi_ulong __map[8]; /* 256 bits */
|
|
};
|
|
|
|
struct target_vm86_struct {
|
|
struct target_vm86_regs regs;
|
|
abi_ulong flags;
|
|
abi_ulong screen_bitmap;
|
|
abi_ulong cpu_type;
|
|
struct target_revectored_struct int_revectored;
|
|
struct target_revectored_struct int21_revectored;
|
|
};
|
|
|
|
/*
|
|
* flags masks
|
|
*/
|
|
#define TARGET_VM86_SCREEN_BITMAP 0x0001
|
|
|
|
struct target_vm86plus_info_struct {
|
|
abi_ulong flags;
|
|
#define TARGET_force_return_for_pic (1 << 0)
|
|
#define TARGET_vm86dbg_active (1 << 1) /* for debugger */
|
|
#define TARGET_vm86dbg_TFpendig (1 << 2) /* for debugger */
|
|
#define TARGET_is_vm86pus (1 << 31) /* for vm86 internal use */
|
|
unsigned char vm86dbg_intxxtab[32]; /* for debugger */
|
|
};
|
|
|
|
struct target_vm86plus_struct {
|
|
struct target_vm86_regs regs;
|
|
abi_ulong flags;
|
|
abi_ulong screen_bitmap;
|
|
abi_ulong cpu_type;
|
|
struct target_revectored_struct int_revectored;
|
|
struct target_revectored_struct int21_revectored;
|
|
struct target_vm86plus_info_struct vm86plus;
|
|
};
|
|
|
|
#define UNAME_MACHINE "i686"
|
|
#define UNAME_MINIMUM_RELEASE "2.6.32"
|
|
|
|
#define TARGET_CLONE_BACKWARDS
|
|
#define TARGET_MINSIGSTKSZ 2048
|
|
#define TARGET_MCL_CURRENT 1
|
|
#define TARGET_MCL_FUTURE 2
|
|
#define TARGET_MCL_ONFAULT 4
|
|
#define TARGET_WANT_OLD_SYS_SELECT
|
|
|
|
#endif /* I386_TARGET_SYSCALL_H */
|