All of lore.kernel.org
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: linux-kernel@vger.kernel.org, Willy Tarreau <w@1wt.eu>
Subject: [PATCH 14/22] tools/nolibc: add auxiliary vector retrieval for x86_64
Date: Mon,  9 Jan 2023 09:42:00 +0100	[thread overview]
Message-ID: <20230109084208.27355-15-w@1wt.eu> (raw)
In-Reply-To: <20230109084208.27355-1-w@1wt.eu>

In the _start block we now iterate over envp to find the auxiliary
vector after the NULL. The pointer is saved into an _auxv variable
that is marked as weak so that it's accessible from multiple units.

Signed-off-by: Willy Tarreau <w@1wt.eu>
---
 tools/include/nolibc/arch-x86_64.h | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/include/nolibc/arch-x86_64.h b/tools/include/nolibc/arch-x86_64.h
index 683702a16a61..17f6751208e7 100644
--- a/tools/include/nolibc/arch-x86_64.h
+++ b/tools/include/nolibc/arch-x86_64.h
@@ -179,6 +179,7 @@ struct sys_stat_struct {
 })
 
 char **environ __attribute__((weak));
+const unsigned long *_auxv __attribute__((weak));
 
 /* startup code */
 /*
@@ -195,6 +196,12 @@ void __attribute__((weak,noreturn,optimize("omit-frame-pointer"))) _start(void)
 		"lea 8(%rsi,%rdi,8),%rdx\n" // then a NULL then envp (third arg, %rdx)
 		"mov %rdx, environ\n"       // save environ
 		"xor %ebp, %ebp\n"          // zero the stack frame
+		"mov %rdx, %rax\n"          // search for auxv (follows NULL after last env)
+		"0:\n"
+		"add $8, %rax\n"            // search for auxv using rax, it follows the
+		"cmp -8(%rax), %rbp\n"      // ... NULL after last env (rbp is zero here)
+		"jnz 0b\n"
+		"mov %rax, _auxv\n"         // save it into _auxv
 		"and $-16, %rsp\n"          // x86 ABI : esp must be 16-byte aligned before call
 		"call main\n"               // main() returns the status code, we'll exit with it.
 		"mov %eax, %edi\n"          // retrieve exit code (32 bit)
-- 
2.17.5


  parent reply	other threads:[~2023-01-09  8:45 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-09  8:41 [PATCH 00/22] nolibc: usability improvements (errno, environ, auxv) Willy Tarreau
2023-01-09  8:41 ` [PATCH 01/22] tools/nolibc: make compiler and assembler agree on the section around _start Willy Tarreau
2023-01-09  8:41 ` [PATCH 02/22] tools/nolibc: enable support for thumb1 mode for ARM Willy Tarreau
2023-01-09  8:41 ` [PATCH 03/22] tools/nolibc: support thumb mode with frame pointers on ARM Willy Tarreau
2023-01-09  8:41 ` [PATCH 04/22] tools/nolibc: remove local definitions of O_* flags for open/fcntl Willy Tarreau
2023-01-09  8:41 ` [PATCH 05/22] tools/nolibc: make errno a weak symbol instead of a static one Willy Tarreau
2023-01-09  8:41 ` [PATCH 06/22] tools/nolibc: export environ as a weak symbol on x86_64 Willy Tarreau
2023-01-09  8:41 ` [PATCH 07/22] tools/nolibc: export environ as a weak symbol on i386 Willy Tarreau
2023-01-09  8:41 ` [PATCH 08/22] tools/nolibc: export environ as a weak symbol on arm64 Willy Tarreau
2023-01-09  8:41 ` [PATCH 09/22] tools/nolibc: export environ as a weak symbol on arm Willy Tarreau
2023-01-09  8:41 ` [PATCH 10/22] tools/nolibc: export environ as a weak symbol on mips Willy Tarreau
2023-01-09  8:41 ` [PATCH 11/22] tools/nolibc: export environ as a weak symbol on riscv Willy Tarreau
2023-01-09  8:41 ` [PATCH 12/22] tools/nolibc: export environ as a weak symbol on s390 Willy Tarreau
2023-01-09  8:41 ` [PATCH 13/22] tools/nolibc: add auxiliary vector retrieval for i386 Willy Tarreau
2023-01-09  8:42 ` Willy Tarreau [this message]
2023-01-09  8:42 ` [PATCH 15/22] tools/nolibc: add auxiliary vector retrieval for arm64 Willy Tarreau
2023-01-09  8:42 ` [PATCH 16/22] tools/nolibc: add auxiliary vector retrieval for arm Willy Tarreau
2023-01-09  8:42 ` [PATCH 17/22] tools/nolibc: add auxiliary vector retrieval for riscv Willy Tarreau
2023-01-09  8:42 ` [PATCH 18/22] tools/nolibc: add auxiliary vector retrieval for mips Willy Tarreau
2023-01-09  8:42 ` [PATCH 19/22] tools/nolibc: add auxiliary vector retrieval for s390 Willy Tarreau
2023-01-09  8:42 ` [PATCH 20/22] nolibc/stdlib: Implement `getauxval(3)` function Willy Tarreau
2023-01-09  8:42 ` [PATCH 21/22] nolibc/sys: Implement `getpagesize(2)` function Willy Tarreau
2023-01-09  8:42 ` [PATCH 22/22] selftests/nolibc: Add `getpagesize(2)` selftest Willy Tarreau
2023-01-09  9:15 ` [PATCH 00/22] nolibc: usability improvements (errno, environ, auxv) Ammar Faizi
2023-01-09  9:17   ` Willy Tarreau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230109084208.27355-15-w@1wt.eu \
    --to=w@1wt.eu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.