summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Burkholder <jake@FreeBSD.org>2000-12-08 21:31:52 +0000
committerJake Burkholder <jake@FreeBSD.org>2000-12-08 21:31:52 +0000
commit1b00f9203929e5fa22f24250423cffe2587c5f8f (patch)
treedaabc40024cc0109bf5d51c305a2fe3c48b26893
parent894fbb6682845ffe32ceaf991f3d1a6be3bc844c (diff)
Notes
-rw-r--r--sys/amd64/amd64/cpu_switch.S6
-rw-r--r--sys/amd64/amd64/swtch.s6
-rw-r--r--sys/amd64/amd64/vm_machdep.c2
-rw-r--r--sys/i386/i386/swtch.s6
-rw-r--r--sys/i386/i386/vm_machdep.c2
5 files changed, 14 insertions, 8 deletions
diff --git a/sys/amd64/amd64/cpu_switch.S b/sys/amd64/amd64/cpu_switch.S
index f19a7fb4a69e6..2d315fc5f7875 100644
--- a/sys/amd64/amd64/cpu_switch.S
+++ b/sys/amd64/amd64/cpu_switch.S
@@ -103,7 +103,8 @@ ENTRY(cpu_switch)
movl P_ADDR(%ecx),%edx
- popl PCB_EIP(%edx) /* Hardware registers */
+ movl (%esp),%eax /* Hardware registers */
+ movl %eax,PCB_EIP(%edx)
movl %ebx,PCB_EBX(%edx)
movl %esp,PCB_ESP(%edx)
movl %ebp,PCB_EBP(%edx)
@@ -253,7 +254,8 @@ sw1b:
movl PCB_EBP(%edx),%ebp
movl PCB_ESI(%edx),%esi
movl PCB_EDI(%edx),%edi
- pushl PCB_EIP(%edx)
+ movl PCB_EIP(%edx),%eax
+ movl %eax,(%esp)
#ifdef SMP
#ifdef GRAB_LOPRIO /* hold LOPRIO for INTs */
diff --git a/sys/amd64/amd64/swtch.s b/sys/amd64/amd64/swtch.s
index f19a7fb4a69e6..2d315fc5f7875 100644
--- a/sys/amd64/amd64/swtch.s
+++ b/sys/amd64/amd64/swtch.s
@@ -103,7 +103,8 @@ ENTRY(cpu_switch)
movl P_ADDR(%ecx),%edx
- popl PCB_EIP(%edx) /* Hardware registers */
+ movl (%esp),%eax /* Hardware registers */
+ movl %eax,PCB_EIP(%edx)
movl %ebx,PCB_EBX(%edx)
movl %esp,PCB_ESP(%edx)
movl %ebp,PCB_EBP(%edx)
@@ -253,7 +254,8 @@ sw1b:
movl PCB_EBP(%edx),%ebp
movl PCB_ESI(%edx),%esi
movl PCB_EDI(%edx),%edi
- pushl PCB_EIP(%edx)
+ movl PCB_EIP(%edx),%eax
+ movl %eax,(%esp)
#ifdef SMP
#ifdef GRAB_LOPRIO /* hold LOPRIO for INTs */
diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c
index befe6fee5199b..294a5838def05 100644
--- a/sys/amd64/amd64/vm_machdep.c
+++ b/sys/amd64/amd64/vm_machdep.c
@@ -168,7 +168,7 @@ cpu_fork(p1, p2, flags)
pcb2->pcb_edi = 0;
pcb2->pcb_esi = (int)fork_return; /* fork_trampoline argument */
pcb2->pcb_ebp = 0;
- pcb2->pcb_esp = (int)p2->p_md.md_regs;
+ pcb2->pcb_esp = (int)p2->p_md.md_regs - sizeof(void *);
pcb2->pcb_ebx = (int)p2; /* fork_trampoline argument */
pcb2->pcb_eip = (int)fork_trampoline;
/*
diff --git a/sys/i386/i386/swtch.s b/sys/i386/i386/swtch.s
index f19a7fb4a69e6..2d315fc5f7875 100644
--- a/sys/i386/i386/swtch.s
+++ b/sys/i386/i386/swtch.s
@@ -103,7 +103,8 @@ ENTRY(cpu_switch)
movl P_ADDR(%ecx),%edx
- popl PCB_EIP(%edx) /* Hardware registers */
+ movl (%esp),%eax /* Hardware registers */
+ movl %eax,PCB_EIP(%edx)
movl %ebx,PCB_EBX(%edx)
movl %esp,PCB_ESP(%edx)
movl %ebp,PCB_EBP(%edx)
@@ -253,7 +254,8 @@ sw1b:
movl PCB_EBP(%edx),%ebp
movl PCB_ESI(%edx),%esi
movl PCB_EDI(%edx),%edi
- pushl PCB_EIP(%edx)
+ movl PCB_EIP(%edx),%eax
+ movl %eax,(%esp)
#ifdef SMP
#ifdef GRAB_LOPRIO /* hold LOPRIO for INTs */
diff --git a/sys/i386/i386/vm_machdep.c b/sys/i386/i386/vm_machdep.c
index befe6fee5199b..294a5838def05 100644
--- a/sys/i386/i386/vm_machdep.c
+++ b/sys/i386/i386/vm_machdep.c
@@ -168,7 +168,7 @@ cpu_fork(p1, p2, flags)
pcb2->pcb_edi = 0;
pcb2->pcb_esi = (int)fork_return; /* fork_trampoline argument */
pcb2->pcb_ebp = 0;
- pcb2->pcb_esp = (int)p2->p_md.md_regs;
+ pcb2->pcb_esp = (int)p2->p_md.md_regs - sizeof(void *);
pcb2->pcb_ebx = (int)p2; /* fork_trampoline argument */
pcb2->pcb_eip = (int)fork_trampoline;
/*