tech-toolchain archive

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

sh3 mcontext change

With NetBSD 5.0 looming, I'd like to fix a problem with sh3 mcontext
that's been there since the very beginning - it doesn't have a slot
for GBR register.

Currently kernel doesn't preserve GBR and userland doesn't use it
either - unless you write you own asm code, in which case you lose -
which is bad by itself already.  And GBR is also used by TLS, though
our doesn't support it yet.

The problem of course is how to change mcontext without breaking ABI
(sizeof(struct mcontext)).  Fortunately, it seems we have a slot we
can steal - we have _REG_EXPEVT slot in gregs and it seems it's
unused.  cpu_setmcontext() in the kernel doesn't set it for obvious
reasons and as far as I can tell no code ever examines it - all kernel
code that is interested in expevt uses trapframe for that.  Userland
code that might be interested in expevt (reason for the trap) already
gets the same info via siginfo.

So i would like to recycle that currently useless slot for GBR and
thus avoid breaking ABI.

Just in case - is there anything I'm missing here?  Any

SY, Uwe
--                          | NetBSD/toaster:          | we wish the toaster to be happy too

Home | Main Index | Thread Index | Old Index