commit:     76b1cd8ec361bee90e8ebfcd58dd44f8017684c5
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 24 11:27:24 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jan 24 11:27:24 2025 +0000
URL:        
https://gitweb.gentoo.org/proj/toolchain/glibc-patches.git/commit/?id=76b1cd8e

9999: drop now-obsolete revert

It landed upstream.

Signed-off-by: Sam James <sam <AT> gentoo.org>

 ...ib-Support-malloc-managed-environ-arrays-.patch | 246 ---------------------
 1 file changed, 246 deletions(-)

diff --git 
a/9999/0007-Revert-stdlib-Support-malloc-managed-environ-arrays-.patch 
b/9999/0007-Revert-stdlib-Support-malloc-managed-environ-arrays-.patch
deleted file mode 100644
index baeba66..0000000
--- a/9999/0007-Revert-stdlib-Support-malloc-managed-environ-arrays-.patch
+++ /dev/null
@@ -1,246 +0,0 @@
-https://sourceware.org/PR32588
-
-From 9cd3432490deb23be736bd79f9a4bffc8820cc6e Mon Sep 17 00:00:00 2001
-Message-ID: 
<9cd3432490deb23be736bd79f9a4bffc8820cc6e.1737676467.git....@gentoo.org>
-From: Sam James <[email protected]>
-Date: Thu, 23 Jan 2025 23:54:25 +0000
-Subject: [PATCH] Revert "stdlib: Support malloc-managed environ arrays for
- compatibility"
-
-This reverts commit b62759db04b8ed7f829c06f1d7c3b8fb70616493.
----
- csu/init-first.c           |  1 -
- csu/libc-start.c           |  1 -
- include/unistd.h           |  3 --
- posix/environ.c            |  2 --
- stdlib/Makefile            |  1 -
- stdlib/setenv.c            | 66 +++++++++++++++++++-------------------
- stdlib/tst-setenv-malloc.c | 64 ------------------------------------
- 7 files changed, 33 insertions(+), 105 deletions(-)
- delete mode 100644 stdlib/tst-setenv-malloc.c
-
-diff --git a/csu/init-first.c b/csu/init-first.c
-index 0ad6f75dcdd..e35e4ce84f1 100644
---- a/csu/init-first.c
-+++ b/csu/init-first.c
-@@ -61,7 +61,6 @@ _init_first (int argc, char **argv, char **envp)
-   __libc_argc = argc;
-   __libc_argv = argv;
-   __environ = envp;
--  __environ_startup = envp;
- 
- #ifndef SHARED
-   /* First the initialization which normally would be done by the
-diff --git a/csu/libc-start.c b/csu/libc-start.c
-index 4e15b6191dc..6f3d52e223d 100644
---- a/csu/libc-start.c
-+++ b/csu/libc-start.c
-@@ -244,7 +244,6 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** 
MAIN_AUXVEC_DECL),
-   char **ev = &argv[argc + 1];
- 
-   __environ = ev;
--  __environ_startup = ev;
- 
-   /* Store the lowest stack address.  This is done in ld.so if this is
-      the code for the DSO.  */
-diff --git a/include/unistd.h b/include/unistd.h
-index ada957f9d04..e241603b813 100644
---- a/include/unistd.h
-+++ b/include/unistd.h
-@@ -203,9 +203,6 @@ libc_hidden_proto (__tcsetpgrp)
- extern int __libc_enable_secure attribute_relro;
- rtld_hidden_proto (__libc_enable_secure)
- 
--/* Original value of __environ.  Initialized by _init_first (dynamic)
--   or __libc_start_main (static).  */
--extern char **__environ_startup attribute_hidden;
- 
- /* Various internal function.  */
- extern void __libc_check_standard_fds (void) attribute_hidden;
-diff --git a/posix/environ.c b/posix/environ.c
-index 2430b47d8ee..a0ed0d80eab 100644
---- a/posix/environ.c
-+++ b/posix/environ.c
-@@ -10,5 +10,3 @@ weak_alias (__environ, environ)
- /* The SVR4 ABI says `_environ' will be the name to use
-    in case the user overrides the weak alias `environ'.  */
- weak_alias (__environ, _environ)
--
--char **__environ_startup;
-diff --git a/stdlib/Makefile b/stdlib/Makefile
-index ee95b2e79a2..a5fbc1a27e1 100644
---- a/stdlib/Makefile
-+++ b/stdlib/Makefile
-@@ -316,7 +316,6 @@ tests := \
-   tst-setcontext9 \
-   tst-setcontext10 \
-   tst-setcontext11 \
--  tst-setenv-malloc \
-   tst-stdbit-Wconversion \
-   tst-stdbit-builtins \
-   tst-stdc_bit_ceil \
-diff --git a/stdlib/setenv.c b/stdlib/setenv.c
-index c6dc9f7945a..2a2eec9c987 100644
---- a/stdlib/setenv.c
-+++ b/stdlib/setenv.c
-@@ -191,52 +191,52 @@ __add_to_environ (const char *name, const char *value, 
const char *combined,
-       ep[1] = NULL;
-       else
-       {
--        /* We cannot use __environ as is and need a larger allocation.  */
--
--        if (start_environ == __environ_startup
--            || __environ_is_from_array_list (start_environ))
--          {
--            /* Allocate a new array, managed in the list.  */
--            struct environ_array *target_array
--              = __environ_new_array (required_size);
--            if (target_array == NULL)
--              {
--                UNLOCK;
--                return -1;
--              }
--            result_environ = &target_array->array[0];
--
--            /* Copy over the __environ array contents.  This code
--               handles the case start_environ == ep == NULL, too.  */
--            size_t i;
--            for (i = 0; start_environ + i < ep; ++i)
--              /* Regular store because unless there has been direct
--                 manipulation of the environment, target_array is still
--                 a private copy.  */
--              result_environ[i] = atomic_load_relaxed (start_environ + i);
--          }
-+        /* We cannot use __environ as is and need to copy over the
-+           __environ contents into an array managed via
-+           __environ_array_list.  */
-+
-+        struct environ_array *target_array;
-+        if (__environ_array_list != NULL
-+            && required_size <= __environ_array_list->allocated)
-+          /* Existing array has enough room.  Contents is copied below.  */
-+          target_array = __environ_array_list;
-         else
-           {
--            /* Otherwise the application installed its own pointer.
--               Historically, this pointer was managed using realloc.
--               Continue doing so.  This disables multi-threading
--               support.  */
--            result_environ = __libc_reallocarray (start_environ,
--                                                  required_size,
--                                                  sizeof (*result_environ));
--            if (result_environ == NULL)
-+            /* Allocate a new array.  */
-+            target_array = __environ_new_array (required_size);
-+            if (target_array == NULL)
-               {
-                 UNLOCK;
-                 return -1;
-               }
-           }
- 
-+        /* Copy over the __environ array contents.  This forward
-+           copy slides backwards part of the array if __environ
-+           points into target_array->array.  This happens if an
-+           application makes an assignment like:
-+
-+             environ = &environ[1];
-+
-+           The forward copy avoids clobbering values that still
-+           needing copying.  This code handles the case
-+           start_environ == ep == NULL, too.  */
-+        size_t i;
-+        for (i = 0; start_environ + i < ep; ++i)
-+          /* Regular store because unless there has been direct
-+             manipulation of the environment, target_array is still
-+             a private copy.  */
-+          target_array->array[i] = atomic_load_relaxed (start_environ + i);
-+
-         /* This is the new place where we should add the element.  */
--        ep = result_environ + (required_size - 2);
-+        ep = target_array->array + i;
- 
-         /* Add the null terminator in case there was a pointer there
-            previously.  */
-         ep[1] = NULL;
-+
-+        /* And __environ should be repointed to our array.  */
-+        result_environ = &target_array->array[0];
-       }
-     }
- 
-diff --git a/stdlib/tst-setenv-malloc.c b/stdlib/tst-setenv-malloc.c
-deleted file mode 100644
-index 18a9d36842e..00000000000
---- a/stdlib/tst-setenv-malloc.c
-+++ /dev/null
-@@ -1,64 +0,0 @@
--/* Test using setenv with a malloc-allocated environ variable.
--   Copyright (C) 2025 Free Software Foundation, Inc.
--   This file is part of the GNU C Library.
--
--   The GNU C Library is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 of the License, or (at your option) any later version.
--
--   The GNU C Library is distributed in the hope that it will be useful,
--   but WITHOUT ANY WARRANTY; without even the implied warranty of
--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, see
--   <https://www.gnu.org/licenses/>.  */
--
--/* This test is not in the scope for POSIX or any other standard, but
--   some applications assume that environ is a heap-allocated pointer
--   after a call to setenv on an empty environment.  */
--
--#include <stdlib.h>
--#include <unistd.h>
--#include <support/check.h>
--#include <support/support.h>
--
--static const char *original_path;
--static char **save_environ;
--
--static void
--rewrite_environ (void)
--{
--  save_environ = environ;
--  environ = xmalloc (sizeof (*environ));
--  *environ = NULL;
--  TEST_COMPARE (setenv ("A", "1", 1), 0);
--  TEST_COMPARE (setenv ("B", "2", 1), 0);
--  TEST_VERIFY (environ != save_environ);
--  TEST_COMPARE_STRING (environ[0], "A=1");
--  TEST_COMPARE_STRING (environ[1], "B=2");
--  TEST_COMPARE_STRING (environ[2], NULL);
--  TEST_COMPARE_STRING (getenv ("PATH"), NULL);
--  free (environ);
--  environ = save_environ;
--  TEST_COMPARE_STRING (getenv ("PATH"), original_path);
--}
--
--static int
--do_test (void)
--{
--  original_path = getenv ("PATH");
--  rewrite_environ ();
--
--  /* Test again after reallocated the environment due to an initial
--     setenv call.  */
--  TEST_COMPARE (setenv ("TST_SETENV_MALLOC", "1", 1), 0);
--  TEST_VERIFY (environ != save_environ);
--  rewrite_environ ();
--
--  return 0;
--}
--
--#include <support/test-driver.c>
-
-base-commit: b62759db04b8ed7f829c06f1d7c3b8fb70616493
--- 
-2.48.1
-

Reply via email to