Source-Changes-D archive

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

Re: CVS commit: src/sys/kern



On Sun, Apr 13, 2014 at 12:33 AM, Nick Hudson <skrll%netbsd.org@localhost> 
wrote:
> On 04/12/14 16:08, Masao Uebayashi wrote:
>>
>> Module Name:    src
>> Committed By:   uebayasi
>> Date:           Sat Apr 12 15:08:56 UTC 2014
>>
>> Modified Files:
>>         src/sys/kern: kern_exec.c
>>
>> Log Message:
>> execve_runproc: Correct thinko in Rev. 1.386; the new SP always points to
>> after (higher adderss) argc/argv/env/aux/strings regardless of stack
>> growing
>> direction .
>
> Doesn't this mean that argc, etc will get overwritten on _rtld_start call
> for stack grows down machines?
>
> SP needs to point to the first available stack address. On stack grows down
> machines this is a lower value than argc, etc. On stack grows up machines
> this is a higher value.

http://www.netbsd.org/~uebayasi/execve-stack-growdown.pdf
http://www.netbsd.org/~uebayasi/execve-stack-growup.pdf

Initial SP points to STACK_GROW(minsaddr, ssize).  rtld can use the
given stack freely (contradicting obsolete comments found in
kern_exec.c).

stack-growing-up rtld has to figure out &argc.  This is possible by
(vaddr_t)ps_argvstr - (vaddr_t)sizeof(argc).  Note that argc on stack
is long (== char *), not int.  hppa's rtld assumes int, which has to
be fixed for hppa64.

http://nxr.netbsd.org/xref/src/libexec/ld.elf_so/arch/hppa/rtld_start.S#88

> btw, why do you keep adding 4 space idented { } ?

To narrow local var scopes.  They should go away eventually...


Home | Main Index | Thread Index | Old Index