Subject: port-powerpc/10142: powerpc port does not support fp registers in core dumps
To: None <gnats-bugs@gnats.netbsd.org>
From: None <jtc@redback.com>
List: netbsd-bugs
Date: 05/17/2000 13:07:16
>Number:         10142
>Category:       port-powerpc
>Synopsis:       powerpc port does not support fp registers in core dumps
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-powerpc-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed May 17 13:08:00 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     
>Release:        NetBSD-current 2000/04/29
>Organization:
J.T. Conklin
RedBack Networks
>Environment:
	
System: NetBSD powermac 1.4X NetBSD 1.4X (GENERIC) #1: Thu May 11 22:44:11 PDT 2000     jtc@powermac:/usr/src/sys/arch/macppc/compile/GENERIC macppc

>Description:
The powerpc port does not save the contents of floating point
registers in core dumps.

The enclosed patch depends on the patch submitted with port-powerpc/10130,
which adds struct fpreg to powerpc/reg.h.

>How-To-Repeat:
	
>Fix:
*** OLD/pcb.h	Tue May 16 20:56:27 2000
--- include/pcb.h	Tue May 16 20:57:48 2000
***************
*** 33,38 ****
--- 33,40 ----
  #ifndef	_MACHINE_PCB_H_
  #define	_MACHINE_PCB_H_
  
+ #include <powerpc/reg.h>
+ 
  typedef int faultbuf[23];
  
  struct pcb {
***************
*** 50,57 ****
  };
  
  struct md_coredump {
! 	struct trapframe frame;
! 	/* Need to add FPU regs here */
  };
  
  #ifdef	_KERNEL
--- 52,59 ----
  };
  
  struct md_coredump {
! 	struct reg intreg;
! 	struct fpreg freg;
  };
  
  #ifdef	_KERNEL
*** OLD/reg.h	Tue May 16 21:01:16 2000
--- include/reg.h	Tue May 16 21:04:25 2000
***************
*** 1,5 ****
--- 1,8 ----
  /*	$NetBSD: reg.h,v 1.3 1999/05/03 10:02:19 tsubai Exp $	*/
  
+ #ifndef _POWERPC_REG_H_
+ #define _POWERPC_REG_H_
+ 
  struct reg {
  	register_t fixreg[32];
  	register_t lr;
***************
*** 13,15 ****
--- 16,20 ----
  	double	r_regs[32];
  	double	r_fpscr;
  };
+ 
+ #endif	/* !_POWERPC_REG_H_ */
*** OLD/vm_machdep.c	Tue May 16 20:58:01 2000
--- powerpc/vm_machdep.c	Tue May 16 20:59:20 2000
***************
*** 221,228 ****
  	chdr->c_seghdrsize = ALIGN(sizeof cseg);
  	chdr->c_cpusize = sizeof md_core;
  
! 	tf = trapframe(p);
! 	bcopy(tf, &md_core.frame, sizeof md_core.frame);
  	
  	CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_MACHINE, CORE_CPU);
  	cseg.c_addr = 0;
--- 221,235 ----
  	chdr->c_seghdrsize = ALIGN(sizeof cseg);
  	chdr->c_cpusize = sizeof md_core;
  
! 	/* Save integer registers. */
! 	error = process_read_regs(p, &md_core.intreg);
! 	if (error)
! 		return error;
! 
! 	/* Save floating point registers. */
! 	error = process_read_fpregs(p, &md_core.freg);
! 	if (error)
! 		return error;
  	
  	CORE_SETMAGIC(cseg, CORESEGMAGIC, MID_MACHINE, CORE_CPU);
  	cseg.c_addr = 0;

>Release-Note:
>Audit-Trail:
>Unformatted: