On Thu, Jul 20, 2017 at 09:26:23PM +0200, Mark Kettenis wrote:
> This brings arm64 in line with amd64/i386.  Makes the siginfo-fault
> regress test pass.
> 
> ok?

OK bluhm@

> Index: arch/arm64/arm64/trap.c
> ===================================================================
> RCS file: /cvs/src/sys/arch/arm64/arm64/trap.c,v
> retrieving revision 1.7
> diff -u -p -r1.7 trap.c
> --- arch/arm64/arm64/trap.c   29 Apr 2017 17:10:43 -0000      1.7
> +++ arch/arm64/arm64/trap.c   20 Jul 2017 19:24:45 -0000
> @@ -136,7 +136,7 @@ data_abort(struct trapframe *frame, uint
>       vaddr_t va;
>       union sigval sv;
>       uint64_t far;
> -     int error = 0, sig;
> +     int error = 0, sig, code;
>  
>       pcb = curcpu()->ci_curpcb;
>       p = curcpu()->ci_curproc;
> @@ -191,13 +191,22 @@ data_abort(struct trapframe *frame, uint
>  
>       if (error != 0) {
>               if (lower) {
> -                     if (error == ENOMEM)
> +                     if (error == ENOMEM) {
>                               sig = SIGKILL;
> -                     else
> +                             code = 0;
> +                     } else if (error == EIO) {
> +                             sig = SIGBUS;
> +                             code = BUS_OBJERR;
> +                     } else if (error == EACCES) {
>                               sig = SIGSEGV;
> +                             code = SEGV_ACCERR;
> +                     } else {
> +                             sig = SIGSEGV;
> +                             code = SEGV_MAPERR;
> +                     }
>                       sv.sival_ptr = (u_int64_t *)far;
>  
> -                     trapsignal(p, sig, 0, SEGV_ACCERR, sv);
> +                     trapsignal(p, sig, 0, code, sv);
>               } else {
>                       if (curcpu()->ci_idepth == 0 &&
>                           pcb->pcb_onfault != 0) {

Reply via email to