mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-19 06:44:31 +00:00
Handle unaligned 4-byte loads. While in the neighborhood, remove the
cr.isr sanity check. We actually encounter insanities, which very likely means that the insanity check itself is insane. Remove an empty comment while I'm at it.
This commit is contained in:
parent
63e69c75fb
commit
2642a8845b
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=121933
|
@ -134,6 +134,13 @@ fixup(struct asm_inst *i, mcontext_t *mc, uint64_t va)
|
|||
uint64_t postinc;
|
||||
|
||||
switch (i->i_op) {
|
||||
case ASM_OP_LD4:
|
||||
copyin((void*)va, (void*)&buf.i, 4);
|
||||
reg = greg_ptr(mc, (int)i->i_oper[1].o_value);
|
||||
if (reg == NULL)
|
||||
return (EINVAL);
|
||||
wrreg(reg, buf.i & 0xffffffffU);
|
||||
break;
|
||||
case ASM_OP_LD8:
|
||||
copyin((void*)va, (void*)&buf.i, 8);
|
||||
reg = greg_ptr(mc, (int)i->i_oper[1].o_value);
|
||||
|
@ -178,19 +185,9 @@ unaligned_fixup(struct trapframe *tf, struct thread *td)
|
|||
struct asm_bundle bundle;
|
||||
int error, slot;
|
||||
|
||||
/* Sanity checks. */
|
||||
if (!(tf->tf_special.isr & IA64_ISR_R) ||
|
||||
(tf->tf_special.isr & (IA64_ISR_W|IA64_ISR_X|IA64_ISR_NA))) {
|
||||
printf("%s: unexpected cr.isr value\n", __func__);
|
||||
return (SIGILL);
|
||||
}
|
||||
|
||||
slot = ((tf->tf_special.psr & IA64_PSR_RI) == IA64_PSR_RI_0) ? 0 :
|
||||
((tf->tf_special.psr & IA64_PSR_RI) == IA64_PSR_RI_1) ? 1 : 2;
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
if (ia64_unaligned_print) {
|
||||
uprintf("pid %d (%s): unaligned access: va=0x%lx, pc=0x%lx\n",
|
||||
td->td_proc->p_pid, td->td_proc->p_comm,
|
||||
|
|
Loading…
Reference in a new issue