Port-powerpc archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: syscall trap



manu%netbsd.org@localhost (Emmanuel Dreyfus) writes:

> I tried the following patch , but it does not work (theses system calls
> are not ignored at all). Any idea why?


>         .globl  _C_LABEL(sctrap),_C_LABEL(scsize)
>  _C_LABEL(sctrap):
>         mtsprg  1,1                     /* save SP */
>         stmw    28,tempsave(0)          /* free r28-r31 */
> +#ifdef COMPAT_MACH
> +/*
> + * Handle the cthread Mach fast traps: Do nothing, but do it fast.
> + */
> +       li      28,0x7ff2       # cthread_info
> +       cmp     0,28
> +       beq     1f
> +       li      28,0x7ff1       # cthread_set_self
> +       cmp     0,28
> +       beq     1f
> +#endif
>         mflr    28                      /* save LR */
>         mfcr    29                      /* save CR */
>         bla     s_sctrap
>         _C_LABEL(scsize) = .-_C_LABEL(sctrap)

[You're not describing _how_ it does not work, but ...]

The branch instructions would appear to be your main problem. The
sctrap code is copied to and executed at the EXC_SC trap vector
address (see mpc6xx_machdep.c), so taking a relative branch to
s_sctrap doesn't work.

Also, FRAME_LEAVE() at that label (1) in s_sctrap would expect a prior
FRAME_SETUP(), thus clobbering some of the frame. For the purposes
testing your patch I'd suggest rfi'ing from sctrap itself.

In addition to that, making the comparisions before saving the CR will
clobber it.


- Klaus



Home | Main Index | Thread Index | Old Index