NetBSD-Bugs archive

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

Re: port-amd64/54052: bump STACK_ALIGNBYTES for COMPAT_LINUX



The following reply was made to PR port-amd64/54052; it has been noted by GNATS.

From: Rin Okuyama <rokuyama.rk%gmail.com@localhost>
To: Joerg Sonnenberger <joerg%bec.de@localhost>, gnats-bugs%NetBSD.org@localhost
Cc: port-amd64-maintainer%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
 netbsd-bugs%netbsd.org@localhost
Subject: Re: port-amd64/54052: bump STACK_ALIGNBYTES for COMPAT_LINUX
Date: Tue, 12 Mar 2019 17:55:47 +0900

 On 2019/03/12 7:54, Joerg Sonnenberger wrote:
 > On Mon, Mar 11, 2019 at 05:50:00AM +0000, rokuyama.rk%gmail.com@localhost wrote:
 >>> Description:
 >> Linux binaries with glibc >= 2.23 randomly crashes in dynamic linker.
 >> By bisectioning, the cause turns out to be this commit
 >>
 >> https://github.molgen.mpg.de/git-mirror/glibc/commit/38d22f9f48a84b441c5777aff103f5b980243b5f
 > 
 > So the real problem is that ld.so doesn't do what any normal startup
 > code does by aligning the stack explicitly. *sigh*
 
 I don't get what you means...
 
 (1) The bottom of stack (i.e., %rsp = &argc) is required to be aligned
 to 16-byte boundary by "System V ABI - AMD64 Architecture Processor
 Supplement"
 
 https://www.uclibc.org/docs/psABI-x86_64.pdf
 
 (see pp. 29-30).
 
 (2) However, we align it to only 8-byte boundary; we don't define
 STACK_ALIGNBYTES for amd64, and __ALIGNBYTES = (8 - 1) is used instead:
 
 src/sys/kern/kern_exec.c
 https://nxr.netbsd.org/xref/src/sys/kern/kern_exec.c#1394
 
    1394  static size_t
    1395  calcstack(struct execve_data * restrict data, const size_t gaplen)
    1396  {
    ....
    1415          /* make the stack "safely" aligned */
    1416          return STACK_LEN_ALIGN(stacklen, STACK_ALIGNBYTES);
    1417  }
 
 (3) If the bottom of stack is aligned to 16-byte boundary, ld.so for
 Linux works fine.
 
 Therefore, I think that ld.so is legal within System V ABI. Isn't it?
 
 Thanks,
 rin
 


Home | Main Index | Thread Index | Old Index