Deleted Added
full compact
rwindow.c (82906) rwindow.c (83366)
1/*-
2 * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 12 unchanged lines hidden (view full) ---

21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * from: BSDI: trap.c,v 1.17.2.9 1999/10/19 15:29:52 cp Exp
1/*-
2 * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 12 unchanged lines hidden (view full) ---

21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * from: BSDI: trap.c,v 1.17.2.9 1999/10/19 15:29:52 cp Exp
29 * $FreeBSD: head/sys/sparc64/sparc64/rwindow.c 82906 2001-09-03 23:10:45Z jake $
29 * $FreeBSD: head/sys/sparc64/sparc64/rwindow.c 83366 2001-09-12 08:38:13Z julian $
30 */
31
32#include <sys/param.h>
33#include <sys/systm.h>
34#include <sys/ktr.h>
35#include <sys/proc.h>
36#include <sys/user.h>
37
38#include <machine/frame.h>
39
40int
30 */
31
32#include <sys/param.h>
33#include <sys/systm.h>
34#include <sys/ktr.h>
35#include <sys/proc.h>
36#include <sys/user.h>
37
38#include <machine/frame.h>
39
40int
41rwindow_load(struct proc *p, struct trapframe *tf, int n)
41rwindow_load(struct thread *td, struct trapframe *tf, int n)
42{
43 struct rwindow rw;
44 u_long usp;
45 int error;
46 int i;
47
48 /*
49 * In case current window is still only on-chip, push it out;
50 * if it cannot get all the way out, we cannot continue either.
51 */
42{
43 struct rwindow rw;
44 u_long usp;
45 int error;
46 int i;
47
48 /*
49 * In case current window is still only on-chip, push it out;
50 * if it cannot get all the way out, we cannot continue either.
51 */
52 if ((error = rwindow_save(p)) != 0)
52 if ((error = rwindow_save(td)) != 0)
53 return (error);
54 usp = tf->tf_out[6];
53 return (error);
54 usp = tf->tf_out[6];
55 CTR3(KTR_TRAP, "rwindow_load: p=%p (%s) n=%d",
56 p, p->p_comm, n);
55 CTR3(KTR_TRAP, "rwindow_load: td=%p (%s) n=%d",
56 td, td->td_proc->p_comm, n);
57 for (i = 0; i < n; i++) {
58 CTR1(KTR_TRAP, "rwindow_load: usp=%#lx", usp);
59 usp += SPOFF;
60 error = copyin((void *)usp, &rw, sizeof rw);
61 usp = rw.rw_in[6];
62 }
63 CTR1(KTR_TRAP, "rwindow_load: error=%d", error);
64 return (error);
65}
66
67int
57 for (i = 0; i < n; i++) {
58 CTR1(KTR_TRAP, "rwindow_load: usp=%#lx", usp);
59 usp += SPOFF;
60 error = copyin((void *)usp, &rw, sizeof rw);
61 usp = rw.rw_in[6];
62 }
63 CTR1(KTR_TRAP, "rwindow_load: error=%d", error);
64 return (error);
65}
66
67int
68rwindow_save(struct proc *p)
68rwindow_save(struct thread *td)
69{
70 struct rwindow *rw;
71 struct pcb *pcb;
72 u_long *ausp;
73 u_long usp;
74 int error;
75 int i;
76
77 flushw();
69{
70 struct rwindow *rw;
71 struct pcb *pcb;
72 u_long *ausp;
73 u_long usp;
74 int error;
75 int i;
76
77 flushw();
78 pcb = &p->p_addr->u_pcb;
78 pcb = td->td_pcb;
79 i = pcb->pcb_nsaved;
79 i = pcb->pcb_nsaved;
80 CTR3(KTR_TRAP, "rwindow_save: p=%p (%s) nsaved=%d", p, p->p_comm, i);
80 CTR3(KTR_TRAP, "rwindow_save: td=%p (%s) nsaved=%d", td,
81 td->td_proc->p_comm, i);
81 if (i == 0)
82 return (0);
83 ausp = pcb->pcb_rwsp;
84 rw = pcb->pcb_rw;
85 error = 0;
86 do {
87 usp = *ausp;
88 CTR1(KTR_TRAP, "rwindow_save: usp=%#lx", usp);

--- 12 unchanged lines hidden ---
82 if (i == 0)
83 return (0);
84 ausp = pcb->pcb_rwsp;
85 rw = pcb->pcb_rw;
86 error = 0;
87 do {
88 usp = *ausp;
89 CTR1(KTR_TRAP, "rwindow_save: usp=%#lx", usp);

--- 12 unchanged lines hidden ---