stand: Work around upstream issues in the standalone environment

There's a number of issues with including zfs_context.h from a
standalone environment. First, sys/uio_imp.h isn't at all safe for this
environment, so define its guard #defines so that its contents are
skipped. Next, there's a problem including string.h to get the mem*
routines, so just define them here. ZFS_MODULE_PARAM_ARGS isn't defined
properly. I had wanted to define it when I was upstreaming changes to
include/os/freebsd/spl/sys/zfs_context.h, but they ran into resistance
so I'm defining that here now (it is also defined in zstd_shim.c, but
that will disappear once the issues it works around are
cleared). Finally, sys/sysmacros.h has to be included now before
sys/atomic.h, but upstream includes it after so include it here so that
the guards make the out-of-order includes in upstream irrelevant.

Sponsored by:		Netflix
Reviewed by:		kevans
Differential Revision:	https://reviews.freebsd.org/D35750
This commit is contained in:
Warner Losh 2022-07-08 17:34:46 -06:00
parent 87d3aa5397
commit faf25f48d6

View File

@ -0,0 +1,32 @@
/*
* Copyright 2022, Netflix, Inc
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
/* TODO: openzfs/include/sys/uio_impl.h must not be included in stand */
#ifndef _SYS_UIO_IMPL_H
#define _SYS_UIO_IMPL_H
#endif
/*
* sys/atomic.h must be included after sys/sysmacros.h. The latter includes
* machine/atomic.h, which interferes. Sadly, upstream includes them in the
* wrong order, so we include it here to fix that.
*/
#include <sys/sysmacros.h>
#include_next <sys/zfs_context.h>
#define ZFS_MODULE_PARAM_ARGS void
/*
* Not sure why I need these, but including the canonical stand.h fails because
* the normal string.h doesn't like all the other shenanigans in this environment.
*/
void *memcpy(void *dst, const void *src, size_t len);
void *memset(void *dest, int c, size_t len);
void *memmem(const void *big, size_t big_len, const void *little,
size_t little_len);