Date: Fri, 4 Jan 2002 14:27:27 -0500 (EST) From: Daniel Eischen <eischen@pcnet1.pcnet.com> To: Bernd Walter <ticso@cicely8.cicely.de> Cc: alpha@FreeBSD.ORG Subject: Re: {get,set,make,swap}context for alpha Message-ID: <Pine.SUN.3.91.1020104141734.8692A-100000@pcnet1.pcnet.com> In-Reply-To: <20020104195054.E8703@cicely8.cicely.de>
next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 4 Jan 2002, Bernd Walter wrote: > On Fri, Jan 04, 2002 at 12:56:45PM -0500, Daniel Eischen wrote: > > On Fri, 4 Jan 2002, Bernd Walter wrote: > > > On Fri, Jan 04, 2002 at 05:46:13PM +0100, Bernd Walter wrote: > > > > What I found so far with the core dump is that proc3 is called with a > > > > bogus t12 value. > > > > I still have to search why. > > > > Thanks for the previous fix to setcontext; we seem to have > > figured out the same fix for getcontext :-). I was in the > > process of making setcontext a NESTED function, but had to > > go to work :(. > > It wouldn't work as NESTED, because it expects values on the > stack for return which are not there after switching. > NESTED does the same as my change, but at the beginning and end of > the function. OK. I was going to treat a return due to error as a normal return, and have an abnormal return for a normal return. But as long as yours works, that's fine. > > Cool, it's working! I was unsure about makecontext being correct. > > I should probably add a test that passes more than 6 arguments > > to a function to be sure that the remaining arguments are correctly > > pulled off the stack (the first 6 being in registers). > > Good point. > > I asume FP registers also need to be handled. > At least fs and fa registers. I dunno. Read the comment in the code (setcontext.S) about floating point registers and whether we need to save them. When called from application code, setcontext & getcontext are like setjmp and longjmp. I figured that the caller should be done with the floating point registers and there would be no need to save all of them. When the context is a sigframe though, that means the kernel interrupted the application to deliver a signal so we don't know anything about whether the caller still needs the FP registers (and have to restore them). Or something like that anyways. At this point I just want to get it working, so we can always save and restore the FP registers and fine-tune it later. > > The kernel needs to be patched (machdep.c) to set ucp->mc_context.mc_rev > > to denote it is a signal frame and not a trap frame. The test program > > should account for an unpatched kernel by setting mc_rev to denote a > > signal frame. Make sure that it's being set correctly, or else > > setcontext will return -1. > > Ah. > I hadn't looked into the complete patch yet. I didn't include the patch to the kernel yet. I'll do that after everything seems to be working. Thanks, -- Dan Eischen To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-alpha" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.SUN.3.91.1020104141734.8692A-100000>