tools/nolibc: completely remove optional environ support

In commit 52e423f5b9 ("tools/nolibc: export environ as a weak symbol on i386")
and friends the asm startup logic was extended to directly populate the
"environ" array.

This makes it impossible for "environ" to be dropped by the linker.
Therefore also drop the other logic to handle non-present "environ".

Also add a testcase to validate the initialization of environ.

Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
This commit is contained in:
Thomas Weißschuh
2023-07-10 20:01:34 +02:00
committed by Willy Tarreau
parent 4beb9be811
commit 67d108e2a2
2 changed files with 6 additions and 13 deletions

View File

@@ -44,8 +44,8 @@
#define SINT_MAX_OF_TYPE(type) (((type)1 << (sizeof(type) * 8 - 2)) - (type)1 + ((type)1 << (sizeof(type) * 8 - 2)))
#define SINT_MIN_OF_TYPE(type) (-SINT_MAX_OF_TYPE(type) - 1)
/* will be used by nolibc by getenv() */
char **environ;
/* will be used to test initialization of environ */
static char **test_envp;
/* will be used by some test cases as readable file, please don't write it */
static const char *argv0;
@@ -787,6 +787,7 @@ int run_stdlib(int min, int max)
* test numbers.
*/
switch (test + __LINE__ + 1) {
CASE_TEST(environ); EXPECT_PTREQ(1, environ, test_envp); break;
CASE_TEST(getenv_TERM); EXPECT_STRNZ(1, getenv("TERM")); break;
CASE_TEST(getenv_blah); EXPECT_STRZR(1, getenv("blah")); break;
CASE_TEST(setcmp_blah_blah); EXPECT_EQ(1, strcmp("blah", "blah"), 0); break;
@@ -1120,7 +1121,7 @@ int main(int argc, char **argv, char **envp)
char *test;
argv0 = argv[0];
environ = envp;
test_envp = envp;
/* when called as init, it's possible that no console was opened, for
* example if no /dev file system was provided. We'll check that fd#1