From 79e02149fcb480c95cfda65e2145ed021dfde5a6 Mon Sep 17 00:00:00 2001 From: Alex Richardson Date: Sat, 19 Sep 2020 12:08:16 +0000 Subject: [PATCH] Fix dtrace tools bootstrap on non-FreeBSD after OpenZFS import This required surprisingly few build system changes and only two changes to the openZFS compat headers which have been upstreamed as https://github.com/openzfs/zfs/pull/10863 Reviewed By: #zfs, freqlabs Differential Revision: https://reviews.freebsd.org/D26193 --- cddl/lib/libspl/Makefile | 6 ++- .../build/cross-build/include/common/string.h | 4 ++ .../cross-build/include/common/sys/cdefs.h | 8 +++ .../cross-build/include/common/sys/uio.h | 51 ------------------- .../cross-build/include/linux/sys/stat.h | 3 ++ .../cross-build/include/mac/sys/_types.h | 2 + tools/build/mk/Makefile.boot | 1 - 7 files changed, 21 insertions(+), 54 deletions(-) delete mode 100644 tools/build/cross-build/include/common/sys/uio.h diff --git a/cddl/lib/libspl/Makefile b/cddl/lib/libspl/Makefile index 64317c41b730..8088ef497d46 100644 --- a/cddl/lib/libspl/Makefile +++ b/cddl/lib/libspl/Makefile @@ -14,13 +14,14 @@ SRCS = \ list.c \ mkdirp.c \ page.c \ - strlcat.c \ - strlcpy.c \ timestamp.c \ zone.c \ include/sys/list.h \ include/sys/list_impl.h +# These functions are not required when bootstrapping and the atomic code +# will not compile when building on macOS. +.if !defined(BOOTSTRAPPING) SRCS += \ getexecname.c \ gethostid.c \ @@ -38,6 +39,7 @@ SRCS += atomic.S .PATH: ${SRCTOP}/sys/contrib/openzfs/lib/libspl/asm-generic SRCS += atomic.c .endif +.endif WARNS?= 2 diff --git a/tools/build/cross-build/include/common/string.h b/tools/build/cross-build/include/common/string.h index 949f3fe10a5d..dd039d54583e 100644 --- a/tools/build/cross-build/include/common/string.h +++ b/tools/build/cross-build/include/common/string.h @@ -37,6 +37,10 @@ */ #pragma once +/* Avoid incompatible opensolaris redeclarations (without _FORTIFY_SOURCE). */ +#define HAVE_STRLCAT 1 +#define HAVE_STRLCPY 1 + #include_next /* * FreeBSD string.h #includes strings.h and all libmd code depends on diff --git a/tools/build/cross-build/include/common/sys/cdefs.h b/tools/build/cross-build/include/common/sys/cdefs.h index 6114fcbb9638..2bd57eef908d 100644 --- a/tools/build/cross-build/include/common/sys/cdefs.h +++ b/tools/build/cross-build/include/common/sys/cdefs.h @@ -276,3 +276,11 @@ typedef unsigned long u_long; #ifndef __DEQUALIFY #define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var)) #endif + + +/* Expose all declarations when using FreeBSD headers */ +#define __POSIX_VISIBLE 200809 +#define __XSI_VISIBLE 700 +#define __BSD_VISIBLE 1 +#define __ISO_C_VISIBLE 2011 +#define __EXT1_VISIBLE 1 diff --git a/tools/build/cross-build/include/common/sys/uio.h b/tools/build/cross-build/include/common/sys/uio.h deleted file mode 100644 index f670ded03c04..000000000000 --- a/tools/build/cross-build/include/common/sys/uio.h +++ /dev/null @@ -1,51 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause - * - * Copyright 2018-2020 Alex Richardson - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory (Department of Computer Science and - * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the - * DARPA SSITH research programme. - * - * This software was developed by SRI International and the University of - * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237) - * ("CTSRD"), as part of the DARPA CRASH research programme. - * - * 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. - * - * $FreeBSD$ - */ -#pragma once -#include_next - -/* needed by opensolaris: */ -#ifdef __linux__ -enum uio_rw { UIO_READ, UIO_WRITE }; - -/* Segment flag values. */ -enum uio_seg { - UIO_USERSPACE, /* from user data space */ - UIO_SYSSPACE, /* from system space */ - UIO_NOCOPY /* don't copy, already in object */ -}; -#endif diff --git a/tools/build/cross-build/include/linux/sys/stat.h b/tools/build/cross-build/include/linux/sys/stat.h index 04f8dc19e468..72c6bb950ce9 100644 --- a/tools/build/cross-build/include/linux/sys/stat.h +++ b/tools/build/cross-build/include/linux/sys/stat.h @@ -59,3 +59,6 @@ #ifndef S_ISTXT #define S_ISTXT S_ISVTX #endif + +/* This include is needed for OpenZFS bootstrap */ +#include diff --git a/tools/build/cross-build/include/mac/sys/_types.h b/tools/build/cross-build/include/mac/sys/_types.h index 9dd6616a59fd..fd14a7836792 100644 --- a/tools/build/cross-build/include/mac/sys/_types.h +++ b/tools/build/cross-build/include/mac/sys/_types.h @@ -43,3 +43,5 @@ * __darwin_ct_rune_t exists. */ typedef __darwin_ct_rune_t __ct_rune_t; +/* Needed for opensolaris compat. */ +typedef __int64_t off64_t; diff --git a/tools/build/mk/Makefile.boot b/tools/build/mk/Makefile.boot index b83f417b524f..ada14e6112f4 100644 --- a/tools/build/mk/Makefile.boot +++ b/tools/build/mk/Makefile.boot @@ -44,7 +44,6 @@ LIBELF:=${WORLDTMP}/legacy/usr/lib/libelf.a CFLAGS+= -Werror=implicit-function-declaration -Werror=implicit-int \ -Werror=return-type -Wundef CFLAGS+= -DHAVE_NBTOOL_CONFIG_H=1 -CFLAGS+= -D__BSD_VISIBLE=1 CFLAGS+= -I${SRCTOP}/tools/build/cross-build/include/common # b64_pton and b64_ntop is in libresolv on MacOS and Linux: