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
This commit is contained in:
parent
d61251e934
commit
dbee5c671a
@ -243,32 +243,6 @@ struct i386_ldt_args32 {
|
|||||||
uint32_t num;
|
uint32_t num;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Alternative layouts for <sys/procfs.h>
|
|
||||||
*/
|
|
||||||
struct prstatus32 {
|
|
||||||
int pr_version;
|
|
||||||
u_int pr_statussz;
|
|
||||||
u_int pr_gregsetsz;
|
|
||||||
u_int pr_fpregsetsz;
|
|
||||||
int pr_osreldate;
|
|
||||||
int pr_cursig;
|
|
||||||
pid_t pr_pid;
|
|
||||||
struct reg32 pr_reg;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct prpsinfo32 {
|
|
||||||
int pr_version;
|
|
||||||
u_int pr_psinfosz;
|
|
||||||
char pr_fname[PRFNAMESZ+1];
|
|
||||||
char pr_psargs[PRARGSZ+1];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct thrmisc32 {
|
|
||||||
char pr_tname[MAXCOMLEN+1];
|
|
||||||
u_int _pad;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct mq_attr32 {
|
struct mq_attr32 {
|
||||||
int mq_flags;
|
int mq_flags;
|
||||||
int mq_maxmsg;
|
int mq_maxmsg;
|
||||||
|
@ -70,7 +70,7 @@ struct dbreg {
|
|||||||
unsigned long junk;
|
unsigned long junk;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef COMPAT_FREEBSD32
|
#ifdef __LP64__
|
||||||
/* Must match struct trapframe */
|
/* Must match struct trapframe */
|
||||||
struct reg32 {
|
struct reg32 {
|
||||||
uint32_t r_regs[NUMSAVEREGS];
|
uint32_t r_regs[NUMSAVEREGS];
|
||||||
@ -83,6 +83,8 @@ struct fpreg32 {
|
|||||||
struct dbreg32 {
|
struct dbreg32 {
|
||||||
uint32_t junk;
|
uint32_t junk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define __HAVE_REG32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
|
@ -39,7 +39,7 @@ struct dbreg {
|
|||||||
unsigned int junk;
|
unsigned int junk;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef COMPAT_FREEBSD32
|
#ifdef __LP64__
|
||||||
/* Must match struct trapframe */
|
/* Must match struct trapframe */
|
||||||
struct reg32 {
|
struct reg32 {
|
||||||
int32_t fixreg[32];
|
int32_t fixreg[32];
|
||||||
@ -61,6 +61,8 @@ struct vmxreg32 {
|
|||||||
struct dbreg32 {
|
struct dbreg32 {
|
||||||
struct dbreg data;
|
struct dbreg data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define __HAVE_REG32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
|
@ -98,6 +98,12 @@ struct dbreg {
|
|||||||
int dummy;
|
int dummy;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NB: sparcv8 binaries are not supported even though this header
|
||||||
|
* defines the relevant structures.
|
||||||
|
*/
|
||||||
|
#define __HAVE_REG32
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
/*
|
/*
|
||||||
* XXX these interfaces are MI, so they should be declared in a MI place.
|
* XXX these interfaces are MI, so they should be declared in a MI place.
|
||||||
|
@ -89,4 +89,29 @@ typedef struct thrmisc {
|
|||||||
|
|
||||||
typedef uint64_t psaddr_t; /* An address in the target process. */
|
typedef uint64_t psaddr_t; /* An address in the target process. */
|
||||||
|
|
||||||
|
#ifdef __HAVE_REG32
|
||||||
|
typedef struct prstatus32 {
|
||||||
|
int32_t pr_version;
|
||||||
|
uint32_t pr_statussz;
|
||||||
|
uint32_t pr_gregsetsz;
|
||||||
|
uint32_t pr_fpregsetsz;
|
||||||
|
int32_t pr_osreldate;
|
||||||
|
int32_t pr_cursig;
|
||||||
|
int32_t pr_pid;
|
||||||
|
struct reg32 pr_reg;
|
||||||
|
} prstatus32_t;
|
||||||
|
|
||||||
|
typedef struct prpsinfo32 {
|
||||||
|
int32_t pr_version;
|
||||||
|
uint32_t pr_psinfosz;
|
||||||
|
char pr_fname[PRFNAMESZ+1];
|
||||||
|
char pr_psargs[PRARGSZ+1];
|
||||||
|
} prpsinfo32_t;
|
||||||
|
|
||||||
|
struct thrmisc32 {
|
||||||
|
char pr_tname[MAXCOMLEN+1];
|
||||||
|
uint32_t _pad;
|
||||||
|
};
|
||||||
|
#endif /* __HAVE_REG32 */
|
||||||
|
|
||||||
#endif /* _SYS_PROCFS_H_ */
|
#endif /* _SYS_PROCFS_H_ */
|
||||||
|
@ -91,6 +91,7 @@
|
|||||||
#define __fpreg64 fpreg
|
#define __fpreg64 fpreg
|
||||||
#define __dbreg32 dbreg32
|
#define __dbreg32 dbreg32
|
||||||
#define __dbreg64 dbreg
|
#define __dbreg64 dbreg
|
||||||
|
#define __HAVE_REG32
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8,24 +8,6 @@
|
|||||||
|
|
||||||
#include <sys/procfs.h>
|
#include <sys/procfs.h>
|
||||||
|
|
||||||
struct prpsinfo32 {
|
|
||||||
int pr_version;
|
|
||||||
u_int pr_psinfosz;
|
|
||||||
char pr_fname[PRFNAMESZ+1];
|
|
||||||
char pr_psargs[PRARGSZ+1];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct prstatus32 {
|
|
||||||
int pr_version;
|
|
||||||
u_int pr_statussz;
|
|
||||||
u_int pr_gregsetsz;
|
|
||||||
u_int pr_fpregsetsz;
|
|
||||||
int pr_osreldate;
|
|
||||||
int pr_cursig;
|
|
||||||
pid_t pr_pid;
|
|
||||||
struct reg32 pr_reg;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define ELFCORE_COMPAT_32 1
|
#define ELFCORE_COMPAT_32 1
|
||||||
#include "elfcore.c"
|
#include "elfcore.c"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user