HardenedBSD/sys/compat/freebsd32/freebsd32.h
John Baldwin dbee5c671a Move the 32-bit compatible procfs types from freebsd32.h to <sys/procfs.h>
and export them to userland.
- Define __HAVE_REG32 on platforms that define a reg32 structure and check
  for this in <sys/procfs.h> to control when to export prstatus32, etc.
- Add prstatus32_t and prpsinfo32_t typedefs for the 32-bit structures.
  libbfd looks for these types, and having them fixes 'gcore' in gdb of a
  32-bit process on a 64-bit platform.
- Use the structure definitions from <sys/procfs.h> in gcore's elf32 core
  dump code instead of duplicating the definitions.

Differential Revision:	https://reviews.freebsd.org/D2142
Reviewed by:	kib, nathanw (powerpc bits)
MFC after:	1 week
2015-04-08 16:30:45 +00:00

374 lines
8.1 KiB
C

/*-
* Copyright (c) 2001 Doug Rabson
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _COMPAT_FREEBSD32_FREEBSD32_H_
#define _COMPAT_FREEBSD32_FREEBSD32_H_
#include <sys/procfs.h>
#include <sys/socket.h>
#include <sys/user.h>
#define PTRIN(v) (void *)(uintptr_t) (v)
#define PTROUT(v) (u_int32_t)(uintptr_t) (v)
#define CP(src,dst,fld) do { (dst).fld = (src).fld; } while (0)
#define PTRIN_CP(src,dst,fld) \
do { (dst).fld = PTRIN((src).fld); } while (0)
#define PTROUT_CP(src,dst,fld) \
do { (dst).fld = PTROUT((src).fld); } while (0)
/*
* Being a newer port, 32-bit FreeBSD/MIPS uses 64-bit time_t.
*/
#ifdef __mips__
typedef int64_t time32_t;
#else
typedef int32_t time32_t;
#endif
struct timeval32 {
time32_t tv_sec;
int32_t tv_usec;
};
#define TV_CP(src,dst,fld) do { \
CP((src).fld,(dst).fld,tv_sec); \
CP((src).fld,(dst).fld,tv_usec); \
} while (0)
struct timespec32 {
time32_t tv_sec;
int32_t tv_nsec;
};
#define TS_CP(src,dst,fld) do { \
CP((src).fld,(dst).fld,tv_sec); \
CP((src).fld,(dst).fld,tv_nsec); \
} while (0)
struct itimerspec32 {
struct timespec32 it_interval;
struct timespec32 it_value;
};
#define ITS_CP(src, dst) do { \
TS_CP((src), (dst), it_interval); \
TS_CP((src), (dst), it_value); \
} while (0)
struct rusage32 {
struct timeval32 ru_utime;
struct timeval32 ru_stime;
int32_t ru_maxrss;
int32_t ru_ixrss;
int32_t ru_idrss;
int32_t ru_isrss;
int32_t ru_minflt;
int32_t ru_majflt;
int32_t ru_nswap;
int32_t ru_inblock;
int32_t ru_oublock;
int32_t ru_msgsnd;
int32_t ru_msgrcv;
int32_t ru_nsignals;
int32_t ru_nvcsw;
int32_t ru_nivcsw;
};
struct wrusage32 {
struct rusage32 wru_self;
struct rusage32 wru_children;
};
struct itimerval32 {
struct timeval32 it_interval;
struct timeval32 it_value;
};
#define FREEBSD4_MNAMELEN (88 - 2 * sizeof(int32_t)) /* size of on/from name bufs */
/* 4.x version */
struct statfs32 {
int32_t f_spare2;
int32_t f_bsize;
int32_t f_iosize;
int32_t f_blocks;
int32_t f_bfree;
int32_t f_bavail;
int32_t f_files;
int32_t f_ffree;
fsid_t f_fsid;
uid_t f_owner;
int32_t f_type;
int32_t f_flags;
int32_t f_syncwrites;
int32_t f_asyncwrites;
char f_fstypename[MFSNAMELEN];
char f_mntonname[FREEBSD4_MNAMELEN];
int32_t f_syncreads;
int32_t f_asyncreads;
int16_t f_spares1;
char f_mntfromname[FREEBSD4_MNAMELEN];
int16_t f_spares2 __packed;
int32_t f_spare[2];
};
struct kevent32 {
u_int32_t ident; /* identifier for this event */
short filter; /* filter for event */
u_short flags;
u_int fflags;
int32_t data;
u_int32_t udata; /* opaque user data identifier */
};
struct iovec32 {
u_int32_t iov_base;
int iov_len;
};
struct msghdr32 {
u_int32_t msg_name;
socklen_t msg_namelen;
u_int32_t msg_iov;
int msg_iovlen;
u_int32_t msg_control;
socklen_t msg_controllen;
int msg_flags;
};
struct stat32 {
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
struct timespec32 st_atim;
struct timespec32 st_mtim;
struct timespec32 st_ctim;
off_t st_size;
int64_t st_blocks;
u_int32_t st_blksize;
u_int32_t st_flags;
u_int32_t st_gen;
int32_t st_lspare;
struct timespec32 st_birthtim;
unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec32));
};
struct ostat32 {
__uint16_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
__uint16_t st_uid;
__uint16_t st_gid;
__uint16_t st_rdev;
__int32_t st_size;
struct timespec32 st_atim;
struct timespec32 st_mtim;
struct timespec32 st_ctim;
__int32_t st_blksize;
__int32_t st_blocks;
u_int32_t st_flags;
__uint32_t st_gen;
};
struct jail32_v0 {
u_int32_t version;
uint32_t path;
uint32_t hostname;
u_int32_t ip_number;
};
struct jail32 {
uint32_t version;
uint32_t path;
uint32_t hostname;
uint32_t jailname;
uint32_t ip4s;
uint32_t ip6s;
uint32_t ip4;
uint32_t ip6;
};
struct sigaction32 {
u_int32_t sa_u;
int sa_flags;
sigset_t sa_mask;
};
struct thr_param32 {
uint32_t start_func;
uint32_t arg;
uint32_t stack_base;
uint32_t stack_size;
uint32_t tls_base;
uint32_t tls_size;
uint32_t child_tid;
uint32_t parent_tid;
int32_t flags;
uint32_t rtp;
uint32_t spare[3];
};
struct i386_ldt_args32 {
uint32_t start;
uint32_t descs;
uint32_t num;
};
struct mq_attr32 {
int mq_flags;
int mq_maxmsg;
int mq_msgsize;
int mq_curmsgs;
int __reserved[4];
};
struct kinfo_proc32 {
int ki_structsize;
int ki_layout;
uint32_t ki_args;
uint32_t ki_paddr;
uint32_t ki_addr;
uint32_t ki_tracep;
uint32_t ki_textvp;
uint32_t ki_fd;
uint32_t ki_vmspace;
uint32_t ki_wchan;
pid_t ki_pid;
pid_t ki_ppid;
pid_t ki_pgid;
pid_t ki_tpgid;
pid_t ki_sid;
pid_t ki_tsid;
short ki_jobc;
short ki_spare_short1;
dev_t ki_tdev;
sigset_t ki_siglist;
sigset_t ki_sigmask;
sigset_t ki_sigignore;
sigset_t ki_sigcatch;
uid_t ki_uid;
uid_t ki_ruid;
uid_t ki_svuid;
gid_t ki_rgid;
gid_t ki_svgid;
short ki_ngroups;
short ki_spare_short2;
gid_t ki_groups[KI_NGROUPS];
uint32_t ki_size;
int32_t ki_rssize;
int32_t ki_swrss;
int32_t ki_tsize;
int32_t ki_dsize;
int32_t ki_ssize;
u_short ki_xstat;
u_short ki_acflag;
fixpt_t ki_pctcpu;
u_int ki_estcpu;
u_int ki_slptime;
u_int ki_swtime;
u_int ki_cow;
u_int64_t ki_runtime;
struct timeval32 ki_start;
struct timeval32 ki_childtime;
int ki_flag;
int ki_kiflag;
int ki_traceflag;
char ki_stat;
signed char ki_nice;
char ki_lock;
char ki_rqindex;
u_char ki_oncpu_old;
u_char ki_lastcpu_old;
char ki_tdname[TDNAMLEN+1];
char ki_wmesg[WMESGLEN+1];
char ki_login[LOGNAMELEN+1];
char ki_lockname[LOCKNAMELEN+1];
char ki_comm[COMMLEN+1];
char ki_emul[KI_EMULNAMELEN+1];
char ki_loginclass[LOGINCLASSLEN+1];
char ki_sparestrings[50];
int ki_spareints[KI_NSPARE_INT];
int ki_oncpu;
int ki_lastcpu;
int ki_tracer;
int ki_flag2;
int ki_fibnum;
u_int ki_cr_flags;
int ki_jid;
int ki_numthreads;
lwpid_t ki_tid;
struct priority ki_pri;
struct rusage32 ki_rusage;
struct rusage32 ki_rusage_ch;
uint32_t ki_pcb;
uint32_t ki_kstack;
uint32_t ki_udata;
uint32_t ki_tdaddr;
uint32_t ki_spareptrs[KI_NSPARE_PTR]; /* spare room for growth */
int ki_sparelongs[KI_NSPARE_LONG];
int ki_sflag;
int ki_tdflags;
};
struct kinfo_sigtramp32 {
uint32_t ksigtramp_start;
uint32_t ksigtramp_end;
uint32_t ksigtramp_spare[4];
};
struct kld32_file_stat_1 {
int version; /* set to sizeof(struct kld_file_stat_1) */
char name[MAXPATHLEN];
int refs;
int id;
uint32_t address; /* load address */
uint32_t size; /* size in bytes */
};
struct kld32_file_stat {
int version; /* set to sizeof(struct kld_file_stat) */
char name[MAXPATHLEN];
int refs;
int id;
uint32_t address; /* load address */
uint32_t size; /* size in bytes */
char pathname[MAXPATHLEN];
};
struct procctl_reaper_pids32 {
u_int rp_count;
u_int rp_pad0[15];
uint32_t rp_pids;
};
#endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */