diff options
author | Alex Richardson <arichardson@FreeBSD.org> | 2020-08-25 13:18:53 +0000 |
---|---|---|
committer | Alex Richardson <arichardson@FreeBSD.org> | 2020-08-25 13:18:53 +0000 |
commit | d1d32c3dc490f7c8982e1fab945f8f8767e0edb3 (patch) | |
tree | 83a1866f01a01bc7af647bb8912a7f90350eeca6 /tools/build/cross-build/include/common/sys/cdefs.h | |
parent | 1951fa791e2ab9543be1a26c25cf15dd96ff3f3f (diff) | |
download | src-d1d32c3dc490f7c8982e1fab945f8f8767e0edb3.tar.gz src-d1d32c3dc490f7c8982e1fab945f8f8767e0edb3.zip |
Add Linux/macOS compatibility system headers to tools/build/cross-build
These headers are required in order to build the bootstrap tools on macOS
and Linux. A follow-up commit will add implementations of functions that
don't exist on those operating systems to -legacy when bootstrapping.
Reviewed By: brooks
Differential Revision: https://reviews.freebsd.org/D14316
Notes
Notes:
svn path=/head/; revision=364757
Diffstat (limited to 'tools/build/cross-build/include/common/sys/cdefs.h')
-rw-r--r-- | tools/build/cross-build/include/common/sys/cdefs.h | 278 |
1 files changed, 278 insertions, 0 deletions
diff --git a/tools/build/cross-build/include/common/sys/cdefs.h b/tools/build/cross-build/include/common/sys/cdefs.h new file mode 100644 index 000000000000..6114fcbb9638 --- /dev/null +++ b/tools/build/cross-build/include/common/sys/cdefs.h @@ -0,0 +1,278 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright 2018-2020 Alex Richardson <arichardson@FreeBSD.org> + * + * 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 +/* musl libc does not provide a sys/cdefs.h header */ +#if __has_include_next(<sys/cdefs.h>) +#include_next <sys/cdefs.h> +#else +/* No sys/cdefs.h header exists so we have to provide some basic macros */ +#ifdef __cplusplus +#define __BEGIN_DECLS extern "C" { +#define __END_DECLS } +#else +#define __BEGIN_DECLS +#define __END_DECLS +#endif + +#endif + +#ifndef __FBSDID +#define __FBSDID(id) +#endif + +#ifndef __IDSTRING +#define __IDSTRING(name, string) +#endif + +#ifndef rounddown +#define rounddown(x, y) (((x) / (y)) * (y)) +#define rounddown2(x, y) ((x) & (~((y)-1))) /* if y is power of two */ +#define roundup(x, y) ((((x) + ((y)-1)) / (y)) * (y)) /* to any y */ +#define roundup2(x, y) \ + (((x) + ((y)-1)) & (~((y)-1))) /* if y is powers of two */ +#define powerof2(x) ((((x)-1) & (x)) == 0) +#endif + +#ifndef __pure +#define __pure __attribute__((__pure__)) +#endif +#ifndef __packed +#define __packed __attribute__((__packed__)) +#endif +#ifndef __dead2 +#define __dead2 __attribute__((__noreturn__)) +#endif +#ifndef __pure2 +#define __pure2 __attribute__((__const__)) +#endif +#ifndef __used +#define __used __attribute__((__used__)) +#endif +#ifndef __aligned +#define __aligned(x) __attribute__((__aligned__(x))) +#endif +#ifndef __section +#define __section(x) __attribute__((__section__(x))) +#endif + +#ifndef __alloc_size +#define __alloc_size(...) __attribute__((__alloc_size__(__VA_ARGS__))) +#endif +#ifndef __alloc_size2 +#define __alloc_size2(n, x) __attribute__((__alloc_size__(n, x))) +#endif +#ifndef __alloc_align +#define __alloc_align(x) __attribute__((__alloc_align__(x))) +#endif +#ifndef __result_use_check +#define __result_use_check __attribute__((__warn_unused_result__)) +#endif +#ifndef __printflike +#define __printflike(fmtarg, firstvararg) \ + __attribute__((__format__(__printf__, fmtarg, firstvararg))) +#endif +#ifndef __printf0like +#define __printf0like(fmtarg, firstvararg) \ + __attribute__((__format__(__printf0__, fmtarg, firstvararg))) +#endif + +#ifndef __predict_true +#define __predict_true(exp) __builtin_expect((exp), 1) +#endif +#ifndef __predict_false +#define __predict_false(exp) __builtin_expect((exp), 0) +#endif + +#ifndef __weak_reference +#ifdef __ELF__ +#define __weak_reference(sym, alias) \ + __asm__(".weak " #alias); \ + __asm__(".equ " #alias ", " #sym) +#else +#define __weak_reference(sym, alias) \ + static int alias() __attribute__((weakref(#sym))); +#endif +#endif + +/* Some files built as part of the bootstrap libegacy use these macros, but + * since we aren't actually building libc.so, we can defined them to be empty */ +#ifndef __sym_compat +#define __sym_compat(sym, impl, verid) /* not needed for bootstrapping */ +#endif +#ifndef __sym_default +#define __sym_default(sym, impl, verid) /* not needed for bootstrapping */ +#endif +#ifndef __sym_default +#define __warn_references(sym, msg) /* not needed for bootstrapping */ +#endif + +#ifndef __malloc_like +#define __malloc_like __attribute__((__malloc__)) +#endif + +#ifndef nitems +// https://stackoverflow.com/questions/1598773/is-there-a-standard-function-in-c-that-would-return-the-length-of-an-array/1598827#1598827 +#define nitems(x) \ + ((sizeof(x) / sizeof(0 [x])) / ((size_t)(!(sizeof(x) % sizeof(0 [x]))))) +#endif + +#ifndef __min_size +#if !defined(__cplusplus) +#define __min_size(x) static(x) +#else +#define __min_size(x) (x) +#endif +#endif + +#ifndef __unused +#define __unused __attribute__((unused)) +#endif +#define __format_arg(fmtarg) __attribute__((__format_arg__(fmtarg))) + +#ifndef __exported +#define __exported __attribute__((__visibility__("default"))) +#endif +#ifndef __hidden +#define __hidden __attribute__((__visibility__("hidden"))) +#endif + +#ifndef __unreachable +#define __unreachable() __builtin_unreachable() +#endif + +#ifndef __clang__ +/* GCC doesn't like the printf0 format specifier. Clang treats it the same as + * printf so add the compatibility macro here. */ +#define __printf0__ __printf__ +#endif + +/* + * These should probably be in sys/types.h but mtree expects them to exist + * without including <sys/types.h> + */ +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; + +/* This is needed so that BSNMP doesn't redeclare an incompatible version */ +#define HAVE_STRLCPY 1 +/* The compiler supports __func__ */ +#define HAVE_DECL___FUNC__ 1 + +/* On MacOS __CONCAT is defined as x ## y, which won't expand macros */ +#undef __CONCAT +#define __CONCAT1(x, y) x##y +#define __CONCAT(x, y) __CONCAT1(x, y) + +#ifndef __STRING +#define __STRING(x) #x /* stringify without expanding x */ +#endif +#ifndef __XSTRING +#define __XSTRING(x) __STRING(x) /* expand x, then stringify */ +#endif + +#ifndef __has_feature +#define __has_feature(...) 0 +#endif + +#ifndef __has_builtin +#define __has_builtin(...) 0 +#endif + +/* + * Nullability qualifiers: currently only supported by Clang. + */ +#if !(defined(__clang__) && __has_feature(nullability)) +#define _Nonnull +#define _Nullable +#define _Null_unspecified +#define __NULLABILITY_PRAGMA_PUSH +#define __NULLABILITY_PRAGMA_POP +#else +#define __NULLABILITY_PRAGMA_PUSH \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wnullability-completeness\"") +#define __NULLABILITY_PRAGMA_POP _Pragma("clang diagnostic pop") +#endif + +#ifndef __offsetof +#define __offsetof(type, field) __builtin_offsetof(type, field) +#endif + +#define __rangeof(type, start, end) \ + (__offsetof(type, end) - __offsetof(type, start)) + +#ifndef __containerof +#define __containerof(x, s, m) \ + ({ \ + const volatile __typeof(((s *)0)->m) *__x = (x); \ + __DEQUALIFY( \ + s *, (const volatile char *)__x - __offsetof(s, m)); \ + }) +#endif + +#ifndef __RCSID +#define __RCSID(x) +#endif +#ifndef __FBSDID +#define __FBSDID(x) +#endif +#ifndef __RCSID +#define __RCSID(x) +#endif +#ifndef __RCSID_SOURCE +#define __RCSID_SOURCE(x) +#endif +#ifndef __SCCSID +#define __SCCSID(x) +#endif +#ifndef __COPYRIGHT +#define __COPYRIGHT(x) +#endif +#ifndef __DECONST +#define __DECONST(type, var) ((type)(__uintptr_t)(const void *)(var)) +#endif + +#ifndef __DEVOLATILE +#define __DEVOLATILE(type, var) ((type)(__uintptr_t)(volatile void *)(var)) +#endif + +#ifndef __DEQUALIFY +#define __DEQUALIFY(type, var) ((type)(__uintptr_t)(const volatile void *)(var)) +#endif |