diff options
author | jhb <jhb@FreeBSD.org> | 2015-06-02 14:54:53 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2015-06-02 14:54:53 +0000 |
commit | cb2edec922e11c0dcda53db951d9f33ae4096cd5 (patch) | |
tree | f5b76ef5f39fba89a6da6cb1a11b89d1dd7dd5b7 | |
parent | c89b9bba4337ee06f879632c707eee953d70d3a6 (diff) | |
download | FreeBSD-src-cb2edec922e11c0dcda53db951d9f33ae4096cd5.zip FreeBSD-src-cb2edec922e11c0dcda53db951d9f33ae4096cd5.tar.gz |
MFC 281266:
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.
-rw-r--r-- | sys/compat/freebsd32/freebsd32.h | 26 | ||||
-rw-r--r-- | sys/ia64/include/reg.h | 2 | ||||
-rw-r--r-- | sys/mips/include/reg.h | 4 | ||||
-rw-r--r-- | sys/powerpc/include/reg.h | 4 | ||||
-rw-r--r-- | sys/sparc64/include/reg.h | 6 | ||||
-rw-r--r-- | sys/sys/procfs.h | 25 | ||||
-rw-r--r-- | sys/x86/include/reg.h | 1 | ||||
-rw-r--r-- | usr.bin/gcore/elf32core.c | 18 |
8 files changed, 40 insertions, 46 deletions
diff --git a/sys/compat/freebsd32/freebsd32.h b/sys/compat/freebsd32/freebsd32.h index 221cdf3..bbe41cf 100644 --- a/sys/compat/freebsd32/freebsd32.h +++ b/sys/compat/freebsd32/freebsd32.h @@ -243,32 +243,6 @@ struct i386_ldt_args32 { 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 { int mq_flags; int mq_maxmsg; diff --git a/sys/ia64/include/reg.h b/sys/ia64/include/reg.h index af6489d..74211e2 100644 --- a/sys/ia64/include/reg.h +++ b/sys/ia64/include/reg.h @@ -81,6 +81,8 @@ struct dbreg { unsigned long dbr_inst[8]; }; +#define __HAVE_REG32 + #ifdef _KERNEL struct thread; diff --git a/sys/mips/include/reg.h b/sys/mips/include/reg.h index c240506..0dc36c6 100644 --- a/sys/mips/include/reg.h +++ b/sys/mips/include/reg.h @@ -70,7 +70,7 @@ struct dbreg { unsigned long junk; }; -#ifdef COMPAT_FREEBSD32 +#ifdef __LP64__ /* Must match struct trapframe */ struct reg32 { uint32_t r_regs[NUMSAVEREGS]; @@ -83,6 +83,8 @@ struct fpreg32 { struct dbreg32 { uint32_t junk; }; + +#define __HAVE_REG32 #endif #ifdef _KERNEL diff --git a/sys/powerpc/include/reg.h b/sys/powerpc/include/reg.h index 3d2d581..c774641 100644 --- a/sys/powerpc/include/reg.h +++ b/sys/powerpc/include/reg.h @@ -28,7 +28,7 @@ struct dbreg { unsigned int junk; }; -#ifdef COMPAT_FREEBSD32 +#ifdef __LP64__ /* Must match struct trapframe */ struct reg32 { int32_t fixreg[32]; @@ -46,6 +46,8 @@ struct fpreg32 { struct dbreg32 { struct dbreg data; }; + +#define __HAVE_REG32 #endif #ifdef _KERNEL diff --git a/sys/sparc64/include/reg.h b/sys/sparc64/include/reg.h index d224186..8a4dd2a 100644 --- a/sys/sparc64/include/reg.h +++ b/sys/sparc64/include/reg.h @@ -98,6 +98,12 @@ struct dbreg { int dummy; }; +/* + * NB: sparcv8 binaries are not supported even though this header + * defines the relevant structures. + */ +#define __HAVE_REG32 + #ifdef _KERNEL /* * XXX these interfaces are MI, so they should be declared in a MI place. diff --git a/sys/sys/procfs.h b/sys/sys/procfs.h index cab9c30..7066a98 100644 --- a/sys/sys/procfs.h +++ b/sys/sys/procfs.h @@ -89,4 +89,29 @@ typedef struct thrmisc { 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_ */ diff --git a/sys/x86/include/reg.h b/sys/x86/include/reg.h index 56668ea8..a1452cc 100644 --- a/sys/x86/include/reg.h +++ b/sys/x86/include/reg.h @@ -91,6 +91,7 @@ #define __fpreg64 fpreg #define __dbreg32 dbreg32 #define __dbreg64 dbreg +#define __HAVE_REG32 #endif /* diff --git a/usr.bin/gcore/elf32core.c b/usr.bin/gcore/elf32core.c index de48500..d13a4ef 100644 --- a/usr.bin/gcore/elf32core.c +++ b/usr.bin/gcore/elf32core.c @@ -8,24 +8,6 @@ #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 #include "elfcore.c" |