cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

target_syscall.h (4845B)


      1/*
      2 *  i386 system call definitions
      3 *
      4 *
      5 *  This program is free software; you can redistribute it and/or modify
      6 *  it under the terms of the GNU General Public License as published by
      7 *  the Free Software Foundation; either version 2 of the License, or
      8 *  (at your option) any later version.
      9 *
     10 *  This program is distributed in the hope that it will be useful,
     11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 *  GNU General Public License for more details.
     14 *
     15 *  You should have received a copy of the GNU General Public License
     16 *  along with this program; if not, see <http://www.gnu.org/licenses/>.
     17 */
     18#ifndef TARGET_SYSCALL_H
     19#define TARGET_SYSCALL_H
     20
     21/* default linux values for the selectors */
     22#define __USER_CS	(0x23)
     23#define __USER_DS	(0x2B)
     24
     25struct target_pt_regs {
     26	long ebx;
     27	long ecx;
     28	long edx;
     29	long esi;
     30	long edi;
     31	long ebp;
     32	long eax;
     33	int  xds;
     34	int  xes;
     35	long orig_eax;
     36	long eip;
     37	int  xcs;
     38	long eflags;
     39	long esp;
     40	int  xss;
     41};
     42
     43/* ioctls */
     44
     45#define TARGET_LDT_ENTRIES      8192
     46#define TARGET_LDT_ENTRY_SIZE	8
     47
     48#define TARGET_GDT_ENTRIES             9
     49#define TARGET_GDT_ENTRY_TLS_ENTRIES   3
     50#define TARGET_GDT_ENTRY_TLS_MIN       6
     51#define TARGET_GDT_ENTRY_TLS_MAX       (TARGET_GDT_ENTRY_TLS_MIN + TARGET_GDT_ENTRY_TLS_ENTRIES - 1)
     52
     53struct target_modify_ldt_ldt_s {
     54    unsigned int  entry_number;
     55    abi_ulong base_addr;
     56    unsigned int limit;
     57    unsigned int flags;
     58};
     59
     60/* vm86 defines */
     61
     62#define TARGET_BIOSSEG		0x0f000
     63
     64#define TARGET_CPU_086		0
     65#define TARGET_CPU_186		1
     66#define TARGET_CPU_286		2
     67#define TARGET_CPU_386		3
     68#define TARGET_CPU_486		4
     69#define TARGET_CPU_586		5
     70
     71#define TARGET_VM86_SIGNAL	0	/* return due to signal */
     72#define TARGET_VM86_UNKNOWN	1	/* unhandled GP fault - IO-instruction or similar */
     73#define TARGET_VM86_INTx	2	/* int3/int x instruction (ARG = x) */
     74#define TARGET_VM86_STI	3	/* sti/popf/iret instruction enabled virtual interrupts */
     75
     76/*
     77 * Additional return values when invoking new vm86()
     78 */
     79#define TARGET_VM86_PICRETURN	4	/* return due to pending PIC request */
     80#define TARGET_VM86_TRAP	6	/* return due to DOS-debugger request */
     81
     82/*
     83 * function codes when invoking new vm86()
     84 */
     85#define TARGET_VM86_PLUS_INSTALL_CHECK	0
     86#define TARGET_VM86_ENTER		1
     87#define TARGET_VM86_ENTER_NO_BYPASS	2
     88#define	TARGET_VM86_REQUEST_IRQ	3
     89#define TARGET_VM86_FREE_IRQ		4
     90#define TARGET_VM86_GET_IRQ_BITS	5
     91#define TARGET_VM86_GET_AND_RESET_IRQ	6
     92
     93/*
     94 * This is the stack-layout seen by the user space program when we have
     95 * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout
     96 * is 'kernel_vm86_regs' (see below).
     97 */
     98
     99struct target_vm86_regs {
    100/*
    101 * normal regs, with special meaning for the segment descriptors..
    102 */
    103	abi_long ebx;
    104	abi_long ecx;
    105	abi_long edx;
    106	abi_long esi;
    107	abi_long edi;
    108	abi_long ebp;
    109	abi_long eax;
    110	abi_long __null_ds;
    111	abi_long __null_es;
    112	abi_long __null_fs;
    113	abi_long __null_gs;
    114	abi_long orig_eax;
    115	abi_long eip;
    116	unsigned short cs, __csh;
    117	abi_long eflags;
    118	abi_long esp;
    119	unsigned short ss, __ssh;
    120/*
    121 * these are specific to v86 mode:
    122 */
    123	unsigned short es, __esh;
    124	unsigned short ds, __dsh;
    125	unsigned short fs, __fsh;
    126	unsigned short gs, __gsh;
    127};
    128
    129struct target_revectored_struct {
    130	abi_ulong __map[8];			/* 256 bits */
    131};
    132
    133struct target_vm86_struct {
    134	struct target_vm86_regs regs;
    135	abi_ulong flags;
    136	abi_ulong screen_bitmap;
    137	abi_ulong cpu_type;
    138	struct target_revectored_struct int_revectored;
    139	struct target_revectored_struct int21_revectored;
    140};
    141
    142/*
    143 * flags masks
    144 */
    145#define TARGET_VM86_SCREEN_BITMAP	0x0001
    146
    147struct target_vm86plus_info_struct {
    148        abi_ulong flags;
    149#define TARGET_force_return_for_pic (1 << 0)
    150#define TARGET_vm86dbg_active       (1 << 1)  /* for debugger */
    151#define TARGET_vm86dbg_TFpendig     (1 << 2)  /* for debugger */
    152#define TARGET_is_vm86pus           (1 << 31) /* for vm86 internal use */
    153	unsigned char vm86dbg_intxxtab[32];   /* for debugger */
    154};
    155
    156struct target_vm86plus_struct {
    157	struct target_vm86_regs regs;
    158	abi_ulong flags;
    159	abi_ulong screen_bitmap;
    160	abi_ulong cpu_type;
    161	struct target_revectored_struct int_revectored;
    162	struct target_revectored_struct int21_revectored;
    163	struct target_vm86plus_info_struct vm86plus;
    164};
    165
    166/* FreeBSD sysarch(2) */
    167#define TARGET_FREEBSD_I386_GET_LDT	0
    168#define TARGET_FREEBSD_I386_SET_LDT	1
    169				/* I386_IOPL */
    170#define TARGET_FREEBSD_I386_GET_IOPERM	3
    171#define TARGET_FREEBSD_I386_SET_IOPERM	4
    172				/* xxxxx */
    173#define TARGET_FREEBSD_I386_VM86	6
    174#define TARGET_FREEBSD_I386_GET_FSBASE	7
    175#define TARGET_FREEBSD_I386_SET_FSBASE	8
    176#define TARGET_FREEBSD_I386_GET_GSBASE	9
    177#define TARGET_FREEBSD_I386_SET_GSBASE	10
    178
    179
    180#define UNAME_MACHINE "i386"
    181#define TARGET_HW_MACHINE UNAME_MACHINE
    182#define TARGET_HW_MACHINE_ARCH UNAME_MACHINE
    183
    184#endif /* TARGET_SYSCALL_H */