[M3commit] CVS Update: cm3

jay.krell at cornell.edu jay.krell at cornell.edu
Mon Nov 23 03:12:48 CET 2009


These concerns make we feel more comfortable with the approach of  
finding the entire stack bounds (er, the accurate top; bottom is  
dynamic). There isn't a portable way to do this but there are various  
pthread_np.

  - Jay (phone)

On Nov 22, 2009, at 4:29 PM, Jay K <jay.krell at cornell.edu> wrote:

> Maybe:
>
> RunThread:
> if stack_grows_down
>   stackbase = ADR(self)
> else
>  stackbase = ADR(self) + BYTESIZE(self)
>
> Do we know the backend won't introduce local temporaries on the  
> stack that contain traced pointers?
> Or, like, if there are traced temporaries in registers..they could  
> be spilled to the stack..and not within the bounds
> described the above?
>
>  - Jay
>
> From: jay.krell at cornell.edu
> To: hosking at cs.purdue.edu
> Date: Mon, 23 Nov 2009 00:19:36 +0000
> CC: m3commit at elegosoft.com
> Subject: Re: [M3commit] CVS Update: cm3
>
> You think I should just leave Win32 using the same method?
> No point scanning past that?
>
> I think, as I was saying the other day, there is a slight danger in  
> the current code.
> Imagine an aggressive optimizer inlines RunThread into ThreadBase.
> I think when I manually inlined it I caused just such breakage.
>
> We need <*NOINLINE*>?
>
>  - Jay
>
> Subject: Re: [M3commit] CVS Update: cm3
> From: hosking at cs.purdue.edu
> Date: Sun, 22 Nov 2009 18:52:31 -0500
> CC: jkrell at elego.de; m3commit at elegosoft.com
> To: jay.krell at cornell.edu
>
> It is precise re traced refs.  That's the lowest frame that can hold  
> a traced reference.
>
> On 22 Nov 2009, at 16:53, Jay K wrote:
>
> The end of the stack isn't precise:
>
> C:\dev2\cm3.release_branch_cm3_5_8\m3-libs\m3core\src\thread\POSIX 
> \ThreadPosix.m3(1058):    self.stackbase := ADR(xx);
>
> "stack" here:
>
> void
> ProcessContext(Context *c, void *stack,
>         void (*p) (void *start, void *stop))
> {
>   if (stack < c->uc.uc_stack.ss_sp)
>     p(stack, c->uc.uc_stack.ss_sp);
>   else
>     p(c->uc.uc_stack.ss_sp, stack);
> #ifdef __APPLE__
>   p(&(c->uc.uc_mcontext[0]), &(c->uc.uc_mcontext[1]));
> #else
>   p(&c[0], &c[1]);
> #endif
> }
>
>  - Jay
>
>
> > From: hosking at cs.purdue.edu
> > Date: Sun, 22 Nov 2009 13:41:26 -0500
> > To: jkrell at elego.de
> > CC: m3commit at elegosoft.com
> > Subject: Re: [M3commit] CVS Update: cm3
> >
> > > Note that ThreadPosix.m3 could also implement such precise  
> stackbase.
> >
> > ThreadPosix *does* implement a precise stack base. It's obtained  
> from the ucontext set in the thread switch routine (swapcontext).
> >
> > > ThreadPThread.m3 probably often could, like with the functions  
> on OpenBSD (broken) and FreeBSD, etc.
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3commit/attachments/20091122/36919808/attachment-0002.html>


More information about the M3commit mailing list