diff --git a/libc/hdr/CMakeLists.txt b/libc/hdr/CMakeLists.txt index 5eb311f4bb229..7f523c50e8694 100644 --- a/libc/hdr/CMakeLists.txt +++ b/libc/hdr/CMakeLists.txt @@ -126,10 +126,13 @@ add_proxy_header_library( libc.include.llvm-libc-macros.sys_stat_macros ) +add_header_library(unistd_overlay HDRS unistd_overlay.h) add_proxy_header_library( unistd_macros HDRS unistd_macros.h + DEPENDS + .unistd_overlay FULL_BUILD_DEPENDS libc.include.unistd libc.include.llvm-libc-macros.unistd_macros diff --git a/libc/hdr/unistd_macros.h b/libc/hdr/unistd_macros.h index 132e123280139..5c2b24354dd3e 100644 --- a/libc/hdr/unistd_macros.h +++ b/libc/hdr/unistd_macros.h @@ -15,7 +15,7 @@ #else // Overlay mode -#include +#include "unistd_overlay.h" #endif // LLVM_LIBC_FULL_BUILD diff --git a/libc/hdr/unistd_overlay.h b/libc/hdr/unistd_overlay.h new file mode 100644 index 0000000000000..e3001e0cda08f --- /dev/null +++ b/libc/hdr/unistd_overlay.h @@ -0,0 +1,69 @@ +//===-- Including unistd.h in overlay mode -------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_LIBC_HDR_UNISTD_OVERLAY_H +#define LLVM_LIBC_HDR_UNISTD_OVERLAY_H + +#ifdef LIBC_FULL_BUILD +#error "This header should only be included in overlay mode" +#endif + +// Overlay mode + +// glibc header might provide extern inline definitions for few +// functions, causing external alias errors. They are guarded by +// `__USE_EXTERN_INLINES` macro. We temporarily disable `__USE_EXTERN_INLINES` +// macro by defining `__NO_INLINE__` before including . +// And the same with `__USE_FORTIFY_LEVEL`, which will be temporarily disabled +// with `_FORTIFY_SOURCE`. + +#ifdef _FORTIFY_SOURCE +#define LIBC_OLD_FORTIFY_SOURCE _FORTIFY_SOURCE +#undef _FORTIFY_SOURCE +#endif + +#ifdef __USE_EXTERN_INLINES +#define LIBC_OLD_USE_EXTERN_INLINES +#undef __USE_EXTERN_INLINES +#endif + +#ifdef __USE_FORTIFY_LEVEL +#define LIBC_OLD_USE_FORTIFY_LEVEL __USE_FORTIFY_LEVEL +#undef __USE_FORTIFY_LEVEL +#define __USE_FORTIFY_LEVEL 0 +#endif + +#ifndef __NO_INLINE__ +#define __NO_INLINE__ 1 +#define LIBC_SET_NO_INLINE +#endif + +#include + +#ifdef LIBC_OLD_FORTIFY_SOURCE +#define _FORTIFY_SOURCE LIBC_OLD_FORTIFY_SOURCE +#undef LIBC_OLD_FORTIFY_SOURCE +#endif + +#ifdef LIBC_SET_NO_INLINE +#undef __NO_INLINE__ +#undef LIBC_SET_NO_INLINE +#endif + +#ifdef LIBC_OLD_USE_FORTIFY_LEVEL +#undef __USE_FORTIFY_LEVEL +#define __USE_FORTIFY_LEVEL LIBC_OLD_USE_FORTIFY_LEVEL +#undef LIBC_OLD_USE_FORTIFY_LEVEL +#endif + +#ifdef LIBC_OLD_USE_EXTERN_INLINES +#define __USE_EXTERN_INLINES +#undef LIBC_OLD_USE_EXTERN_INLINES +#endif + +#endif // LLVM_LIBC_HDR_UNISTD_OVERLAY_H diff --git a/libc/src/unistd/dup.h b/libc/src/unistd/dup.h index 63f093c0ee436..57601455acc61 100644 --- a/libc/src/unistd/dup.h +++ b/libc/src/unistd/dup.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_DUP_H #define LLVM_LIBC_SRC_UNISTD_DUP_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/dup2.h b/libc/src/unistd/dup2.h index 060c112daf08f..e2cf62389bca8 100644 --- a/libc/src/unistd/dup2.h +++ b/libc/src/unistd/dup2.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_DUP2_H #define LLVM_LIBC_SRC_UNISTD_DUP2_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/dup3.h b/libc/src/unistd/dup3.h index f3868867123b4..06d9b23dbd200 100644 --- a/libc/src/unistd/dup3.h +++ b/libc/src/unistd/dup3.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_DUP3_H #define LLVM_LIBC_SRC_UNISTD_DUP3_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/fork.h b/libc/src/unistd/fork.h index b6fd5763b3a5f..f55ec740cfb12 100644 --- a/libc/src/unistd/fork.h +++ b/libc/src/unistd/fork.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_FORK_H #define LLVM_LIBC_SRC_UNISTD_FORK_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/ftruncate.h b/libc/src/unistd/ftruncate.h index cd8d363727c4a..88a7d13249e8c 100644 --- a/libc/src/unistd/ftruncate.h +++ b/libc/src/unistd/ftruncate.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_FTRUNCATE_H #define LLVM_LIBC_SRC_UNISTD_FTRUNCATE_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/getcwd.h b/libc/src/unistd/getcwd.h index 8b63a91c26b5c..36ca48141b93f 100644 --- a/libc/src/unistd/getcwd.h +++ b/libc/src/unistd/getcwd.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_GETCWD_H #define LLVM_LIBC_SRC_UNISTD_GETCWD_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/geteuid.h b/libc/src/unistd/geteuid.h index 9469797bd3d4e..5cb4ed53ae88f 100644 --- a/libc/src/unistd/geteuid.h +++ b/libc/src/unistd/geteuid.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_GETEUID_H #define LLVM_LIBC_SRC_UNISTD_GETEUID_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/getopt.h b/libc/src/unistd/getopt.h index 1be3331dcd98a..0be639d871196 100644 --- a/libc/src/unistd/getopt.h +++ b/libc/src/unistd/getopt.h @@ -10,8 +10,8 @@ #define LLVM_LIBC_SRC_UNISTD_GETOPT_H #include "hdr/types/FILE.h" +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/getpid.h b/libc/src/unistd/getpid.h index c3c55b0c06b10..4b6011673d06f 100644 --- a/libc/src/unistd/getpid.h +++ b/libc/src/unistd/getpid.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_GETPID_H #define LLVM_LIBC_SRC_UNISTD_GETPID_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/getppid.h b/libc/src/unistd/getppid.h index d820791bc06fa..ffe05dde1fa43 100644 --- a/libc/src/unistd/getppid.h +++ b/libc/src/unistd/getppid.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_GETPPID_H #define LLVM_LIBC_SRC_UNISTD_GETPPID_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/getuid.h b/libc/src/unistd/getuid.h index dd82c7119d401..c927f95b1eba7 100644 --- a/libc/src/unistd/getuid.h +++ b/libc/src/unistd/getuid.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_GETUID_H #define LLVM_LIBC_SRC_UNISTD_GETUID_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/isatty.h b/libc/src/unistd/isatty.h index 6dd1b7b817171..5c8be6541c99c 100644 --- a/libc/src/unistd/isatty.h +++ b/libc/src/unistd/isatty.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_ISATTY_H #define LLVM_LIBC_SRC_UNISTD_ISATTY_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/link.h b/libc/src/unistd/link.h index 9b27aa1accf4e..c1c26c5e0d494 100644 --- a/libc/src/unistd/link.h +++ b/libc/src/unistd/link.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_LINK_H #define LLVM_LIBC_SRC_UNISTD_LINK_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/linux/ftruncate.cpp b/libc/src/unistd/linux/ftruncate.cpp index 39cb3b5778faa..ccbb0634664aa 100644 --- a/libc/src/unistd/linux/ftruncate.cpp +++ b/libc/src/unistd/linux/ftruncate.cpp @@ -11,11 +11,11 @@ #include "src/__support/OSUtil/syscall.h" // For internal syscall function. #include "src/__support/common.h" +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" #include "src/errno/libc_errno.h" #include // For uint64_t. #include // For syscall numbers. -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/linux/lseek.cpp b/libc/src/unistd/linux/lseek.cpp index 9486cecf3b123..0e957498da746 100644 --- a/libc/src/unistd/linux/lseek.cpp +++ b/libc/src/unistd/linux/lseek.cpp @@ -14,8 +14,8 @@ #include "src/__support/OSUtil/syscall.h" // For internal syscall function. #include "src/__support/common.h" +#include "hdr/types/off_t.h" #include // For syscall numbers. -#include // For off_t. namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/linux/sysconf.cpp b/libc/src/unistd/linux/sysconf.cpp index 1540eb499ec12..f785ff321c7d7 100644 --- a/libc/src/unistd/linux/sysconf.cpp +++ b/libc/src/unistd/linux/sysconf.cpp @@ -10,11 +10,11 @@ #include "src/__support/common.h" +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" #include "src/errno/libc_errno.h" #include "src/sys/auxv/getauxval.h" #include -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/linux/truncate.cpp b/libc/src/unistd/linux/truncate.cpp index 283cf4098cf45..8236edb480d10 100644 --- a/libc/src/unistd/linux/truncate.cpp +++ b/libc/src/unistd/linux/truncate.cpp @@ -13,9 +13,9 @@ #include "src/__support/macros/config.h" #include "src/errno/libc_errno.h" +#include "hdr/unistd_macros.h" #include // For uint64_t. #include // For syscall numbers. -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/lseek.h b/libc/src/unistd/lseek.h index a8704ec7058dd..fdfc7656c4b3e 100644 --- a/libc/src/unistd/lseek.h +++ b/libc/src/unistd/lseek.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_LSEEK_H #define LLVM_LIBC_SRC_UNISTD_LSEEK_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/pread.h b/libc/src/unistd/pread.h index 4723675e82a20..e2cfce6b53ed5 100644 --- a/libc/src/unistd/pread.h +++ b/libc/src/unistd/pread.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_PREAD_H #define LLVM_LIBC_SRC_UNISTD_PREAD_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/pwrite.h b/libc/src/unistd/pwrite.h index baffbe48b6437..2f5646b048ec9 100644 --- a/libc/src/unistd/pwrite.h +++ b/libc/src/unistd/pwrite.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_PWRITE_H #define LLVM_LIBC_SRC_UNISTD_PWRITE_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/read.h b/libc/src/unistd/read.h index 01231cb82e35e..a12c49e4254ec 100644 --- a/libc/src/unistd/read.h +++ b/libc/src/unistd/read.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_READ_H #define LLVM_LIBC_SRC_UNISTD_READ_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/readlink.h b/libc/src/unistd/readlink.h index a73e9740c7463..9047097f46b24 100644 --- a/libc/src/unistd/readlink.h +++ b/libc/src/unistd/readlink.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_READLINK_H #define LLVM_LIBC_SRC_UNISTD_READLINK_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/readlinkat.h b/libc/src/unistd/readlinkat.h index 6bdd48b537fc8..10fd8bb6a14b8 100644 --- a/libc/src/unistd/readlinkat.h +++ b/libc/src/unistd/readlinkat.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_READLINKAT_H #define LLVM_LIBC_SRC_UNISTD_READLINKAT_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/swab.h b/libc/src/unistd/swab.h index caa9c71001097..f6fa3414c43f5 100644 --- a/libc/src/unistd/swab.h +++ b/libc/src/unistd/swab.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_SWAB_H #define LLVM_LIBC_SRC_UNISTD_SWAB_H +#include "hdr/types/ssize_t.h" #include "src/__support/macros/config.h" -#include // For ssize_t namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/symlink.h b/libc/src/unistd/symlink.h index 47f04f8845b46..c743a32a8930f 100644 --- a/libc/src/unistd/symlink.h +++ b/libc/src/unistd/symlink.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_SYMLINK_H #define LLVM_LIBC_SRC_UNISTD_SYMLINK_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/symlinkat.h b/libc/src/unistd/symlinkat.h index 9f8ad517af5a6..6697ce4d537e6 100644 --- a/libc/src/unistd/symlinkat.h +++ b/libc/src/unistd/symlinkat.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_SYMLINKAT_H #define LLVM_LIBC_SRC_UNISTD_SYMLINKAT_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/syscall.h b/libc/src/unistd/syscall.h index db70745719cfe..7f82bd8a452f6 100644 --- a/libc/src/unistd/syscall.h +++ b/libc/src/unistd/syscall.h @@ -9,9 +9,9 @@ #ifndef LLVM_LIBC_SRC_UNISTD_SYSCALL_H #define LLVM_LIBC_SRC_UNISTD_SYSCALL_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" #include -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/sysconf.h b/libc/src/unistd/sysconf.h index 1b3f39e413508..470c4d846568c 100644 --- a/libc/src/unistd/sysconf.h +++ b/libc/src/unistd/sysconf.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_SYSCONF_H #define LLVM_LIBC_SRC_UNISTD_SYSCONF_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/truncate.h b/libc/src/unistd/truncate.h index 9ba5cf8317529..5206a864bcf5d 100644 --- a/libc/src/unistd/truncate.h +++ b/libc/src/unistd/truncate.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_TRUNCATE_H #define LLVM_LIBC_SRC_UNISTD_TRUNCATE_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL { diff --git a/libc/src/unistd/write.h b/libc/src/unistd/write.h index e40ce19e21769..fa08ae40cf603 100644 --- a/libc/src/unistd/write.h +++ b/libc/src/unistd/write.h @@ -9,8 +9,8 @@ #ifndef LLVM_LIBC_SRC_UNISTD_WRITE_H #define LLVM_LIBC_SRC_UNISTD_WRITE_H +#include "hdr/unistd_macros.h" #include "src/__support/macros/config.h" -#include namespace LIBC_NAMESPACE_DECL {