From dfda505870f94a7ac8063eb47f622ddc65665ff1 Mon Sep 17 00:00:00 2001
From: James Hilliard <james.hilliard1@gmail.com>
Date: Tue, 14 Jun 2022 19:42:43 -0600
Subject: [PATCH] Revert "Linux: Implement a useful version of _startup_fatal"

Fixes:
csu/libc-tls.c:202: undefined reference to `_startup_fatal_not_constant'

This reverts commit 2d05ba7f8ef979947e910a37ae8115a816eb4d08.

Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
---
 sysdeps/unix/sysv/linux/i386/startup.h | 23 ++++++++++++---
 sysdeps/unix/sysv/linux/ia64/startup.h | 22 ---------------
 sysdeps/unix/sysv/linux/startup.h      | 39 --------------------------
 3 files changed, 19 insertions(+), 65 deletions(-)
 delete mode 100644 sysdeps/unix/sysv/linux/ia64/startup.h
 delete mode 100644 sysdeps/unix/sysv/linux/startup.h

diff --git a/sysdeps/unix/sysv/linux/i386/startup.h b/sysdeps/unix/sysv/linux/i386/startup.h
index 213805d7d2..67c9310f3a 100644
--- a/sysdeps/unix/sysv/linux/i386/startup.h
+++ b/sysdeps/unix/sysv/linux/i386/startup.h
@@ -1,5 +1,5 @@
 /* Linux/i386 definitions of functions used by static libc main startup.
-   Copyright (C) 2022 Free Software Foundation, Inc.
+   Copyright (C) 2017-2022 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
@@ -16,7 +16,22 @@
    License along with the GNU C Library; if not, see
    <https://www.gnu.org/licenses/>.  */
 
-/* Can't use "call *%gs:SYSINFO_OFFSET" during startup.  */
-#define I386_USE_SYSENTER 0
+#if BUILD_PIE_DEFAULT
+/* Can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE.  */
+# define I386_USE_SYSENTER 0
 
-#include_next <startup.h>
+# include <sysdep.h>
+# include <abort-instr.h>
+
+__attribute__ ((__noreturn__))
+static inline void
+_startup_fatal (const char *message __attribute__ ((unused)))
+{
+  /* This is only called very early during startup in static PIE.
+     FIXME: How can it be improved?  */
+  ABORT_INSTRUCTION;
+  __builtin_unreachable ();
+}
+#else
+# include_next <startup.h>
+#endif
diff --git a/sysdeps/unix/sysv/linux/ia64/startup.h b/sysdeps/unix/sysv/linux/ia64/startup.h
deleted file mode 100644
index 77f29f15a2..0000000000
--- a/sysdeps/unix/sysv/linux/ia64/startup.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Linux/ia64 definitions of functions used by static libc main startup.
-   Copyright (C) 2022 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 code is used before the TCB is set up.  */
-#define IA64_USE_NEW_STUB 0
-
-#include_next <startup.h>
diff --git a/sysdeps/unix/sysv/linux/startup.h b/sysdeps/unix/sysv/linux/startup.h
deleted file mode 100644
index 39859b404a..0000000000
--- a/sysdeps/unix/sysv/linux/startup.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Linux definitions of functions used by static libc main startup.
-   Copyright (C) 2017-2022 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/>.  */
-
-#ifdef SHARED
-# include_next <startup.h>
-#else
-# include <sysdep.h>
-
-/* Avoid a run-time invocation of strlen.  */
-#define _startup_fatal(message)                                         \
-  do                                                                    \
-    {                                                                   \
-      size_t __message_length = __builtin_strlen (message);             \
-      if (! __builtin_constant_p (__message_length))                    \
-        {                                                               \
-          extern void _startup_fatal_not_constant (void);               \
-          _startup_fatal_not_constant ();                               \
-        }                                                               \
-      INTERNAL_SYSCALL_CALL (write, STDERR_FILENO, (message),           \
-                             __message_length);                         \
-      INTERNAL_SYSCALL_CALL (exit_group, 127);                          \
-    }                                                                   \
-  while (0)
-#endif  /* !SHARED */
-- 
2.25.1