<div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Sep 11, 2020 at 10:57 PM Cyril Hrubis <<a href="mailto:chrubis@suse.cz">chrubis@suse.cz</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi!<br>
> > Well it's not wrong per se but as it is we do not use the pre-allocated<br>
> > part of the stack at all, we directly jump for the guard page as we use<br>
> ><br>
> <br>
> Really? But I think the pthread_attr_setstack(&attr, stack, stack_size) will<br>
> take use of the whole stack memory in function recursive performing.<br>
> How can we say NOT use the pre-allocated stack? I fell a bit confused<br>
> about your words here.<br>
<br>
I've been confused as well I looked at pthread_attr_setstack() function<br>
manual and it's expecting to get the lowest pointer of the stack. So I<br>
suppose that the stack really started at the stack + stack_size address.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">I guess you probably misread the "lowest pointer of the stack", it is not mean</div><div class="gmail_default" style="font-size:small">the bottom of the stack, it is actually the lowest addressable byte of a buffer of</div><div class="gmail_default" style="font-size:small">stacksize. From what I understand, we should NOT pass the 'stack + stack_size'</div><div class="gmail_default" style="font-size:small">address to pthread_attr_setstack(). </div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
But still the code wasn't exactly right, because the lowest address of<br>
the stack in the previous code was stack - stack_size, which would be<br>
start of the unmapped region and the size of the stack would be 2 *<br>
stack_size, as we expected the mapping to grow.<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">No, I don't think so, the lowest address of the stack in the previous code is:</div><div class="gmail_default" style="font-size:small">    stack = start + total_size - size;</div></div><div class="gmail_default" style="font-size:small">and we pass this stack pointer to ptrehad_attr_setstack() is correct here,</div><div class="gmail_default" style="font-size:small">indeed the stack really starts at stack + stack_size, that's internal steps.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">If we go with 'stack + stack_size' as you suggested, that will easily get</div><div class="gmail_default" style="font-size:small">segmental fault. So I stand by myself understanding unless someone can</div><div class="gmail_default" style="font-size:small">give enough explanation/demo :).</div><div><br></div><div><div class="gmail_default" style="font-size:small">PTHREAD_ATTR_SETSTACK(3) manual says:</div><div class="gmail_default" style="font-size:small">  "stackaddr should point to the lowest addressable byte of a buffer of stacksize bytes that was allocated by the caller.  The pages of the allocated buffer should be both readable and writable."</div><br></div></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div></div>