Sync with sys/i386/i386/machdep.c and trap.c revisions 1.278 and

1.118, respectively.
This commit is contained in:
KATO Takenori 1997-12-05 11:48:53 +00:00
parent b548141b9b
commit 3de8753921
3 changed files with 23 additions and 26 deletions

View File

@ -35,17 +35,18 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
* $Id: machdep.c,v 1.62 1997/11/25 09:54:36 kato Exp $
* $Id: machdep.c,v 1.63 1997/12/03 09:46:33 kato Exp $
*/
#include "apm.h"
#include "npx.h"
#include "opt_sysvipc.h"
#include "opt_ddb.h"
#include "opt_bounce.h"
#include "opt_cpu.h"
#include "opt_ddb.h"
#include "opt_maxmem.h"
#include "opt_perfmon.h"
#include "opt_smp.h"
#include "opt_sysvipc.h"
#include "opt_userconfig.h"
#include "opt_vm86.h"
@ -878,9 +879,9 @@ u_int my_tr; /* which task register setting */
#endif /* VM86 */
#endif
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
struct gate_descriptor *t_idt;
int has_f00f_bug;
extern int has_f00f_bug;
#endif
static struct i386tss dblfault_tss;
@ -1576,7 +1577,7 @@ init386(first)
proc0.p_addr->u_pcb.pcb_ext = 0;
}
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
void f00f_hack(void);
SYSINIT(f00f_hack, SI_SUB_INTRINSIC, SI_ORDER_FIRST, f00f_hack, NULL);
@ -1585,8 +1586,6 @@ f00f_hack(void) {
struct region_descriptor r_idt;
unsigned char *tmp;
int i;
vm_offset_t vp;
unsigned *pte;
if (!has_f00f_bug)
return;
@ -1605,13 +1604,12 @@ f00f_hack(void) {
bcopy(idt, t_idt, sizeof(idt));
r_idt.rd_base = (int)t_idt;
lidt(&r_idt);
vp = trunc_page(t_idt);
if (vm_map_protect(kernel_map, tmp, tmp + PAGE_SIZE,
VM_PROT_READ, FALSE) != KERN_SUCCESS)
panic("vm_map_protect failed");
return;
}
#endif /* NO_F00F_HACK */
#endif /* defined(I586_CPU) && !NO_F00F_HACK */
int
ptrace_set_pc(p, addr)

View File

@ -35,15 +35,16 @@
* SUCH DAMAGE.
*
* from: @(#)trap.c 7.4 (Berkeley) 5/13/91
* $Id: trap.c,v 1.39 1997/11/25 09:53:44 kato Exp $
* $Id: trap.c,v 1.40 1997/12/03 09:46:34 kato Exp $
*/
/*
* 386 Trap and System call handling
*/
#include "opt_ktrace.h"
#include "opt_cpu.h"
#include "opt_ddb.h"
#include "opt_ktrace.h"
#include "opt_vm86.h"
#include <sys/param.h>
@ -146,7 +147,7 @@ static char *trap_msg[] = {
static void userret __P((struct proc *p, struct trapframe *frame,
u_quad_t oticks));
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
extern struct gate_descriptor *t_idt;
extern int has_f00f_bug;
#endif
@ -223,7 +224,7 @@ trap(frame)
vm_offset_t va;
#endif
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
restart:
#endif
type = frame.tf_trapno;
@ -308,7 +309,7 @@ restart:
#endif
if (i == -1)
return;
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
if (i == -2)
goto restart;
#endif
@ -710,7 +711,7 @@ trap_pfault(frame, usermode)
* treat it is as an illegal instruction, and not a page
* fault.
*/
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
if ((eva == (unsigned int)&t_idt[6]) && has_f00f_bug) {
frame->tf_trapno = T_PRIVINFLT;
return -2;

View File

@ -35,17 +35,18 @@
* SUCH DAMAGE.
*
* from: @(#)machdep.c 7.4 (Berkeley) 6/3/91
* $Id: machdep.c,v 1.62 1997/11/25 09:54:36 kato Exp $
* $Id: machdep.c,v 1.63 1997/12/03 09:46:33 kato Exp $
*/
#include "apm.h"
#include "npx.h"
#include "opt_sysvipc.h"
#include "opt_ddb.h"
#include "opt_bounce.h"
#include "opt_cpu.h"
#include "opt_ddb.h"
#include "opt_maxmem.h"
#include "opt_perfmon.h"
#include "opt_smp.h"
#include "opt_sysvipc.h"
#include "opt_userconfig.h"
#include "opt_vm86.h"
@ -878,9 +879,9 @@ u_int my_tr; /* which task register setting */
#endif /* VM86 */
#endif
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
struct gate_descriptor *t_idt;
int has_f00f_bug;
extern int has_f00f_bug;
#endif
static struct i386tss dblfault_tss;
@ -1576,7 +1577,7 @@ init386(first)
proc0.p_addr->u_pcb.pcb_ext = 0;
}
#ifndef NO_F00F_HACK
#if defined(I586_CPU) && !defined(NO_F00F_HACK)
void f00f_hack(void);
SYSINIT(f00f_hack, SI_SUB_INTRINSIC, SI_ORDER_FIRST, f00f_hack, NULL);
@ -1585,8 +1586,6 @@ f00f_hack(void) {
struct region_descriptor r_idt;
unsigned char *tmp;
int i;
vm_offset_t vp;
unsigned *pte;
if (!has_f00f_bug)
return;
@ -1605,13 +1604,12 @@ f00f_hack(void) {
bcopy(idt, t_idt, sizeof(idt));
r_idt.rd_base = (int)t_idt;
lidt(&r_idt);
vp = trunc_page(t_idt);
if (vm_map_protect(kernel_map, tmp, tmp + PAGE_SIZE,
VM_PROT_READ, FALSE) != KERN_SUCCESS)
panic("vm_map_protect failed");
return;
}
#endif /* NO_F00F_HACK */
#endif /* defined(I586_CPU) && !NO_F00F_HACK */
int
ptrace_set_pc(p, addr)