FreeBSD support, patch 3

include directory
New FreeBSD specific headers
SONAMES for FreeBSD libraries
This commit is contained in:
Paul Floyd 2021-10-03 19:02:04 +02:00
parent 33012dd82b
commit 7774acbc9c
19 changed files with 4435 additions and 14 deletions

View File

@ -47,9 +47,12 @@ nobase_pkginclude_HEADERS = \
pub_tool_xtmemory.h \
valgrind.h \
vki/vki-linux.h \
vki/vki-freebsd.h \
vki/vki-darwin.h \
vki/vki-solaris.h \
vki/vki-solaris-repcache.h \
vki/vki-machine-types-amd64-freebsd.h \
vki/vki-machine-types-x86-freebsd.h \
vki/vki-posixtypes-amd64-linux.h \
vki/vki-posixtypes-arm64-linux.h \
vki/vki-posixtypes-ppc32-linux.h \
@ -65,6 +68,8 @@ nobase_pkginclude_HEADERS = \
vki/vki-ppc32-linux.h \
vki/vki-ppc64-linux.h \
vki/vki-x86-linux.h \
vki/vki-amd64-freebsd.h \
vki/vki-x86-freebsd.h \
vki/vki-arm-linux.h \
vki/vki-s390x-linux.h \
vki/vki-mips32-linux.h \
@ -75,6 +80,7 @@ nobase_pkginclude_HEADERS = \
vki/vki-scnums-ppc32-linux.h \
vki/vki-scnums-ppc64-linux.h \
vki/vki-scnums-x86-linux.h \
vki/vki-scnums-freebsd.h \
vki/vki-scnums-arm-linux.h \
vki/vki-scnums-s390x-linux.h \
vki/vki-scnums-mips32-linux.h \

View File

@ -110,6 +110,9 @@ typedef
Bool hasT; // True --> translations have (or MAY have)
// been taken from this segment
Bool isCH; // True --> is client heap (SkAnonC ONLY)
#if defined(VGO_freebsd)
Bool isFF; // True --> is a fixed file mapping
#endif
}
NSegment;

View File

@ -102,6 +102,8 @@ typedef Word PtrdiffT; // 32 64
// always a signed 64-bit int. So we defined our own Off64T as well.
#if defined(VGO_linux) || defined(VGO_solaris)
typedef Word OffT; // 32 64
#elif defined(VGO_freebsd)
typedef Long OffT; // 64 64
#elif defined(VGO_darwin)
typedef Long OffT; // 64 64
#else
@ -225,6 +227,19 @@ typedef
SysResMode _mode;
}
SysRes;
#elif defined(VGO_freebsd)
typedef
struct {
UWord _val;
UWord _val2;
Bool _isError;
#if defined(VGP_amd64_freebsd)
char padding[7];
#else
char padding[3];
#endif
}
SysRes;
#elif defined(VGO_solaris)
typedef
@ -306,6 +321,27 @@ static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) {
&& sr1._isError == sr2._isError;
}
#elif defined(VGO_freebsd)
static inline Bool sr_isError ( SysRes sr ) {
return sr._isError;
}
static inline UWord sr_Res ( SysRes sr ) {
return sr._isError ? 0 : sr._val;
}
static inline UWord sr_ResHI ( SysRes sr ) {
return sr._isError ? 0 : sr._val2;
}
static inline UWord sr_Err ( SysRes sr ) {
return sr._isError ? sr._val : 0;
}
static inline Bool sr_EQ ( UInt sysno, SysRes sr1, SysRes sr2 ) {
return sr_Res(sr1) == sr_Res(sr2)
&& sr_ResHI(sr1) == sr_ResHI(sr2)
&& ((sr_isError(sr1) && sr_isError(sr2))
|| (!sr_isError(sr1) && !sr_isError(sr2)));
}
#elif defined(VGO_darwin)
static inline Bool sr_isError ( SysRes sr ) {

View File

@ -46,7 +46,7 @@
#define VGAPPEND(str1,str2) str1##str2
#if defined(VGO_linux) || defined(VGO_solaris)
#if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd)
# define VG_(str) VGAPPEND( vgPlain_, str)
# define ML_(str) VGAPPEND( vgModuleLocal_, str)
#elif defined(VGO_darwin)

View File

@ -103,7 +103,7 @@ extern UInt VG_(read_millisecond_timer) ( void );
extern Int VG_(gettimeofday)(struct vki_timeval *tv, struct vki_timezone *tz);
# if defined(VGO_linux) || defined(VGO_solaris)
# if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd)
/* Get the clock value as specified by clk_id. Asserts if unsuccesful. */
extern void VG_(clock_gettime)(struct vki_timespec *ts, vki_clockid_t clk_id);
# elif defined(VGO_darwin)

View File

@ -90,7 +90,7 @@ void VG_MINIMAL_LONGJMP(VG_MINIMAL_JMP_BUF(_env));
#elif defined(VGP_amd64_linux) || defined(VGP_amd64_darwin) || \
defined(VGP_amd64_solaris)
defined(VGP_amd64_solaris) || defined(VGP_amd64_freebsd)
#define VG_MINIMAL_JMP_BUF(_name) ULong _name [16+1]
__attribute__((returns_twice))
@ -100,7 +100,7 @@ void VG_MINIMAL_LONGJMP(VG_MINIMAL_JMP_BUF(_env));
#elif defined(VGP_x86_linux) || defined(VGP_x86_darwin) || \
defined(VGP_x86_solaris)
defined(VGP_x86_solaris) || defined(VGP_x86_freebsd)
#define VG_MINIMAL_JMP_BUF(_name) UInt _name [8+1]
__attribute__((returns_twice))

4
include/pub_tool_machine.h Normal file → Executable file
View File

@ -32,14 +32,14 @@
#include "pub_tool_basics.h" // ThreadID
#include "libvex.h" // VexArchInfo
#if defined(VGP_x86_linux) || defined(VGP_x86_solaris)
#if defined(VGP_x86_linux) || defined(VGP_x86_solaris) || defined(VGP_x86_freebsd)
# define VG_MIN_INSTR_SZB 1 // min length of native instruction
# define VG_MAX_INSTR_SZB 16 // max length of native instruction
# define VG_CLREQ_SZB 14 // length of a client request, may
// be larger than VG_MAX_INSTR_SZB
# define VG_STACK_REDZONE_SZB 0 // number of addressable bytes below %RSP
#elif defined(VGP_amd64_linux) || defined(VGP_amd64_solaris)
#elif defined(VGP_amd64_linux) || defined(VGP_amd64_solaris) || defined(VGP_amd64_freebsd)
# define VG_MIN_INSTR_SZB 1
# define VG_MAX_INSTR_SZB 16
# define VG_CLREQ_SZB 19

View File

@ -163,7 +163,7 @@ extern void VG_(list_clo)(const HChar *qq_option);
val, \
&(qq_var))) { \
VG_(fmsg_bad_option)(qq_arg, "%s is an invalid %s set\n", \
val, qq_option+2); \
val, &qq_option[2]); \
res = False; } \
res; }))

View File

@ -241,7 +241,7 @@
/* --- Soname of the standard C library. --- */
#if defined(VGO_linux) || defined(VGO_solaris)
#if defined(VGO_linux) || defined(VGO_solaris) || defined(VGO_freebsd)
# if defined(MUSL_LIBC)
# define VG_Z_LIBC_SONAME libcZdZa // libc.*
#else
@ -269,7 +269,7 @@
#endif
/* --- Soname of the GNU C++ library. --- */
/* --- Sonames of the GNU C++ library. --- */
// Valid on all platforms(?)
#define VG_Z_LIBSTDCXX_SONAME libstdcZpZpZa // libstdc++*
@ -283,6 +283,8 @@
#if defined(VGO_linux)
# define VG_Z_LIBPTHREAD_SONAME libpthreadZdsoZd0 // libpthread.so.0
#elif defined(VGO_freebsd)
# define VG_Z_LIBPTHREAD_SONAME libthrZdsoZa // libthr.so*
#elif defined(VGO_darwin)
# define VG_Z_LIBPTHREAD_SONAME libSystemZdZaZddylib // libSystem.*.dylib
#elif defined(VGO_solaris)
@ -321,6 +323,18 @@
#endif
/* --- Sonames for FreeBSD ELF linkers, plus unencoded versions. --- */
#if defined(VGO_freebsd)
#define VG_Z_LD_ELF_SO_1 ldZhelfZdsoZd1 // ld-elf.so.1
#define VG_U_LD_ELF_SO_1 "ld-elf.so.1"
#define VG_Z_LD_ELF32_SO_1 ldZhelf32ZdsoZd1 // ld-elf32.so.1
#define VG_U_LD_ELF32_SO_1 "ld-elf32.so.1"
#endif
/* --- Executable name for Darwin Mach-O linker. --- */
#if defined(VGO_darwin)
@ -391,7 +405,7 @@ Bool VG_(is_soname_ld_so) (const HChar *soname);
// FreeBSD is b) pthread functions are lin libthr but semaphore
// functions are lin libc
#if defined(VGO_darwin)
#if defined(VGO_darwin) || defined(VGO_freebsd)
#define VG_WRAP_THREAD_FUNCTION_LIBPTHREAD_ONLY
#elif defined(VGO_solaris) || (defined(VGO_linux) && defined(MUSL_LIBC))
#define VG_WRAP_THREAD_FUNCTION_LIBC_ONLY

View File

@ -51,6 +51,8 @@
# include "vki/vki-darwin.h"
#elif defined(VGO_solaris)
# include "vki/vki-solaris.h"
#elif defined(VGO_freebsd)
# include "vki/vki-freebsd.h"
#else
# error Unknown Plat/OS
#endif

View File

@ -44,7 +44,6 @@ extern const HChar *VG_(sysnum_string) (Word sysnum);
// Macro provided for backward compatibility purposes.
#define VG_SYSNUM_STRING(sysnum) VG_(sysnum_string)(sysnum)
#endif // __PUB_TOOL_VKISCNUMS_H
/*--------------------------------------------------------------------*/

View File

@ -74,6 +74,9 @@
# include "vki/vki-scnums-shared-linux.h"
# include "vki/vki-scnums-mips64-linux.h"
#elif defined(VGP_x86_freebsd) || defined(VGP_amd64_freebsd)
# include "vki/vki-scnums-freebsd.h"
#elif defined(VGP_x86_darwin) || defined(VGP_amd64_darwin)
# include "vki/vki-scnums-darwin.h"

View File

@ -110,6 +110,8 @@
*/
#undef PLAT_x86_darwin
#undef PLAT_amd64_darwin
#undef PLAT_x86_freebsd
#undef PLAT_amd64_freebsd
#undef PLAT_x86_win32
#undef PLAT_amd64_win64
#undef PLAT_x86_linux
@ -131,6 +133,10 @@
# define PLAT_x86_darwin 1
#elif defined(__APPLE__) && defined(__x86_64__)
# define PLAT_amd64_darwin 1
#elif defined(__FreeBSD__) && defined(__i386__)
# define PLAT_x86_freebsd 1
#elif defined(__FreeBSD__) && defined(__amd64__)
# define PLAT_amd64_freebsd 1
#elif (defined(__MINGW32__) && defined(__i386__)) \
|| defined(__CYGWIN32__) \
|| (defined(_WIN32) && defined(_M_IX86))
@ -258,7 +264,7 @@
#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \
|| (defined(PLAT_x86_win32) && defined(__GNUC__)) \
|| defined(PLAT_x86_solaris)
|| defined(PLAT_x86_solaris) || defined(PLAT_x86_freebsd)
typedef
struct {
@ -398,6 +404,7 @@ valgrind_do_client_request_expr(uintptr_t _zzq_default, uintptr_t _zzq_request,
#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \
|| defined(PLAT_amd64_solaris) \
|| defined(PLAT_amd64_freebsd) \
|| (defined(PLAT_amd64_win64) && defined(__GNUC__))
typedef
@ -1219,7 +1226,7 @@ typedef
/* ----------------- x86-{linux,darwin,solaris} ---------------- */
#if defined(PLAT_x86_linux) || defined(PLAT_x86_darwin) \
|| defined(PLAT_x86_solaris)
|| defined(PLAT_x86_solaris) || defined(PLAT_x86_freebsd)
/* These regs are trashed by the hidden call. No need to mention eax
as gcc can already see that, plus causes gcc to bomb. */
@ -1651,7 +1658,7 @@ typedef
/* ---------------- amd64-{linux,darwin,solaris} --------------- */
#if defined(PLAT_amd64_linux) || defined(PLAT_amd64_darwin) \
|| defined(PLAT_amd64_solaris)
|| defined(PLAT_amd64_solaris) || defined(PLAT_amd64_freebsd)
/* ARGREGS: rdi rsi rdx rcx r8 r9 (the rest on stack in R-to-L order) */

View File

@ -0,0 +1,220 @@
/*
This file is part of Valgrind, a dynamic binary instrumentation
framework.
Copyright (C) 2000-2005 Julian Seward
jseward@acm.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
The GNU General Public License is contained in the file COPYING.
*/
#ifndef VKI_AMD64_FREEBSD_H
#define VKI_AMD64_FREEBSD_H
/* PAGE_SHIFT determines the page size. */
#define VKI_PAGE_SHIFT 12
#define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
#define VKI_MINSIGSTKSZ 2048
//----------------------------------------------------------------------
// sys/_sigset.h
//----------------------------------------------------------------------
#define _VKI_NSIG 128
#define _VKI_NSIG_WORDS 4
#define _VKI_NSIG_BPW ((_VKI_NSIG) / (_VKI_NSIG_WORDS))
#include "vki-machine-types-amd64-freebsd.h"
typedef struct {
vki_uint32_t sig[_VKI_NSIG_WORDS];
} vki_sigset_t;
struct _vki_fpstate {
unsigned short cwd;
unsigned short swd;
unsigned short twd;
unsigned short fop;
unsigned long rip;
unsigned long rdp;
unsigned int mxcsr;
unsigned int mxcsr_mask;
unsigned int st_space[32]; /* 8*16 bytes for each FP-reg */
unsigned int xmm_space[64]; /* 16*16 bytes for each XMM-reg */
unsigned int reserved2[24];
};
struct vki_sigcontext {
vki_sigset_t mask;
long onstack;
long rdi;
long rsi;
long rdx;
long rcx;
long r8;
long r9;
long rax;
long rbx;
long rbp;
long r10;
long r11;
long r12;
long r13;
long r14;
long r15;
int trapno;
short fs;
short gs;
long addr;
int flags;
short es;
short ds;
long err;
long rip;
long cs;
long rflags;
long rsp;
long ss;
long len; /* sizeof(mcontext_t) */
long fpformat;
long ownedfp;
struct _vki_fpstate fpstate;
long fsbase;
long gsbase;
long xfpustate;
long xfpustate_len;
long spare[4];
};
/*
* Retrieved from src/sys/amd64/include/reg.h
* Note that on 8.x trapno and err are no-more meaningful, but we
* don't set them anyway.
*/
struct vki_user_regs_struct {
vki_register_t r15;
vki_register_t r14;
vki_register_t r13;
vki_register_t r12;
vki_register_t r11;
vki_register_t r10;
vki_register_t r9;
vki_register_t r8;
vki_register_t rdi;
vki_register_t rsi;
vki_register_t rbp;
vki_register_t rbx;
vki_register_t rdx;
vki_register_t rcx;
vki_register_t rax;
vki_uint32_t trapno;
vki_uint16_t fs;
vki_uint16_t gs;
vki_uint32_t err;
vki_uint16_t es;
vki_uint16_t ds;
vki_register_t rip;
vki_register_t cs;
vki_register_t rflags;
vki_register_t rsp;
vki_register_t ss;
};
struct vki_fpreg {
unsigned long fpr_env[4];
unsigned char fpr_acc[8][16];
unsigned char fpr_xacc[16][16];
unsigned long fpr_spare[12];
};
struct vki_dbreg {
unsigned long dr[16];
};
typedef vki_register_t vki_elf_greg_t;
typedef struct _vki_fpstate vki_elf_fpregset_t;
#define VKI_AT_SYSINFO 32
#define VKI_ELF_NGREG \
(sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
struct vki_mcontext {
vki_register_t onstack; /* XXX - sigcontext compat. */
vki_register_t rdi; /* machine state (struct trapframe) */
vki_register_t rsi;
vki_register_t rdx;
vki_register_t rcx;
vki_register_t r8;
vki_register_t r9;
vki_register_t rax;
vki_register_t rbx;
vki_register_t rbp;
vki_register_t r10;
vki_register_t r11;
vki_register_t r12;
vki_register_t r13;
vki_register_t r14;
vki_register_t r15;
vki_uint32_t trapno;
vki_uint16_t fs;
vki_uint16_t gs;
vki_register_t addr;
vki_uint32_t flags;
vki_uint16_t es;
vki_uint16_t ds;
vki_register_t err;
vki_register_t rip;
vki_register_t cs;
vki_register_t rflags;
vki_register_t rsp;
vki_register_t ss;
long len;
long fpformat;
long ownedfp;
struct _vki_fpstate fpstate;// __attribute__((aligned(16)));
vki_register_t fsbase;
vki_register_t gsbase;
vki_register_t xfpustate;
vki_register_t xfpustate_len;
long spare2[4];
};
#define VKI_FPFMT_NODEV 0x10000
#define VKI_FPFMT_XMM 0x10002
#define VKI_FPOWNED_NONE 0x20000
#define VKI_FPOWNED_FPU 0x20001
#define VKI_FPOWNED_PCB 0x20002
struct vki_sigaction_base {
void (*ksa_handler)(int);
int sa_flags;
vki_sigset_t sa_mask; /* mask last for extensibility */
};
typedef struct vki_sigaction_base vki_sigaction_toK_t;
typedef struct vki_sigaction_base vki_sigaction_fromK_t;
#endif /* VKI_AMD64_FREEBSD_H */

3077
include/vki/vki-freebsd.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,75 @@
/*--------------------------------------------------------------------*/
/*--- x86/FreeBSD-specific kernel interface: posix types. ---*/
/*--- vki_posixtypes-x86-freebsd.h ---*/
/*--------------------------------------------------------------------*/
/*
This file is part of Valgrind, a dynamic binary instrumentation
framework.
Copyright (C) 2000-2005 Julian Seward
jseward@acm.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
The GNU General Public License is contained in the file COPYING.
*/
#ifndef VKI_MACHINE_TYPES_AMD64_FREEBSD_H
#define VKI_MACHINE_TYPES_AMD64_FREEBSD_H
//----------------------------------------------------------------------
// From sys/i386/include/_types.h
//----------------------------------------------------------------------
typedef __signed char vki_int8_t;
typedef unsigned char vki_uint8_t;
typedef short vki_int16_t;
typedef unsigned short vki_uint16_t;
typedef int vki_int32_t;
typedef unsigned int vki_uint32_t;
typedef long vki_int64_t;
typedef unsigned long vki_uint64_t;
typedef unsigned long vki_uintptr_t;
typedef long vki_intptr_t;
typedef unsigned int __vki_clock_t;
typedef unsigned int __vki_cpumask_t;
typedef char * __vki_caddr_t; /* QQQ 32 on 64 */
typedef double __vki_double_t;
typedef double __vki_float_t;
typedef vki_int64_t __vki_intfptr_t;
typedef vki_int64_t __vki_intmax_t;
typedef vki_int64_t __vki_ptrdiff_t;
typedef vki_int64_t __vki_register_t;
typedef vki_int64_t __vki_segsz_t;
typedef vki_uint64_t __vki_size_t;
typedef vki_int64_t __vki_ssize_t;
typedef vki_int64_t __vki_time_t;
typedef vki_uint64_t __vki_uintfptr_t;
typedef vki_uint64_t __vki_uintmax_t;
typedef vki_uint64_t __vki_u_register_t;
typedef vki_uint64_t __vki_vm_offset_t;
typedef vki_int64_t __vki_vm_ooffset_t;
typedef vki_uint64_t __vki_vm_paddr_t; /* QQQ int64 for PAE */
typedef vki_uint64_t __vki_vm_pindex_t;
typedef vki_uint64_t __vki_vm_size_t;
#endif // VKI_MACHINE_TYPES_AMD64_FREEBSD_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/

View File

@ -0,0 +1,75 @@
/*--------------------------------------------------------------------*/
/*--- x86/FreeBSD-specific kernel interface: posix types. ---*/
/*--- vki_posixtypes-x86-freebsd.h ---*/
/*--------------------------------------------------------------------*/
/*
This file is part of Valgrind, a dynamic binary instrumentation
framework.
Copyright (C) 2000-2005 Julian Seward
jseward@acm.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
The GNU General Public License is contained in the file COPYING.
*/
#ifndef __VKI_MACHINE_TYPES_X86_FREEBSD_H
#define __VKI_MACHINE_TYPES_X86_FREEBSD_H
//----------------------------------------------------------------------
// From sys/i386/include/_types.h
//----------------------------------------------------------------------
typedef __signed char vki_int8_t;
typedef unsigned char vki_uint8_t;
typedef short vki_int16_t;
typedef unsigned short vki_uint16_t;
typedef int vki_int32_t;
typedef unsigned int vki_uint32_t;
typedef long long vki_int64_t;
typedef unsigned long long vki_uint64_t;
typedef unsigned int vki_uintptr_t;
typedef int vki_intptr_t;
typedef unsigned long __vki_clock_t;
typedef unsigned int __vki_cpumask_t;
typedef char * __vki_caddr_t; /* QQQ 32 on 64 */
typedef double __vki_double_t;
typedef double __vki_float_t;
typedef vki_int32_t __vki_intfptr_t;
typedef vki_int64_t __vki_intmax_t;
typedef vki_int32_t __vki_ptrdiff_t;
typedef vki_int32_t __vki_register_t;
typedef vki_int32_t __vki_segsz_t;
typedef vki_uint32_t __vki_size_t;
typedef vki_int32_t __vki_ssize_t;
typedef vki_int32_t __vki_time_t;
typedef vki_uint32_t __vki_uintfptr_t;
typedef vki_uint64_t __vki_uintmax_t;
typedef vki_uint32_t __vki_u_register_t;
typedef vki_uint32_t __vki_vm_offset_t;
typedef vki_int64_t __vki_vm_ooffset_t;
typedef vki_uint32_t __vki_vm_paddr_t; /* QQQ int64 for PAE */
typedef vki_uint64_t __vki_vm_pindex_t;
typedef vki_uint32_t __vki_vm_size_t;
#endif // __VKI_MACHINE_TYPES_X86_FREEBSD_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/

View File

@ -0,0 +1,657 @@
/*
This file is part of Valgrind, a dynamic binary instrumentation
framework.
Copyright (C) 2000-2005 Julian Seward
jseward@acm.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
The GNU General Public License is contained in the file COPYING.
*/
#ifndef VKI_UNISTD_FREEBSD_H
#define VKI_UNISTD_FREEBSD_H
#include "config.h"
#define VG_FREEBSD_SYSCALL_STD 0
#define VG_FREEBSD_SYSCALL0 1
#define VG_FREEBSD_SYSCALL198 2
// From sys/syscall.h
// @todo PJF ugly leading double underscores
// and why use the Linux style when FreeBSD uses SYS_[name]?
// I suppose that makes the generic code easier
#define __NR_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_wait4 7
/* old creat 8 */
#define __NR_link 9
#define __NR_unlink 10
/* obs execv 11 */
#define __NR_chdir 12
#define __NR_fchdir 13
#define __NR_freebsd11_mknod 14
#define __NR_chmod 15
#define __NR_chown 16
#define __NR_break 17
/* freebsd4 getfsstat 18 */
/* old lseek 19 */
#define __NR_getpid 20
#define __NR_mount 21
#define __NR_unmount 22
#define __NR_setuid 23
#define __NR_getuid 24
#define __NR_geteuid 25
#define __NR_ptrace 26
#define __NR_recvmsg 27
#define __NR_sendmsg 28
#define __NR_recvfrom 29
#define __NR_accept 30
#define __NR_getpeername 31
#define __NR_getsockname 32
#define __NR_access 33
#define __NR_chflags 34
#define __NR_fchflags 35
#define __NR_sync 36
#define __NR_kill 37
/* old stat 38 */
#define __NR_getppid 39
/* old lstat 40 */
#define __NR_dup 41
#define __NR_freebsd10_pipe 42
#define __NR_getegid 43
#define __NR_profil 44
#define __NR_ktrace 45
/* old sigaction 46 */
#define __NR_getgid 47
/* old sigprocmask 48 */
#define __NR_getlogin 49
#define __NR_setlogin 50
#define __NR_acct 51
/* old sigpending 52 */
#define __NR_sigaltstack 53
#define __NR_ioctl 54
#define __NR_reboot 55
#define __NR_revoke 56
#define __NR_symlink 57
#define __NR_readlink 58
#define __NR_execve 59
#define __NR_umask 60
#define __NR_chroot 61
/* old fstat 62 */
/* old getkerninfo 63 */
/* old getpagesize 64 */
#define __NR_msync 65
#define __NR_vfork 66
/* obs vread 67 */
/* obs vwrite 68 */
#define __NR_sbrk 69
#define __NR_sstk 70
/* old mmap 71 */
#define __NR_vadvise 72
#define __NR_munmap 73
#define __NR_mprotect 74
#define __NR_madvise 75
/* obs vhangup 76 */
/* obs vlimit 77 */
#define __NR_mincore 78
#define __NR_getgroups 79
#define __NR_setgroups 80
#define __NR_getpgrp 81
#define __NR_setpgid 82
#define __NR_setitimer 83
#define __NR_swapon 85
#define __NR_getitimer 86
/* old gethostname 87 */
/* old sethostname 88 */
#define __NR_getdtablesize 89
#define __NR_dup2 90
#define __NR_fcntl 92
#define __NR_select 93
#define __NR_fsync 95
#define __NR_setpriority 96
#define __NR_socket 97
#define __NR_connect 98
/* old accept 99 */
#define __NR_getpriority 100
/* old send 101 */
/* old recv 102 */
/* old sigreturn 103 */
#define __NR_bind 104
#define __NR_setsockopt 105
#define __NR_listen 106
/* obs vtimes 107 */
/* old sigvec 108 */
/* old sigblock 109 */
/* old sigsetmask 110 */
/* old sigsuspend 111 */
/* old sigstack 112 */
/* old recvmsg 113 */
/* old sendmsg 114 */
/* obs vtrace 115 */
#define __NR_gettimeofday 116
#define __NR_getrusage 117
#define __NR_getsockopt 118
#define __NR_readv 120
#define __NR_writev 121
#define __NR_settimeofday 122
#define __NR_fchown 123
#define __NR_fchmod 124
#define __NR_setreuid 126
#define __NR_setregid 127
#define __NR_rename 128
#define __NR_flock 131
#define __NR_mkfifo 132
#define __NR_sendto 133
#define __NR_shutdown 134
#define __NR_socketpair 135
#define __NR_mkdir 136
#define __NR_rmdir 137
#define __NR_utimes 138
/* obs freebsd sigreturn 139 */
#define __NR_adjtime 140
/* old getpeername 141 */
/* old gethostid 142 */
/* old sethostid 143 */
/* old getrlimit 144 */
/* old setrlimit 145 */
/* old killpg 146 */
#define __NR_setsid 147
#define __NR_quotactl 148
/* old quota 149 */
/* old getsockname 150 */
#define __NR_nlm_syscall 154
#define __NR_nfssvc 155
/* old getdirentries 156 */
#if (FREEBSD_VERS <= FREEBSD_10)
// these were removed in FreeBSD 11
#define __NR_freebsd4_statfs 157
#define __NR_freebsd4_fstatfs 158
#endif
#define __NR_lgetfh 160
#define __NR_getfh 161
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd4_getdomainname 162
#define __NR_freebsd4_setdomainname 163
#define __NR_freebsd4_uname 164
#endif
#define __NR_sysarch 165
#define __NR_rtprio 166
#define __NR_semsys 169
#define __NR_msgsys 170
#define __NR_shmsys 171
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd6_pread 173
#define __NR_freebsd6_pwrite 174
#endif
#define __NR_setfib 175
#define __NR_ntp_adjtime 176
#define __NR_setgid 181
#define __NR_setegid 182
#define __NR_seteuid 183
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_stat 188
#define __NR_freebsd11_fstat 189
#define __NR_freebsd11_lstat 190
#else
#define __NR_stat 188
#define __NR_fstat 189
#define __NR_lstat 190
#endif
#define __NR_pathconf 191
#define __NR_fpathconf 192
#define __NR_getrlimit 194
#define __NR_setrlimit 195
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_getdirentries 196
#else
#define __NR_getdirentries 196
#endif
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd6_mmap 197
#endif
#define __NR___syscall 198
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd6_lseek 199
#define __NR_freebsd6_truncate 200
#define __NR_freebsd6_ftruncate 201
#endif
#define __NR___sysctl 202
#define __NR_mlock 203
#define __NR_munlock 204
#define __NR_undelete 205
#define __NR_futimes 206
#define __NR_getpgid 207
#define __NR_poll 209
#define __NR_freebsd7___semctl 220
#define __NR_semget 221
#define __NR_semop 222
/* obs semconfig 223 */
#define __NR_freebsd7_msgctl 224
#define __NR_msgget 225
#define __NR_msgsnd 226
#define __NR_msgrcv 227
#define __NR_shmat 228
#define __NR_freebsd7_shmctl 229
#define __NR_shmdt 230
#define __NR_shmget 231
#define __NR_clock_gettime 232
#define __NR_clock_settime 233
#define __NR_clock_getres 234
#define __NR_ktimer_create 235
#define __NR_ktimer_delete 236
#define __NR_ktimer_settime 237
#define __NR_ktimer_gettime 238
#define __NR_ktimer_getoverrun 239
#define __NR_nanosleep 240
#define __NR_ffclock_getcounter 241
#define __NR_ffclock_setestimate 242
#define __NR_ffclock_getestimate 243
#define __NR_clock_nanosleep 244
#define __NR_clock_getcpuclockid2 247
#define __NR_ntp_gettime 248
#define __NR_minherit 250
#define __NR_rfork 251
/* ons openbsd_poll 252 */
#define __NR_issetugid 253
#define __NR_lchown 254
#define __NR_aio_read 255
#define __NR_aio_write 256
#define __NR_lio_listio 257
#define __NR_freebsd11_getdents 272
#define __NR_lchmod 274
/* obs netbsd_lchown 275 */
#define __NR_lutimes 276
/* obs netbsd_msync 277 */
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_nstat 278
#define __NR_freebsd11_nfstat 279
#define __NR_freebsd11_nlstat 280
#else
#define __NR_nstat 278
#define __NR_nfstat 279
#define __NR_nlstat 280
#endif
#define __NR_preadv 289
#define __NR_pwritev 290
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd4_fhstatfs 297
#endif
#define __NR_fhopen 298
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_fhstat 299
#else
#define __NR_fhstat 299
#endif
#define __NR_modnext 300
#define __NR_modstat 301
#define __NR_modfnext 302
#define __NR_modfind 303
#define __NR_kldload 304
#define __NR_kldunload 305
#define __NR_kldfind 306
#define __NR_kldnext 307
#define __NR_kldstat 308
#define __NR_kldfirstmod 309
#define __NR_getsid 310
#define __NR_setresuid 311
#define __NR_setresgid 312
/* obs signanosleep 313 */
#define __NR_aio_return 314
#define __NR_aio_suspend 315
#define __NR_aio_cancel 316
#define __NR_aio_error 317
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_oaio_read 318
#define __NR_oaio_write 319
#define __NR_olio_listio 320
#endif
#define __NR_yield 321
/* obs thr_sleep 323 */
/* obs thr_wakeup 324 */
#define __NR_mlockall 324
#define __NR_munlockall 325
#define __NR___getcwd 326
#define __NR_sched_setparam 327
#define __NR_sched_getparam 328
#define __NR_sched_setscheduler 329
#define __NR_sched_getscheduler 330
#define __NR_sched_yield 331
#define __NR_sched_get_priority_max 332
#define __NR_sched_get_priority_min 333
#define __NR_sched_rr_get_interval 334
#define __NR_utrace 335
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd4_sendfile 342
#endif
#define __NR_kldsym 337
#define __NR_jail 338
#define __NR_sigprocmask 340
#define __NR_sigsuspend 341
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd4_sigaction 342
#endif
#define __NR_sigpending 343
#if (FREEBSD_VERS <= FREEBSD_10)
#define __NR_freebsd4_sigreturn 344
#endif
#define __NR_sigtimedwait 345
#define __NR_sigwaitinfo 346
#define __NR___acl_get_file 347
#define __NR___acl_set_file 348
#define __NR___acl_get_fd 349
#define __NR___acl_set_fd 350
#define __NR___acl_delete_file 351
#define __NR___acl_delete_fd 352
#define __NR___acl_aclcheck_file 353
#define __NR___acl_aclcheck_fd 354
#define __NR_extattrctl 355
#define __NR_extattr_set_file 356
#define __NR_extattr_get_file 357
#define __NR_extattr_delete_file 358
#define __NR_aio_waitcomplete 359
#define __NR_getresuid 360
#define __NR_getresgid 361
#define __NR_kqueue 362
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_kevent 363
#else
#define __NR_kevent 363
#endif
/* obs __cap_get_proc 364 */
/* obs __cap_set_proc 365 */
/* obs __cap_get_fd 366 */
/* obs __cap_get_file 367 */
/* obs __cap_set_fd 368 */
/* obs __cap_set_file 369 */
#define __NR_extattr_set_fd 371
#define __NR_extattr_get_fd 372
#define __NR_extattr_delete_fd 373
#define __NR___setugid 374
/* obs nfsclnt 375 */
#define __NR_eaccess 376
#define __NR_nmount 378
/* obs kse_exit 379 */
/* obs kse_wakeup 380 */
/* obs kse_create 381 */
/* obs kse_thr_interrupt 382 */
/* obs kse_release 383 */
#define __NR___mac_get_proc 384
#define __NR___mac_set_proc 385
#define __NR___mac_get_fd 386
#define __NR___mac_get_file 387
#define __NR___mac_set_fd 388
#define __NR___mac_set_file 389
#define __NR_kenv 390
#define __NR_lchflags 391
#define __NR_uuidgen 392
#define __NR_sendfile 393
#define __NR_mac_syscall 394
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_getfsstat 395
#define __NR_freebsd11_statfs 396
#define __NR_freebsd11_fstatfs 397
#define __NR_freebsd11_fhstatfs 398
#else
#define __NR_getfsstat 395
#define __NR_statfs 396
#define __NR_fstatfs 397
#define __NR_fhstatfs 398
#endif
#define __NR_ksem_close 400
#define __NR_ksem_post 401
#define __NR_ksem_wait 402
#define __NR_ksem_trywait 403
#define __NR_ksem_init 404
#define __NR_ksem_open 405
#define __NR_ksem_unlink 406
#define __NR_ksem_getvalue 407
#define __NR_ksem_destroy 408
#define __NR___mac_get_pid 409
#define __NR___mac_get_link 410
#define __NR___mac_set_link 411
#define __NR_extattr_set_link 412
#define __NR_extattr_get_link 413
#define __NR_extattr_delete_link 414
#define __NR___mac_execve 415
#define __NR_sigaction 416
#define __NR_sigreturn 417
#define __NR_getcontext 421
#define __NR_setcontext 422
#define __NR_swapcontext 423
#define __NR_swapoff 424
#define __NR___acl_get_link 425
#define __NR___acl_set_link 426
#define __NR___acl_delete_link 427
#define __NR___acl_aclcheck_link 428
#define __NR_sigwait 429
#define __NR_thr_create 430
#define __NR_thr_exit 431
#define __NR_thr_self 432
#define __NR_thr_kill 433
#define __NR__umtx_lock 434
#define __NR__umtx_unlock 435
#define __NR_jail_attach 436
#define __NR_extattr_list_fd 437
#define __NR_extattr_list_file 438
#define __NR_extattr_list_link 439
/* obs kse_switchin 440 */
#define __NR_ksem_timedwait 441
#define __NR_thr_suspend 442
#define __NR_thr_wake 443
#define __NR_kldunloadf 444
#define __NR_audit 445
#define __NR_auditon 446
#define __NR_getauid 447
#define __NR_setauid 448
#define __NR_getaudit 449
#define __NR_setaudit 450
#define __NR_getaudit_addr 451
#define __NR_setaudit_addr 452
#define __NR_auditctl 453
#define __NR__umtx_op 454
#define __NR_thr_new 455
#define __NR_sigqueue 456
#define __NR_kmq_open 457
#define __NR_kmq_setattr 458
#define __NR_kmq_timedreceive 459
#define __NR_kmq_timedsend 460
#define __NR_kmq_notify 461
#define __NR_kmq_unlink 462
#define __NR_abort2 463
#define __NR_thr_set_name 464
#define __NR_aio_fsync 465
#define __NR_rtprio_thread 466
#define __NR_nosys467 467
#define __NR_nosys468 468
#define __NR___getpath_fromfd 469
#define __NR___getpath_fromaddr 470
#define __NR_sctp_peeloff 471
#define __NR_sctp_generic_sendmsg 472
#define __NR_sctp_generic_sendmsg_iov 473
#define __NR_sctp_generic_recvmsg 474
#define __NR_pread 475
#define __NR_pwrite 476
#define __NR_mmap 477
#define __NR_lseek 478
#define __NR_truncate 479
#define __NR_ftruncate 480
#define __NR_thr_kill2 481
// __NR_freebsd12_shm_open from FreeBSD 13
#define __NR_shm_open 482
#define __NR_shm_unlink 483
#define __NR_cpuset 484
#define __NR_cpuset_setid 485
#define __NR_cpuset_getid 486
#define __NR_cpuset_getaffinity 487
#define __NR_cpuset_setaffinity 488
#define __NR_faccessat 489
#define __NR_fchmodat 490
#define __NR_fchownat 491
#define __NR_fexecve 492
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_fstatat 493
#else
#define __NR_fstatat 493
#endif
#define __NR_futimesat 494
#define __NR_linkat 495
#define __NR_mkdirat 496
#define __NR_mkfifoat 497
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_freebsd11_mknodat 498
#else
#define __NR_mknodat 498
#endif
#define __NR_openat 499
#define __NR_readlinkat 500
#define __NR_renameat 501
#define __NR_symlinkat 502
#define __NR_unlinkat 503
#define __NR_posix_openpt 504
#define __NR_jail_get 506
#define __NR_jail_set 507
#define __NR_jail_remove 508
// __NR_freebsd12_closefrom from FreeBSD 13
#define __NR_closefrom 509
#define __NR___semctl 510
#define __NR_msgctl 511
#define __NR_shmctl 512
#define __NR_lpathconf 513
/* obs cap_new 514 */
#define __NR___cap_rights_get 515
#define __NR_cap_enter 516
#define __NR_cap_getmode 517
#define __NR_pdfork 518
#define __NR_pdkill 519
#define __NR_pdgetpid 520
#define __NR_pselect 522
#define __NR_getloginclass 523
#define __NR_setloginclass 524
#define __NR_rctl_get_racct 525
#define __NR_rctl_get_rules 526
#define __NR_rctl_get_limits 527
#define __NR_rctl_add_rule 528
#define __NR_rctl_remove_rule 529
#define __NR_posix_fallocate 530
#define __NR_posix_fadvise 531
#define __NR_wait6 532
#define __NR_cap_rights_limit 533
#define __NR_cap_ioctls_limit 534
#define __NR_cap_ioctls_get 535
#define __NR_cap_fcntls_limit 536
#define __NR_cap_fcntls_get 537
#define __NR_bindat 538
#define __NR_connectat 539
#define __NR_chflagsat 540
#define __NR_accept4 541
#define __NR_pipe2 542
#define __NR_aio_mlock 543
#define __NR_procctl 544
#define __NR_ppoll 545
#define __NR_futimens 546
#define __NR_utimensat 547
/* obs numa_getaffinity 548 */
/* obs numa_setaffinity 549 */
#if (FREEBSD_VERS >= FREEBSD_11)
#define __NR_fdatasync 550
#endif // (FREEBSD_VERS >= FREEBSD_11)
#if (FREEBSD_VERS >= FREEBSD_12)
#define __NR_fstat 551
#define __NR_fstatat 552
#define __NR_fhstat 553
#define __NR_getdirentries 554
#define __NR_statfs 555
#define __NR_fstatfs 556
#define __NR_getfsstat 557
#define __NR_fhstatfs 558
#define __NR_mknodat 559
#define __NR_kevent 560
#define __NR_cpuset_getdomain 561
#define __NR_cpuset_setdomain 562
#define __NR_getrandom 563
#define __NR_getfhat 564
#define __NR_fhlink 565
#define __NR_fhlinkat 566
#define __NR_fhreadlink 567
#endif // (FREEBSD_VERS >= FREEBSD_12)
#if (FREEBSD_VERS >= FREEBSD_12_2)
#define __NR_funlinkat 568
#define __NR_copy_file_range 569
#define __NR___sysctlbyname 570
#define __NR_shm_open2 571
#define __NR_shm_rename 572
#define __NR_sigfastblock 573
#define __NR___realpathat 574
#define __NR_close_range 575
#endif
#if (FREEBSD_VERS >= FREEBSD_13)
#define __NR_rpctls_syscall 576
#endif
#if (FREEBSD_VERS >= FREEBSD_14)
#define __NR___specialfd 577
#define __NR_aio_writev 578
#define __NR_aio_readv 579
#endif
#define __NR_fake_sigreturn 1000
#endif /* VKI_UNISTD_FREEBSD_H */

View File

@ -0,0 +1,247 @@
/*--------------------------------------------------------------------*/
/*--- x86/FreeBSD-specific kernel interface. vki-x86-freebsd.h ---*/
/*--------------------------------------------------------------------*/
/*
This file is part of Valgrind, a dynamic binary instrumentation
framework.
Copyright (C) 2009 Stanislav Sedov <stas@FreeBSD.org>
Copyright (C) 2000-2005 Julian Seward
jseward@acm.org
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
The GNU General Public License is contained in the file COPYING.
*/
#ifndef VKI_X86_FREEBSD_H
#define VKI_X86_FREEBSD_H
//----------------------------------------------------------------------
// From somewhere
//----------------------------------------------------------------------
/* PAGE_SHIFT determines the page size */
#define VKI_PAGE_SHIFT 12
#define VKI_PAGE_SIZE (1UL << VKI_PAGE_SHIFT)
#define VKI_MAX_PAGE_SHIFT VKI_PAGE_SHIFT
#define VKI_MAX_PAGE_SIZE VKI_PAGE_SIZE
//----------------------------------------------------------------------
// From sys/i386/include/_limits.h and sys/sys/_sigset.h
//----------------------------------------------------------------------
#define VKI_MINSIGSTKSZ (512 * 4)
#define _VKI_NSIG 128
#define _VKI_NSIG_WORDS 4
#define _VKI_NSIG_BPW ((_VKI_NSIG) / (_VKI_NSIG_WORDS))
typedef struct {
vki_uint32_t sig[_VKI_NSIG_WORDS];
} vki_sigset_t;
//----------------------------------------------------------------------
// From sys/i386/include/npx.h
//----------------------------------------------------------------------
struct _vki_env87 {
long en_cw;
long en_sw;
long en_tw;
long en_fip;
unsigned short en_fcs;
unsigned short en_opcode;
long en_foo;
long en_fos;
};
struct _vki_fpacc87 {
unsigned char fp_bytes[10];
};
struct _vki_save87 {
struct _vki_env87 sv_env;
struct _vki_fpacc87 sv_ac[8];
unsigned char sv_pad0[4];
unsigned char sv_pad[64];
};
struct _vki_xmmacc {
unsigned char xmm_bytes[16];
};
struct _vki_envxmm {
unsigned short en_cw;
unsigned short en_sw;
unsigned short en_tw;
unsigned short en_opcode;
unsigned int en_fip;
unsigned short en_fcs;
unsigned short en_pad0;
unsigned int en_foo;
unsigned short en_fos;
unsigned short en_pad1;
unsigned int en_mxcsr;
unsigned int en_mxcsr_mask;
};
struct _vki_savexmm {
struct _vki_envxmm sv_env;
struct {
struct _vki_fpacc87 fp_acc;
unsigned char fp_pad[6];
} sv_fp[8];
struct _vki_xmmacc sv_xmm[8];
unsigned char sv_pad[224];
};
struct _vki_fpstate {
union {
struct _vki_save87 sv_87;
struct _vki_savexmm sv_xmm;
};
};
struct vki_sigcontext {
vki_sigset_t sc_mask;
int onstack;
int gs;
int fs;
int es;
int ds;
int edi;
int esi;
int ebp;
int isp;
int ebx;
int edx;
int ecx;
int eax;
int trapno;
int err;
int eip;
int cs;
int eflags;
int esp;
int ss;
int len;
int fpformat;
int ownedfp;
int spare1[1];
struct _vki_fpstate fpstate __attribute__((aligned(16)));
int fsbase;
int gsbase;
int spare2[6];
};
struct vki_user_regs_struct {
unsigned int fs;
unsigned int es;
unsigned int ds;
unsigned int edi;
unsigned int esi;
unsigned int ebp;
unsigned int isp;
unsigned int ebx;
unsigned int edx;
unsigned int ecx;
unsigned int eax;
unsigned int trapno;
unsigned int err;
unsigned int eip;
unsigned int cs;
unsigned int eflags;
unsigned int esp;
unsigned int ss;
unsigned int gs;
};
struct vki_fpreg {
unsigned long fpr_env[7];
unsigned char fpr_acc[8][10];
unsigned long fpr_ex_sw;
unsigned char fpr_pad[64];
};
struct vki_dbreg {
unsigned int dr[8];
};
typedef unsigned int vki_elf_greg_t;
typedef struct _vki_fpstate vki_elf_fpregset_t;
typedef struct _vki_fpstate vki_elf_fpxregset_t;
#define VKI_AT_SYSINFO 32
#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
#define VKI_FPFMT_NODEV 0x10000
#define VKI_FPFMT_387 0x10001
#define VKI_FPFMT_XMM 0x10002
#define VKI_FPOWNED_NONE 0x20000
#define VKI_FPOWNED_FPU 0x20001
#define VKI_FPOWNED_PCB 0x20002
struct vki_mcontext {
int onstack;
int gs;
int fs;
int es;
int ds;
int edi;
int esi;
int ebp;
int isp;
int ebx;
int edx;
int ecx;
int eax;
int trapno;
int err;
int eip;
int cs;
int eflags;
int esp;
int ss;
int len;
int fpformat;
int ownedfp;
int flags;
struct _vki_fpstate fpstate __attribute__((aligned(16)));
int fsbase;
int gsbase;
int xfpustate;
int xfpustate_len;
int spare2[4];
};
struct vki_sigaction_base {
void (*ksa_handler)(int);
int sa_flags;
vki_sigset_t sa_mask; /* mask last for extensibility */
};
typedef struct vki_sigaction_base vki_sigaction_toK_t;
typedef struct vki_sigaction_base vki_sigaction_fromK_t;
#endif // VKI_X86_FREEBSD_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/