diff options
Diffstat (limited to 'main/postgresql15/fix-tests-on-musl.patch')
-rw-r--r-- | main/postgresql15/fix-tests-on-musl.patch | 96 |
1 files changed, 0 insertions, 96 deletions
diff --git a/main/postgresql15/fix-tests-on-musl.patch b/main/postgresql15/fix-tests-on-musl.patch deleted file mode 100644 index 405ac8fb1a4..00000000000 --- a/main/postgresql15/fix-tests-on-musl.patch +++ /dev/null @@ -1,96 +0,0 @@ -Patch-Source: https://github.com/postgres/postgres/commit/8a92b70c11ba2b5f0d2b2611d9453dd90f618629 --- -From 8a92b70c11ba2b5f0d2b2611d9453dd90f618629 Mon Sep 17 00:00:00 2001 -From: Tom Lane <tgl@sss.pgh.pa.us> -Date: Tue, 26 Mar 2024 11:44:49 -0400 -Subject: [PATCH] Allow "make check"-style testing to work with musl C library. - -The musl dynamic linker saves a pointer to the process' environment -value of LD_LIBRARY_PATH very early in startup. When we move/clobber -the environment to make more room for ps status strings, we clobber -that value and thereby prevent libraries from being found via -LD_LIBRARY_PATH, which breaks the use of a temporary installation -for testing purposes. To fix, stop collecting usable space for -ps status if we notice that the variable we are about to clobber -is LD_LIBRARY_PATH. This will result in some reduction in how long -the ps status can be, but it's only likely to occur in temporary -test contexts, so it doesn't seem like a big problem. In any case, -we don't have to do it if we see we are on glibc, which surely is -where the majority of our Linux testing is done. - -Thomas Munro, Bruce Momjian, and Tom Lane, per report from Wolfgang -Walther. Back-patch to all supported branches, with the hope that -we'll set up a buildfarm animal to test on this platform. - -Discussion: https://postgr.es/m/fddd1cd6-dc16-40a2-9eb5-d7fef2101488@technowledgy.de ---- - src/backend/utils/misc/ps_status.c | 35 ++++++++++++++++++++++++++---- - 1 file changed, 31 insertions(+), 4 deletions(-) - -diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c -index 5d829e6e483a3..9da6377402024 100644 ---- a/src/backend/utils/misc/ps_status.c -+++ b/src/backend/utils/misc/ps_status.c -@@ -107,7 +107,8 @@ static char **save_argv; - * (The original argv[] will not be overwritten by this routine, but may be - * overwritten during init_ps_display. Also, the physical location of the - * environment strings may be moved, so this should be called before any code -- * that might try to hang onto a getenv() result.) -+ * that might try to hang onto a getenv() result. But see hack for musl -+ * within.) - * - * Note that in case of failure this cannot call elog() as that is not - * initialized yet. We rely on write_stderr() instead. -@@ -122,7 +123,7 @@ save_ps_display_args(int argc, char **argv) - - /* - * If we're going to overwrite the argv area, count the available space. -- * Also move the environment to make additional room. -+ * Also move the environment strings to make additional room. - */ - { - char *end_of_area = NULL; -@@ -151,7 +152,33 @@ save_ps_display_args(int argc, char **argv) - for (i = 0; environ[i] != NULL; i++) - { - if (end_of_area + 1 == environ[i]) -- end_of_area = environ[i] + strlen(environ[i]); -+ { -+ /* -+ * The musl dynamic linker keeps a static pointer to the -+ * initial value of LD_LIBRARY_PATH, if that is defined in the -+ * process's environment. Therefore, we must not overwrite the -+ * value of that setting and thus cannot advance end_of_area -+ * beyond it. Musl does not define any identifying compiler -+ * symbol, so we have to do this unless we see a symbol -+ * identifying a Linux libc we know is safe. -+ */ -+#if defined(__linux__) && (!defined(__GLIBC__) && !defined(__UCLIBC__)) -+ if (strncmp(environ[i], "LD_LIBRARY_PATH=", 16) == 0) -+ { -+ /* -+ * We can overwrite the name, but stop at the equals sign. -+ * Future loop iterations will not find any more -+ * contiguous space, but we don't break early because we -+ * need to count the total number of environ[] entries. -+ */ -+ end_of_area = environ[i] + 15; -+ } -+ else -+#endif -+ { -+ end_of_area = environ[i] + strlen(environ[i]); -+ } -+ } - } - - ps_buffer = argv[0]; -@@ -183,7 +210,7 @@ save_ps_display_args(int argc, char **argv) - * If we're going to change the original argv[] then make a copy for - * argument parsing purposes. - * -- * (NB: do NOT think to remove the copying of argv[], even though -+ * NB: do NOT think to remove the copying of argv[], even though - * postmaster.c finishes looking at argv[] long before we ever consider - * changing the ps display. On some platforms, getopt() keeps pointers - * into the argv array, and will get horribly confused when it is |