From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_NONE,SPF_PASS, URIBL_DBL_BLOCKED_OPENDNS autolearn=no autolearn_force=no version=3.4.6 Authentication-Results: gnuweeb.org; dmarc=none (p=none dis=none) header.from=weissschuh.net Authentication-Results: gnuweeb.org; dkim=pass (1024-bit key; unprotected) header.d=weissschuh.net header.i=@weissschuh.net header.a=rsa-sha256 header.s=mail header.b=H1EJW5sq; dkim-atps=neutral Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=159.69.126.157; helo=todd.t-8ch.de; envelope-from=linux@weissschuh.net; receiver= Received: from todd.t-8ch.de (todd.t-8ch.de [159.69.126.157]) by gnuweeb.org (Postfix) with ESMTPS id 8ECF624B1EA for ; Sun, 27 Aug 2023 13:53:29 +0700 (WIB) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=weissschuh.net; s=mail; t=1693119206; bh=7/f9HZDcWpTm+KWXuTV1cEqG+DU+sNW+WMkzpr6jClg=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=H1EJW5sqShOMzzOf3dDiff+xRnNchf5cA24e7EW2t3YQTIKLQ5ZdvqGwZLID5vSDl UNuHlv9TgV3jjUiYHbCZbfDh4jSQdhl0SQubVVcUe/yCEEAOOyCg8NvchLsTkwZJ+0 jwYwKq1qR8WCMRebSq3jLX4Alujbbpl5m20Ckk0c= Date: Sun, 27 Aug 2023 08:53:26 +0200 From: Thomas =?utf-8?Q?Wei=C3=9Fschuh?= To: Ammar Faizi Cc: Willy Tarreau , Zhangjin Wu , Nicholas Rosenberg , GNU/Weeb Mailing List , Michael William Jonathan , Linux Kernel Mailing List Subject: Re: [PATCH v1 1/1] tools/nolibc: i386: Fix a stack misalign bug on _start Message-ID: References: <20230826141632.1488740-1-ammarfaizi2@gnuweeb.org> <20230826141632.1488740-2-ammarfaizi2@gnuweeb.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20230826141632.1488740-2-ammarfaizi2@gnuweeb.org> List-Id: Hi Ammar, On 2023-08-26 21:16:32+0700, Ammar Faizi wrote: > The ABI mandates that the %esp register must be a multiple of 16 when > executing a call instruction. > > Commit 2ab446336b17 simplified the _start function, but it didn't take Afaik references to commits in commit messages are supposed to follow the same format as in the Fixes: tag. "Commit 2ab446336b17 ("tools/nolibc: i386: shrink _start with _start_c") simplified the _start function, [...]" > care of the %esp alignment, causing SIGSEGV on SSE and AVX programs that > use aligned move instruction (e.g., movdqa, movaps, and vmovdqa). > > Ensure the %esp is a multiple of 16 when executing the call instruction. > > Cc: Zhangjin Wu > Fixes: 2ab446336b17aad362c6decee29b4efd83a01979 ("tools/nolibc: i386: shrink _start with _start_c") > Reported-by: Nicholas Rosenberg > Signed-off-by: Ammar Faizi > --- > tools/include/nolibc/arch-i386.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/tools/include/nolibc/arch-i386.h b/tools/include/nolibc/arch-i386.h > index 64415b9fac77f996..4edf238eeac67aa2 100644 > --- a/tools/include/nolibc/arch-i386.h > +++ b/tools/include/nolibc/arch-i386.h > @@ -167,7 +167,8 @@ void __attribute__((weak, noreturn, optimize("Os", "omit-frame-pointer"))) __no_ > __asm__ volatile ( > "xor %ebp, %ebp\n" /* zero the stack frame */ > "mov %esp, %eax\n" /* save stack pointer to %eax, as arg1 of _start_c */ > - "and $-16, %esp\n" /* last pushed argument must be 16-byte aligned */ > + "and $-16, %esp\n" /* align stack to 16 bytes */ > + "sub $12, %esp\n" /* last pushed argument must be 16-byte aligned */ > "push %eax\n" /* push arg1 on stack to support plain stack modes too */ > "call _start_c\n" /* transfer to c runtime */ > "hlt\n" /* ensure it does not return */ Thanks for the fix! In general: Acked-by: Thomas Weißschuh Though I'd like to have the following part of your follow-up mail as part of the commit message [0]: """ When the call main is executed, the %esp is 16 bytes aligned. Then, on function entry (%esp mod 16) == 12 because the call instruction pushes 4 bytes onto the stack. subl $12, %esp will make (%esp mod 16) == 0 again. """ It's much clearer to someone not that familiar with ASM and its intricacies; like me. Also a Link: tag for the Reported-by: would be nice. [0] https://lore.kernel.org/lkml/ZOoindMFj1UKqo+s@biznet-home.integral.gnuweeb.org/ Thomas