aboutsummaryrefslogtreecommitdiff
path: root/tools/build/cross-build
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build/cross-build')
-rw-r--r--tools/build/cross-build/include/common/pwd.h4
-rw-r--r--tools/build/cross-build/include/common/sys/cdefs.h3
-rw-r--r--tools/build/cross-build/include/common/unistd.h5
-rw-r--r--tools/build/cross-build/include/linux/sys/wait.h47
4 files changed, 59 insertions, 0 deletions
diff --git a/tools/build/cross-build/include/common/pwd.h b/tools/build/cross-build/include/common/pwd.h
index 14abc7fcadf0..109119e9bfe3 100644
--- a/tools/build/cross-build/include/common/pwd.h
+++ b/tools/build/cross-build/include/common/pwd.h
@@ -41,6 +41,10 @@
#define user_from_uid __nbcompat_user_from_uid
+#ifndef _PASSWORD_EFMT1
+#define _PASSWORD_EFMT1 '_' /* extended encryption format */
+#endif
+
int pwcache_userdb(int (*a_setpassent)(int), void (*a_endpwent)(void),
struct passwd *(*a_getpwnam)(const char *),
struct passwd *(*a_getpwuid)(uid_t));
diff --git a/tools/build/cross-build/include/common/sys/cdefs.h b/tools/build/cross-build/include/common/sys/cdefs.h
index 6d62333bcffe..d69e4369e01e 100644
--- a/tools/build/cross-build/include/common/sys/cdefs.h
+++ b/tools/build/cross-build/include/common/sys/cdefs.h
@@ -109,6 +109,9 @@
#define __predict_false(exp) __builtin_expect((exp), 0)
#endif
+#ifndef __weak_symbol
+#define __weak_symbol __attribute__((__weak__))
+#endif
#ifndef __weak_reference
#ifdef __ELF__
#define __weak_reference(sym, alias) \
diff --git a/tools/build/cross-build/include/common/unistd.h b/tools/build/cross-build/include/common/unistd.h
index 593dd700f140..fbcc0cc31795 100644
--- a/tools/build/cross-build/include/common/unistd.h
+++ b/tools/build/cross-build/include/common/unistd.h
@@ -39,6 +39,11 @@
#include_next <unistd.h>
#include <getopt.h>
+struct crypt_data {
+ int initialized; /* For compatibility with glibc. */
+ char __buf[256]; /* Buffer returned by crypt_r(). */
+};
+
static inline int
check_utility_compat(const char *utility __unused)
{
diff --git a/tools/build/cross-build/include/linux/sys/wait.h b/tools/build/cross-build/include/linux/sys/wait.h
new file mode 100644
index 000000000000..ca17bfae9b8a
--- /dev/null
+++ b/tools/build/cross-build/include/linux/sys/wait.h
@@ -0,0 +1,47 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright 2021 Jessica Clarke <jrtc27@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#pragma once
+
+/*
+ * glibc's sys/wait.h and stdlib.h both define various wait-related constants,
+ * depending on __USE_XOPEN(2K8) and if the other header has been included.
+ * Since they each probe the other's include guard to determine that, there is
+ * a window between a header defining its include guard and checking for the
+ * other's within which, if the other is included for the first time, they both
+ * believe the other has already defined the relevant macros etc, and so
+ * neither ends up doing so. This was not previously hit, and is still not hit
+ * when using glibc normally (though seems extremely fragile). However, as of
+ * glibc 2.34, signal.h, included by sys/wait, includes a new bits/sigstksz,
+ * which in turn includes unistd.h (when _SC_SIGSTKSZ_SOURCE is defined, which
+ * is implied by _GNU_SOURCE), which we wrap and include stdlib.h from,
+ * creating the exact aforementioned situation that breaks. Thus, forcefully
+ * include stdlib.h first whenever sys/wait.h is as a workaround, since that
+ * way round still works.
+ */
+#include <stdlib.h>
+#include_next <sys/wait.h>