Module Name:    src
Committed By:   dsl
Date:           Sat Jan  4 00:10:03 UTC 2014

Modified Files:
        src/sys/arch/alpha/alpha: process_machdep.c
        src/sys/arch/amd64/amd64: netbsd32_machdep.c process_machdep.c
        src/sys/arch/amd64/include: netbsd32_machdep.h
        src/sys/arch/arm/arm: core_machdep.c process_machdep.c
        src/sys/arch/hppa/hppa: core_machdep.c process_machdep.c
        src/sys/arch/i386/i386: process_machdep.c
        src/sys/arch/ia64/ia64: process_machdep.c
        src/sys/arch/m68k/include: reg.h
        src/sys/arch/m68k/m68k: core_machdep.c process_machdep.c
        src/sys/arch/mips/include: types.h
        src/sys/arch/mips/mips: process_machdep.c
        src/sys/arch/powerpc/powerpc: process_machdep.c
        src/sys/arch/sparc/sparc: process_machdep.c
        src/sys/arch/sparc64/include: netbsd32_machdep.h
        src/sys/arch/sparc64/sparc64: netbsd32_machdep.c process_machdep.c
        src/sys/arch/usermode/usermode: process_machdep.c
        src/sys/arch/x86/x86: core_machdep.c
        src/sys/compat/linux/arch/amd64: linux_machdep.c
        src/sys/compat/linux/arch/i386: linux_ptrace.c
        src/sys/compat/linux/arch/powerpc: linux_ptrace.c
        src/sys/kern: core_elf32.c sys_process.c
        src/sys/sys: ptrace.h

Log Message:
Remove __HAVE_PROCESS_XFPREGS and add the extra parameter for the size
  of the fp save area to all the process_read_fpregs() and
  process_write_fpregs() functions.
None of the functions have been modified to use the new parameters.
The size is set for all the writes, but some of the arch-specific reads
  just pass NULL.
The amd64 (and i386) need variable sized fp register save areas in order
  to support AVX and other enhanced register areas.
These functions are rarely called - so the extra argument won't matter.


To generate a diff of this commit:
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/alpha/alpha/process_machdep.c
cvs rdiff -u -r1.86 -r1.87 src/sys/arch/amd64/amd64/netbsd32_machdep.c
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/amd64/amd64/process_machdep.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/amd64/include/netbsd32_machdep.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/arm/core_machdep.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/arm/arm/process_machdep.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/hppa/hppa/core_machdep.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/hppa/hppa/process_machdep.c
cvs rdiff -u -r1.75 -r1.76 src/sys/arch/i386/i386/process_machdep.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/ia64/ia64/process_machdep.c
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/m68k/include/reg.h
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/m68k/m68k/core_machdep.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/m68k/m68k/process_machdep.c
cvs rdiff -u -r1.53 -r1.54 src/sys/arch/mips/include/types.h
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/mips/mips/process_machdep.c
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/powerpc/powerpc/process_machdep.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/sparc/sparc/process_machdep.c
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/sparc64/include/netbsd32_machdep.h
cvs rdiff -u -r1.101 -r1.102 src/sys/arch/sparc64/sparc64/netbsd32_machdep.c
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sparc64/sparc64/process_machdep.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/usermode/usermode/process_machdep.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/x86/x86/core_machdep.c
cvs rdiff -u -r1.43 -r1.44 src/sys/compat/linux/arch/amd64/linux_machdep.c
cvs rdiff -u -r1.26 -r1.27 src/sys/compat/linux/arch/i386/linux_ptrace.c
cvs rdiff -u -r1.23 -r1.24 src/sys/compat/linux/arch/powerpc/linux_ptrace.c
cvs rdiff -u -r1.41 -r1.42 src/sys/kern/core_elf32.c
cvs rdiff -u -r1.162 -r1.163 src/sys/kern/sys_process.c
cvs rdiff -u -r1.44 -r1.45 src/sys/sys/ptrace.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/alpha/alpha/process_machdep.c
diff -u src/sys/arch/alpha/alpha/process_machdep.c:1.27 src/sys/arch/alpha/alpha/process_machdep.c:1.28
--- src/sys/arch/alpha/alpha/process_machdep.c:1.27	Mon Feb  6 02:14:12 2012
+++ src/sys/arch/alpha/alpha/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: process_machdep.c,v 1.27 2012/02/06 02:14:12 matt Exp $ */
+/* $NetBSD: process_machdep.c,v 1.28 2014/01/04 00:10:02 dsl Exp $ */
 
 /*
  * Copyright (c) 1994 Christopher G. Demetriou
@@ -54,7 +54,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.27 2012/02/06 02:14:12 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.28 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -112,7 +112,7 @@ process_set_pc(struct lwp *l, void *addr
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *sz)
 {
 	struct pcb *pcb = lwp_getpcb(l);
 
@@ -123,7 +123,7 @@ process_read_fpregs(struct lwp *l, struc
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 	struct pcb *pcb = lwp_getpcb(l);
 

Index: src/sys/arch/amd64/amd64/netbsd32_machdep.c
diff -u src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.86 src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.87
--- src/sys/arch/amd64/amd64/netbsd32_machdep.c:1.86	Wed Jan  1 18:57:15 2014
+++ src/sys/arch/amd64/amd64/netbsd32_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.86 2014/01/01 18:57:15 dsl Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.87 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.86 2014/01/01 18:57:15 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.87 2014/01/04 00:10:02 dsl Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -486,7 +486,7 @@ cpu_coredump32(struct lwp *l, struct cor
 		return error;
 
 	/* Save floating point registers. */
-	error = netbsd32_process_read_fpregs(l, &md_core.freg);
+	error = netbsd32_process_read_fpregs(l, &md_core.freg, NULL);
 	if (error)
 		return error;
 
@@ -569,10 +569,11 @@ xmm_to_s87_tag(const uint8_t *fpac, int 
 }
 
 int
-netbsd32_process_read_fpregs(struct lwp *l, struct fpreg32 *regs)
+netbsd32_process_read_fpregs(struct lwp *l, struct fpreg32 *regs, size_t *sz)
 {
 	struct fpreg regs64;
 	struct save87 *s87 = (struct save87 *)regs;
+	size_t fp_size;
 	int error, i;
 
 	union fp_addr {
@@ -596,7 +597,8 @@ netbsd32_process_read_fpregs(struct lwp 
 	 * All that stuff makes no sense in i386 code :(
 	 */
 
-	error = process_read_fpregs(l, &regs64);
+	fp_size = sizeof regs64;
+	error = process_read_fpregs(l, &regs64, &fp_size);
 	if (error)
 		return error;
 

Index: src/sys/arch/amd64/amd64/process_machdep.c
diff -u src/sys/arch/amd64/amd64/process_machdep.c:1.24 src/sys/arch/amd64/amd64/process_machdep.c:1.25
--- src/sys/arch/amd64/amd64/process_machdep.c:1.24	Thu Dec 12 22:41:03 2013
+++ src/sys/arch/amd64/amd64/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.24 2013/12/12 22:41:03 dsl Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.25 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
@@ -53,7 +53,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.24 2013/12/12 22:41:03 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.25 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -103,7 +103,7 @@ process_read_regs(struct lwp *l, struct 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs,size_t *sz)
 {
 	struct fxsave64 *frame = process_fpframe(l);
 
@@ -158,7 +158,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 	struct fxsave64 *frame = process_fpframe(l);
 

Index: src/sys/arch/amd64/include/netbsd32_machdep.h
diff -u src/sys/arch/amd64/include/netbsd32_machdep.h:1.17 src/sys/arch/amd64/include/netbsd32_machdep.h:1.18
--- src/sys/arch/amd64/include/netbsd32_machdep.h:1.17	Sun Feb 19 21:06:02 2012
+++ src/sys/arch/amd64/include/netbsd32_machdep.h	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.h,v 1.17 2012/02/19 21:06:02 rmind Exp $	*/
+/*	$NetBSD: netbsd32_machdep.h,v 1.18 2014/01/04 00:10:02 dsl Exp $	*/
 
 #ifndef _MACHINE_NETBSD32_H_
 #define _MACHINE_NETBSD32_H_
@@ -151,6 +151,10 @@ struct fpacc87 {
 struct save87 {
 	struct env87	sv_env;
 	struct fpacc87	sv_ac[8];
+	/*
+	 * The fields below are not in the 'struct fpreg32' that is
+	 * otherwise the same as this structure (for coredumps).
+	 */
 	int32_t		sv_ex_sw;
 	int32_t		sv_ex_tw;
 	uint8_t		sv_pad[8 * 2 - 2 * 4];
@@ -159,6 +163,6 @@ struct save87 {
 #define NETBSD32_MID_MACHINE MID_I386
 
 int netbsd32_process_read_regs(struct lwp *, struct reg32 *);
-int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *);
+int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *, size_t *);
 
 #endif /* _MACHINE_NETBSD32_H_ */

Index: src/sys/arch/arm/arm/core_machdep.c
diff -u src/sys/arch/arm/arm/core_machdep.c:1.3 src/sys/arch/arm/arm/core_machdep.c:1.4
--- src/sys/arch/arm/arm/core_machdep.c:1.3	Wed Jan  1 18:57:15 2014
+++ src/sys/arch/arm/arm/core_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: core_machdep.c,v 1.3 2014/01/01 18:57:15 dsl Exp $	*/
+/*	$NetBSD: core_machdep.c,v 1.4 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 1994-1998 Mark Brinicombe.
@@ -37,7 +37,7 @@
 
 #include <sys/param.h>
 
-__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.3 2014/01/01 18:57:15 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.4 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/core.h>
 #include <sys/exec.h>
@@ -80,7 +80,7 @@ cpu_coredump(struct lwp *l, struct cored
 	if (error)
 		return error;
 	/* Save floating point registers. */
-	error = process_read_fpregs(l, &cpustate.fpregs);
+	error = process_read_fpregs(l, &cpustate.fpregs, NULL);
 	if (error)
 		return error;
 

Index: src/sys/arch/arm/arm/process_machdep.c
diff -u src/sys/arch/arm/arm/process_machdep.c:1.28 src/sys/arch/arm/arm/process_machdep.c:1.29
--- src/sys/arch/arm/arm/process_machdep.c:1.28	Mon Oct 14 18:14:08 2013
+++ src/sys/arch/arm/arm/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.28 2013/10/14 18:14:08 skrll Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.29 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 1993 The Regents of the University of California.
@@ -133,7 +133,7 @@
 
 #include <sys/param.h>
 
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.28 2013/10/14 18:14:08 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.29 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/proc.h>
 #include <sys/ptrace.h>
@@ -172,7 +172,7 @@ process_read_regs(struct lwp *l, struct 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *sz)
 {
 #ifdef FPU_VFP
 	if (curcpu()->ci_vfp_id == 0) {
@@ -220,7 +220,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 #ifdef FPU_VFP
 	if (curcpu()->ci_vfp_id == 0) {

Index: src/sys/arch/hppa/hppa/core_machdep.c
diff -u src/sys/arch/hppa/hppa/core_machdep.c:1.5 src/sys/arch/hppa/hppa/core_machdep.c:1.6
--- src/sys/arch/hppa/hppa/core_machdep.c:1.5	Wed Jan  1 18:57:15 2014
+++ src/sys/arch/hppa/hppa/core_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: core_machdep.c,v 1.5 2014/01/01 18:57:15 dsl Exp $	*/
+/*	$NetBSD: core_machdep.c,v 1.6 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*	$OpenBSD: vm_machdep.c,v 1.25 2001/09/19 20:50:56 mickey Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.5 2014/01/01 18:57:15 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.6 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -77,7 +77,7 @@ cpu_coredump(struct lwp *l, struct cored
 		return error;
 
 	/* Save floating point registers. */
-	error = process_read_fpregs(l, &md_core.md_fpreg);
+	error = process_read_fpregs(l, &md_core.md_fpreg, NULL);
 	if (error)
 		return error;
 

Index: src/sys/arch/hppa/hppa/process_machdep.c
diff -u src/sys/arch/hppa/hppa/process_machdep.c:1.17 src/sys/arch/hppa/hppa/process_machdep.c:1.18
--- src/sys/arch/hppa/hppa/process_machdep.c:1.17	Thu Mar  3 09:37:21 2011
+++ src/sys/arch/hppa/hppa/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.17 2011/03/03 09:37:21 skrll Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.18 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*	$OpenBSD: process_machdep.c,v 1.3 1999/06/18 05:19:52 mickey Exp $	*/
 
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.17 2011/03/03 09:37:21 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.18 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -108,7 +108,7 @@ process_read_regs(struct lwp *l, struct 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *fpregs)
+process_read_fpregs(struct lwp *l, struct fpreg *fpregs, size_t *sz)
 {
 	struct pcb *pcb = lwp_getpcb(l);
 
@@ -177,7 +177,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *fpregs)
+process_write_fpregs(struct lwp *l, const struct fpreg *fpregs, size_t sz)
 {
 	struct pcb *pcb = lwp_getpcb(l);
 

Index: src/sys/arch/i386/i386/process_machdep.c
diff -u src/sys/arch/i386/i386/process_machdep.c:1.75 src/sys/arch/i386/i386/process_machdep.c:1.76
--- src/sys/arch/i386/i386/process_machdep.c:1.75	Sun Dec  8 20:45:30 2013
+++ src/sys/arch/i386/i386/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.75 2013/12/08 20:45:30 dsl Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.76 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -52,7 +52,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.75 2013/12/08 20:45:30 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.76 2014/01/04 00:10:02 dsl Exp $");
 
 #include "opt_vm86.h"
 #include "opt_ptrace.h"
@@ -238,7 +238,7 @@ process_read_regs(struct lwp *l, struct 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *sz)
 {
 	union savefpu *frame = process_fpframe(l);
 
@@ -341,7 +341,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 	union savefpu *frame = process_fpframe(l);
 

Index: src/sys/arch/ia64/ia64/process_machdep.c
diff -u src/sys/arch/ia64/ia64/process_machdep.c:1.5 src/sys/arch/ia64/ia64/process_machdep.c:1.6
--- src/sys/arch/ia64/ia64/process_machdep.c:1.5	Mon Jul 20 04:41:37 2009
+++ src/sys/arch/ia64/ia64/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.5 2009/07/20 04:41:37 kiyohara Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.6 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.5 2009/07/20 04:41:37 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.6 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/ptrace.h>
@@ -53,7 +53,7 @@ printf("%s: not yet\n", __func__);
 
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *fpregs)
+process_read_fpregs(struct lwp *l, struct fpreg *fpregs, size_t *sz)
 {
 printf("%s: not yet\n", __func__);
 	return 0;
@@ -61,7 +61,7 @@ printf("%s: not yet\n", __func__);
 
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *fpregs)
+process_write_fpregs(struct lwp *l, const struct fpreg *fpregs, size_t sz)
 {
 printf("%s: not yet\n", __func__);
 	return 0;

Index: src/sys/arch/m68k/include/reg.h
diff -u src/sys/arch/m68k/include/reg.h:1.18 src/sys/arch/m68k/include/reg.h:1.19
--- src/sys/arch/m68k/include/reg.h:1.18	Tue Feb  8 20:20:16 2011
+++ src/sys/arch/m68k/include/reg.h	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: reg.h,v 1.18 2011/02/08 20:20:16 rmind Exp $	*/
+/*	$NetBSD: reg.h,v 1.19 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -97,7 +97,7 @@ struct fpreg {
 
 struct lwp;
 int	process_read_regs(struct lwp *, struct reg *);
-int	process_read_fpregs(struct lwp *, struct fpreg *);
+int	process_read_fpregs(struct lwp *, struct fpreg *, size_t *);
 
 #endif
 

Index: src/sys/arch/m68k/m68k/core_machdep.c
diff -u src/sys/arch/m68k/m68k/core_machdep.c:1.5 src/sys/arch/m68k/m68k/core_machdep.c:1.6
--- src/sys/arch/m68k/m68k/core_machdep.c:1.5	Wed Jan  1 18:57:15 2014
+++ src/sys/arch/m68k/m68k/core_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: core_machdep.c,v 1.5 2014/01/01 18:57:15 dsl Exp $	*/
+/*	$NetBSD: core_machdep.c,v 1.6 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.5 2014/01/01 18:57:15 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.6 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -91,7 +91,7 @@ cpu_coredump(struct lwp *l, struct cored
 
 	if (fputype) {
 		/* Save floating point registers. */
-		error = process_read_fpregs(l, &md_core.freg);
+		error = process_read_fpregs(l, &md_core.freg, NULL);
 		if (error)
 			return error;
 	} else {

Index: src/sys/arch/m68k/m68k/process_machdep.c
diff -u src/sys/arch/m68k/m68k/process_machdep.c:1.29 src/sys/arch/m68k/m68k/process_machdep.c:1.30
--- src/sys/arch/m68k/m68k/process_machdep.c:1.29	Fri Jan 14 02:06:27 2011
+++ src/sys/arch/m68k/m68k/process_machdep.c	Sat Jan  4 00:10:02 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.29 2011/01/14 02:06:27 rmind Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.30 2014/01/04 00:10:02 dsl Exp $	*/
 
 /*
  * Copyright (c) 1993 Christopher G. Demetriou
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.29 2011/01/14 02:06:27 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.30 2014/01/04 00:10:02 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -96,7 +96,7 @@ process_read_regs(struct lwp *l, struct 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *sz)
 {
 	struct fpframe *frame = process_fpframe(l);
 
@@ -140,7 +140,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 	struct fpframe *frame = process_fpframe(l);
 

Index: src/sys/arch/mips/include/types.h
diff -u src/sys/arch/mips/include/types.h:1.53 src/sys/arch/mips/include/types.h:1.54
--- src/sys/arch/mips/include/types.h:1.53	Tue Aug 16 06:58:15 2011
+++ src/sys/arch/mips/include/types.h	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: types.h,v 1.53 2011/08/16 06:58:15 matt Exp $	*/
+/*	$NetBSD: types.h,v 1.54 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -142,7 +142,6 @@ typedef	volatile unsigned int	__cpu_simp
 #define	__HAVE_FAST_SOFTINTS
 #define	__HAVE_AST_PERPROC
 #define	__HAVE_SYSCALL_INTERN
-#define	__HAVE_PROCESS_XFPREGS
 #define	__HAVE_CPU_LWP_SETPRIVATE
 #define	__HAVE_CPU_DATA_FIRST
 #define	__HAVE_MD_CPU_OFFLINE

Index: src/sys/arch/mips/mips/process_machdep.c
diff -u src/sys/arch/mips/mips/process_machdep.c:1.36 src/sys/arch/mips/mips/process_machdep.c:1.37
--- src/sys/arch/mips/mips/process_machdep.c:1.36	Thu Jul 14 22:31:22 2011
+++ src/sys/arch/mips/mips/process_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.36 2011/07/14 22:31:22 matt Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.37 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*
  * Copyright (c) 1993 The Regents of the University of California.
@@ -76,7 +76,7 @@
  */
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.36 2011/07/14 22:31:22 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.37 2014/01/04 00:10:03 dsl Exp $");
 
 /*
  * This file may seem a bit stylized, but that so that it's easier to port.
@@ -134,7 +134,7 @@ CTASSERT(sizeof(struct fpreg_oabi) <= si
 #endif
 
 int
-process_read_xfpregs(struct lwp *l, struct fpreg *regs, size_t *regslen_p)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *regslen_p)
 {
 	struct pcb * const pcb = lwp_getpcb(l);
 	KASSERT(*regslen_p == sizeof(struct fpreg));
@@ -150,7 +150,7 @@ process_read_xfpregs(struct lwp *l, stru
 }
 
 int
-process_write_xfpregs(struct lwp *l, const struct fpreg *regs, size_t regslen)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t regslen)
 {
 	struct pcb * const pcb = lwp_getpcb(l);
 

Index: src/sys/arch/powerpc/powerpc/process_machdep.c
diff -u src/sys/arch/powerpc/powerpc/process_machdep.c:1.35 src/sys/arch/powerpc/powerpc/process_machdep.c:1.36
--- src/sys/arch/powerpc/powerpc/process_machdep.c:1.35	Tue Sep 27 01:02:36 2011
+++ src/sys/arch/powerpc/powerpc/process_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.35 2011/09/27 01:02:36 jym Exp $	*/
+/*	$NetBSD: process_machdep.c,v 1.36 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.35 2011/09/27 01:02:36 jym Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.36 2014/01/04 00:10:03 dsl Exp $");
 
 #include "opt_altivec.h"
 
@@ -82,7 +82,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *fpregs)
+process_read_fpregs(struct lwp *l, struct fpreg *fpregs, size_t *sz)
 {
 	struct pcb * const pcb = lwp_getpcb(l);
 
@@ -105,7 +105,7 @@ process_read_fpregs(struct lwp *l, struc
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *fpregs)
+process_write_fpregs(struct lwp *l, const struct fpreg *fpregs, size_t sz)
 {
 	struct pcb * const pcb = lwp_getpcb(l);
 

Index: src/sys/arch/sparc/sparc/process_machdep.c
diff -u src/sys/arch/sparc/sparc/process_machdep.c:1.17 src/sys/arch/sparc/sparc/process_machdep.c:1.18
--- src/sys/arch/sparc/sparc/process_machdep.c:1.17	Sat Nov 21 04:16:51 2009
+++ src/sys/arch/sparc/sparc/process_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.17 2009/11/21 04:16:51 rmind Exp $ */
+/*	$NetBSD: process_machdep.c,v 1.18 2014/01/04 00:10:03 dsl Exp $ */
 
 /*
  * Copyright (c) 1993 The Regents of the University of California.
@@ -95,7 +95,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.17 2009/11/21 04:16:51 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.18 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -146,7 +146,7 @@ process_set_pc(struct lwp *p, void *addr
 }
 
 int
-process_read_fpregs(struct lwp *p, struct fpreg *regs)
+process_read_fpregs(struct lwp *p, struct fpreg *regs, size_t *sz)
 {
 	extern struct fpstate	initfpstate;
 	struct fpstate		*statep = &initfpstate;
@@ -159,7 +159,7 @@ process_read_fpregs(struct lwp *p, struc
 }
 
 int
-process_write_fpregs(struct lwp *p, const struct fpreg *regs)
+process_write_fpregs(struct lwp *p, const struct fpreg *regs, size_t sz)
 {
 
 	if (p->l_md.md_fpstate == NULL)

Index: src/sys/arch/sparc64/include/netbsd32_machdep.h
diff -u src/sys/arch/sparc64/include/netbsd32_machdep.h:1.27 src/sys/arch/sparc64/include/netbsd32_machdep.h:1.28
--- src/sys/arch/sparc64/include/netbsd32_machdep.h:1.27	Thu May 29 14:51:26 2008
+++ src/sys/arch/sparc64/include/netbsd32_machdep.h	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.h,v 1.27 2008/05/29 14:51:26 mrg Exp $	*/
+/*	$NetBSD: netbsd32_machdep.h,v 1.28 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -77,6 +77,6 @@ int netbsd32_md_ioctl(struct file *, net
 #define NETBSD32_MID_MACHINE MID_SPARC
 
 int netbsd32_process_read_regs(struct lwp *, struct reg32 *);
-int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *);
+int netbsd32_process_read_fpregs(struct lwp *, struct fpreg32 *, size_t *);
 
 #endif /* _MACHINE_NETBSD32_H_ */

Index: src/sys/arch/sparc64/sparc64/netbsd32_machdep.c
diff -u src/sys/arch/sparc64/sparc64/netbsd32_machdep.c:1.101 src/sys/arch/sparc64/sparc64/netbsd32_machdep.c:1.102
--- src/sys/arch/sparc64/sparc64/netbsd32_machdep.c:1.101	Wed Jan  1 18:57:16 2014
+++ src/sys/arch/sparc64/sparc64/netbsd32_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_machdep.c,v 1.101 2014/01/01 18:57:16 dsl Exp $	*/
+/*	$NetBSD: netbsd32_machdep.c,v 1.102 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.101 2014/01/01 18:57:16 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_machdep.c,v 1.102 2014/01/04 00:10:03 dsl Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -641,7 +641,7 @@ netbsd32_process_write_regs(struct lwp *
 #endif
 
 int
-netbsd32_process_read_fpregs(struct lwp *l, struct fpreg32 *regs)
+netbsd32_process_read_fpregs(struct lwp *l, struct fpreg32 *regs, size_t *sz)
 {
 	extern const struct fpstate64 initfpstate;
 	const struct fpstate64	*statep = &initfpstate;

Index: src/sys/arch/sparc64/sparc64/process_machdep.c
diff -u src/sys/arch/sparc64/sparc64/process_machdep.c:1.23 src/sys/arch/sparc64/sparc64/process_machdep.c:1.24
--- src/sys/arch/sparc64/sparc64/process_machdep.c:1.23	Sat Nov 21 04:16:52 2009
+++ src/sys/arch/sparc64/sparc64/process_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: process_machdep.c,v 1.23 2009/11/21 04:16:52 rmind Exp $ */
+/*	$NetBSD: process_machdep.c,v 1.24 2014/01/04 00:10:03 dsl Exp $ */
 
 /*
  * Copyright (c) 1993 The Regents of the University of California.
@@ -95,7 +95,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.23 2009/11/21 04:16:52 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.24 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -199,7 +199,7 @@ process_set_pc(struct lwp *l, void *addr
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *sz)
 {
 	extern const struct fpstate64 initfpstate;
 	const struct fpstate64	*statep = &initfpstate;
@@ -225,7 +225,7 @@ process_read_fpregs(struct lwp *l, struc
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 	struct fpstate64	*statep;
 	const struct fpreg32	*regp = (const struct fpreg32 *)regs;

Index: src/sys/arch/usermode/usermode/process_machdep.c
diff -u src/sys/arch/usermode/usermode/process_machdep.c:1.2 src/sys/arch/usermode/usermode/process_machdep.c:1.3
--- src/sys/arch/usermode/usermode/process_machdep.c:1.2	Wed Oct 21 16:07:00 2009
+++ src/sys/arch/usermode/usermode/process_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: process_machdep.c,v 1.2 2009/10/21 16:07:00 snj Exp $ */
+/* $NetBSD: process_machdep.c,v 1.3 2014/01/04 00:10:03 dsl Exp $ */
 
 /*-
  * Copyright (c) 2007 Jared D. McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.2 2009/10/21 16:07:00 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: process_machdep.c,v 1.3 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -40,7 +40,7 @@ process_read_regs(struct lwp *l, struct 
 }
 
 int
-process_read_fpregs(struct lwp *l, struct fpreg *regs)
+process_read_fpregs(struct lwp *l, struct fpreg *regs, size_t *sz)
 {
 	return 0;
 }
@@ -52,7 +52,7 @@ process_write_regs(struct lwp *l, const 
 }
 
 int
-process_write_fpregs(struct lwp *l, const struct fpreg *regs)
+process_write_fpregs(struct lwp *l, const struct fpreg *regs, size_t sz)
 {
 	return 0;
 }

Index: src/sys/arch/x86/x86/core_machdep.c
diff -u src/sys/arch/x86/x86/core_machdep.c:1.4 src/sys/arch/x86/x86/core_machdep.c:1.5
--- src/sys/arch/x86/x86/core_machdep.c:1.4	Wed Jan  1 18:57:16 2014
+++ src/sys/arch/x86/x86/core_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: core_machdep.c,v 1.4 2014/01/01 18:57:16 dsl Exp $	*/
+/*	$NetBSD: core_machdep.c,v 1.5 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986 The Regents of the University of California.
@@ -80,7 +80,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.4 2014/01/01 18:57:16 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: core_machdep.c,v 1.5 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -115,6 +115,7 @@ cpu_coredump(struct lwp *l, struct cored
 {
 	struct md_core md_core;
 	struct coreseg cseg;
+	size_t fp_size;
 	int error;
 
 	if (iocookie == NULL) {
@@ -132,7 +133,8 @@ cpu_coredump(struct lwp *l, struct cored
 		return error;
 
 	/* Save floating point registers. */
-	error = process_read_fpregs(l, &md_core.freg);
+	fp_size = sizeof md_core.freg;
+	error = process_read_fpregs(l, &md_core.freg, &fp_size);
 	if (error)
 		return error;
 

Index: src/sys/compat/linux/arch/amd64/linux_machdep.c
diff -u src/sys/compat/linux/arch/amd64/linux_machdep.c:1.43 src/sys/compat/linux/arch/amd64/linux_machdep.c:1.44
--- src/sys/compat/linux/arch/amd64/linux_machdep.c:1.43	Sun Dec  1 01:05:16 2013
+++ src/sys/compat/linux/arch/amd64/linux_machdep.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_machdep.c,v 1.43 2013/12/01 01:05:16 christos Exp $ */
+/*	$NetBSD: linux_machdep.c,v 1.44 2014/01/04 00:10:03 dsl Exp $ */
 
 /*-
  * Copyright (c) 2005 Emmanuel Dreyfus, all rights reserved.
@@ -33,7 +33,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.43 2013/12/01 01:05:16 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_machdep.c,v 1.44 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/types.h>
@@ -229,7 +229,8 @@ linux_sendsig(const ksiginfo_t *ksi, con
 	 * Save FPU state, if any 
 	 */
 	if (fpsp != NULL) {
-		(void)process_read_fpregs(l, &fpregs);
+		size_t fp_size = sizeof fpregs;
+		(void)process_read_fpregs(l, &fpregs, &fp_size);
 		memset(&fpstate, 0, sizeof(fpstate));
 		fpstate.cwd = fpregs.fp_fcw;
 		fpstate.swd = fpregs.fp_fsw;

Index: src/sys/compat/linux/arch/i386/linux_ptrace.c
diff -u src/sys/compat/linux/arch/i386/linux_ptrace.c:1.26 src/sys/compat/linux/arch/i386/linux_ptrace.c:1.27
--- src/sys/compat/linux/arch/i386/linux_ptrace.c:1.26	Wed Jul  7 01:30:34 2010
+++ src/sys/compat/linux/arch/i386/linux_ptrace.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_ptrace.c,v 1.26 2010/07/07 01:30:34 chs Exp $	*/
+/*	$NetBSD: linux_ptrace.c,v 1.27 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ptrace.c,v 1.26 2010/07/07 01:30:34 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ptrace.c,v 1.27 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/malloc.h>
@@ -137,6 +137,7 @@ linux_sys_ptrace_arch(struct lwp *l, con
 	struct linux_fpctx *linux_fpregs = NULL;
 	struct linux_emuldata *led;
 	int request, error, addr;
+	size_t fp_size;
 
 	if (linux_ptrace_disabled)
 		return ENOSYS;
@@ -264,17 +265,18 @@ linux_sys_ptrace_arch(struct lwp *l, con
 		break;
 
 	case LINUX_PTRACE_GETFPREGS:
-		error = process_read_fpregs(lt, fpregs);
+		fp_size = sizeof fpregs;
+		error = process_read_fpregs(lt, fpregs, &fp_size);
 		mutex_exit(t->p_lock);
 		if (error) {
 			break;
 		}
 		/* Zero the contents if NetBSD fpreg structure is smaller */
-		if (sizeof(struct fpreg) < sizeof(struct linux_fpctx)) {
+		if (fp_size < sizeof(struct linux_fpctx)) {
 			memset(linux_fpregs, '\0', sizeof(struct linux_fpctx));
 		}
 		memcpy(linux_fpregs, fpregs,
-		    min(sizeof(struct linux_fpctx), sizeof(struct fpreg)));
+		    min(sizeof(struct linux_fpctx), fp_size));
 		error = copyout(linux_fpregs, (void *)SCARG(uap, data),
 		    sizeof(struct linux_fpctx));
 		break;

Index: src/sys/compat/linux/arch/powerpc/linux_ptrace.c
diff -u src/sys/compat/linux/arch/powerpc/linux_ptrace.c:1.23 src/sys/compat/linux/arch/powerpc/linux_ptrace.c:1.24
--- src/sys/compat/linux/arch/powerpc/linux_ptrace.c:1.23	Thu Jul  1 02:38:28 2010
+++ src/sys/compat/linux/arch/powerpc/linux_ptrace.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_ptrace.c,v 1.23 2010/07/01 02:38:28 rmind Exp $ */
+/*	$NetBSD: linux_ptrace.c,v 1.24 2014/01/04 00:10:03 dsl Exp $ */
 
 /*-
  * Copyright (c) 1999, 2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ptrace.c,v 1.23 2010/07/01 02:38:28 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ptrace.c,v 1.24 2014/01/04 00:10:03 dsl Exp $");
 
 #include <sys/param.h>
 #include <sys/malloc.h>
@@ -237,7 +237,7 @@ linux_sys_ptrace_arch(struct lwp *l, con
 		break;
 
 	case LINUX_PTRACE_GETFPREGS:
-		error = process_read_fpregs(lt, fpregs);
+		error = process_read_fpregs(lt, fpregs, NULL);
 		mutex_exit(t->p_lock);
 		if (error) {
 			break;
@@ -256,7 +256,7 @@ linux_sys_ptrace_arch(struct lwp *l, con
 		memset(fpregs, '\0', sizeof(struct fpreg));
 		memcpy(fpregs, linux_fpreg,
 		    min(32 * sizeof(double), sizeof(struct fpreg)));
-		error = process_write_fpregs(lt, fpregs);
+		error = process_write_fpregs(lt, fpregs, sizeof fpregs);
 		mutex_exit(t->p_lock);
 		break;
 

Index: src/sys/kern/core_elf32.c
diff -u src/sys/kern/core_elf32.c:1.41 src/sys/kern/core_elf32.c:1.42
--- src/sys/kern/core_elf32.c:1.41	Fri Jan  3 21:34:40 2014
+++ src/sys/kern/core_elf32.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: core_elf32.c,v 1.41 2014/01/03 21:34:40 dsl Exp $	*/
+/*	$NetBSD: core_elf32.c,v 1.42 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: core_elf32.c,v 1.41 2014/01/03 21:34:40 dsl Exp $");
+__KERNEL_RCSID(1, "$NetBSD: core_elf32.c,v 1.42 2014/01/04 00:10:03 dsl Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_coredump.h"
@@ -98,11 +98,7 @@ static int	ELFNAMEEND(coredump_note)(str
 #define	ELFROUNDSIZE	4	/* XXX Should it be sizeof(Elf_Word)? */
 
 #define elf_process_read_regs	CONCAT(process_read_regs, ELFSIZE)
-#ifdef __HAVE_PROCESS_XFPREGS
-#define elf_process_read_xfpregs CONCAT(process_read_xfpregs, ELFSIZE)
-#else
 #define elf_process_read_fpregs	CONCAT(process_read_fpregs, ELFSIZE)
-#endif
 #define elf_reg			CONCAT(process_reg, ELFSIZE)
 #define elf_fpreg		CONCAT(process_fpreg, ELFSIZE)
 
@@ -432,11 +428,7 @@ ELFNAMEEND(coredump_note)(struct lwp *l,
 
 #ifdef PT_GETFPREGS
 	freglen = sizeof(freg);
-#ifdef __HAVE_PROCESS_XFPREGS
-	error = elf_process_read_xfpregs(l, &freg, &freglen);
-#else
-	error = elf_process_read_fpregs(l, &freg);
-#endif
+	error = elf_process_read_fpregs(l, &freg, &freglen);
 	if (error)
 		return (error);
 

Index: src/sys/kern/sys_process.c
diff -u src/sys/kern/sys_process.c:1.162 src/sys/kern/sys_process.c:1.163
--- src/sys/kern/sys_process.c:1.162	Tue Sep  6 11:22:42 2011
+++ src/sys/kern/sys_process.c	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_process.c,v 1.162 2011/09/06 11:22:42 jmcneill Exp $	*/
+/*	$NetBSD: sys_process.c,v 1.163 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -118,7 +118,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_process.c,v 1.162 2011/09/06 11:22:42 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_process.c,v 1.163 2014/01/04 00:10:03 dsl Exp $");
 
 #include "opt_ptrace.h"
 #include "opt_ktrace.h"
@@ -1014,22 +1014,14 @@ process_dofpregs(struct lwp *curl /*trac
 	if ((size_t)kl > uio->uio_resid)
 		kl = uio->uio_resid;
 
-#ifdef __HAVE_PROCESS_XFPREGS
-	error = process_read_xfpregs(l, &r, &kl);
-#else
-	error = process_read_fpregs(l, &r);
-#endif
+	error = process_read_fpregs(l, &r, &kl);
 	if (error == 0)
 		error = uiomove(kv, kl, uio);
 	if (error == 0 && uio->uio_rw == UIO_WRITE) {
 		if (l->l_stat != LSSTOP)
 			error = EBUSY;
 		else
-#ifdef __HAVE_PROCESS_XFPREGS
-			error = process_write_xfpregs(l, &r, kl);
-#else
-			error = process_write_fpregs(l, &r);
-#endif
+			error = process_write_fpregs(l, &r, kl);
 	}
 	uio->uio_offset = 0;
 	return (error);

Index: src/sys/sys/ptrace.h
diff -u src/sys/sys/ptrace.h:1.44 src/sys/sys/ptrace.h:1.45
--- src/sys/sys/ptrace.h:1.44	Fri Sep  2 20:10:19 2011
+++ src/sys/sys/ptrace.h	Sat Jan  4 00:10:03 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ptrace.h,v 1.44 2011/09/02 20:10:19 christos Exp $	*/
+/*	$NetBSD: ptrace.h,v 1.45 2014/01/04 00:10:03 dsl Exp $	*/
 
 /*-
  * Copyright (c) 1984, 1993
@@ -151,17 +151,14 @@ int	process_domem(struct lwp *, struct l
 void	process_stoptrace(void);
 
 void	proc_reparent(struct proc *, struct proc *);
+
+/*
+ * 64bit architectures that support 32bit emulation (amd64 and sparc64)
+ * will #define process_read_regs32 to netbsd32_process_read_regs (etc).
+ * In all other cases these #defines drop the size suffix.
+ */
 #ifdef PT_GETFPREGS
-#ifdef __HAVE_PROCESS_XFPREGS
-int	process_read_xfpregs(struct lwp *, struct fpreg *, size_t *);
-#ifndef process_read_xfpregs32
-#define process_read_xfpregs32	process_read_xfpregs
-#endif
-#ifndef process_read_xfpregs64
-#define process_read_xfpregs64	process_read_xfpregs
-#endif
-#else
-int	process_read_fpregs(struct lwp *, struct fpreg *);
+int	process_read_fpregs(struct lwp *, struct fpreg *, size_t *);
 #ifndef process_read_fpregs32
 #define process_read_fpregs32	process_read_fpregs
 #endif
@@ -169,7 +166,6 @@ int	process_read_fpregs(struct lwp *, st
 #define process_read_fpregs64	process_read_fpregs
 #endif
 #endif
-#endif
 #ifdef PT_GETREGS
 int	process_read_regs(struct lwp *, struct reg *);
 #ifndef process_read_regs32
@@ -182,11 +178,7 @@ int	process_read_regs(struct lwp *, stru
 int	process_set_pc(struct lwp *, void *);
 int	process_sstep(struct lwp *, int);
 #ifdef PT_SETFPREGS
-#ifdef __HAVE_PROCESS_XFPREGS
-int	process_write_xfpregs(struct lwp *, const struct fpreg *, size_t);
-#else
-int	process_write_fpregs(struct lwp *, const struct fpreg *);
-#endif
+int	process_write_fpregs(struct lwp *, const struct fpreg *, size_t);
 #endif
 #ifdef PT_SETREGS
 int	process_write_regs(struct lwp *, const struct reg *);

Reply via email to