Skip to content

Commit 8e2299c

Browse files
[libc] Add unistd overlay
1 parent 0adff0a commit 8e2299c

File tree

7 files changed

+75
-6
lines changed

7 files changed

+75
-6
lines changed

libc/hdr/unistd_macros.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
#else // Overlay mode
1717

18-
#include <unistd.h>
18+
#include "unistd_overlay.h"
1919

2020
#endif // LLVM_LIBC_FULL_BUILD
2121

libc/hdr/unistd_overlay.h

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
//===-- Including unistd.h in overlay mode ---------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#ifndef LLVM_LIBC_HDR_UNISTD_OVERLAY_H
10+
#define LLVM_LIBC_HDR_UNISTD_OVERLAY_H
11+
12+
#ifdef LIBC_FULL_BUILD
13+
#error "This header should only be included in overlay mode"
14+
#endif
15+
16+
// Overlay mode
17+
18+
// glibc <unistd.h> header might provide extern inline definitions for few
19+
// functions, causing external alias errors. They are guarded by
20+
// `__USE_EXTERN_INLINES` macro. We temporarily disable `__USE_EXTERN_INLINES`
21+
// macro by defining `__NO_INLINE__` before including <stdio.h>.
22+
// And the same with `__USE_FORTIFY_LEVEL`, which will be temporarily disabled
23+
// with `_FORTIFY_SOURCE`.
24+
25+
#ifdef _FORTIFY_SOURCE
26+
#define LIBC_OLD_FORTIFY_SOURCE _FORTIFY_SOURCE
27+
#undef _FORTIFY_SOURCE
28+
#endif
29+
30+
#ifdef __USE_EXTERN_INLINES
31+
#define LIBC_OLD_USE_EXTERN_INLINES
32+
#undef __USE_EXTERN_INLINES
33+
#endif
34+
35+
#ifdef __USE_FORTIFY_LEVEL
36+
#define LIBC_OLD_USE_FORTIFY_LEVEL __USE_FORTIFY_LEVEL
37+
#undef __USE_FORTIFY_LEVEL
38+
#define __USE_FORTIFY_LEVEL 0
39+
#endif
40+
41+
#ifndef __NO_INLINE__
42+
#define __NO_INLINE__ 1
43+
#define LIBC_SET_NO_INLINE
44+
#endif
45+
46+
#include <unistd.h>
47+
48+
#ifdef LIBC_OLD_FORTIFY_SOURCE
49+
#define _FORTIFY_SOURCE LIBC_OLD_FORTIFY_SOURCE
50+
#undef LIBC_OLD_FORTIFY_SOURCE
51+
#endif
52+
53+
#ifdef LIBC_SET_NO_INLINE
54+
#undef __NO_INLINE__
55+
#undef LIBC_SET_NO_INLINE
56+
#endif
57+
58+
#ifdef LIBC_OLD_USE_FORTIFY_LEVEL
59+
#undef __USE_FORTIFY_LEVEL
60+
#define __USE_FORTIFY_LEVEL LIBC_OLD_USE_FORTIFY_LEVEL
61+
#undef LIBC_OLD_USE_FORTIFY_LEVEL
62+
#endif
63+
64+
#ifdef LIBC_OLD_USE_EXTERN_INLINES
65+
#define __USE_EXTERN_INLINES
66+
#undef LIBC_OLD_USE_EXTERN_INLINES
67+
#endif
68+
69+
#endif // LLVM_LIBC_HDR_UNISTD_OVERLAY_H

libc/src/unistd/getcwd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define LLVM_LIBC_SRC_UNISTD_GETCWD_H
1111

1212
#include "src/__support/macros/config.h"
13-
#include <unistd.h>
13+
#include "hdr/unistd_macros.h"
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

libc/src/unistd/pread.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define LLVM_LIBC_SRC_UNISTD_PREAD_H
1111

1212
#include "src/__support/macros/config.h"
13-
#include <unistd.h>
13+
#include "hdr/unistd_macros.h"
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

libc/src/unistd/read.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define LLVM_LIBC_SRC_UNISTD_READ_H
1111

1212
#include "src/__support/macros/config.h"
13-
#include <unistd.h>
13+
#include "hdr/unistd_macros.h"
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

libc/src/unistd/readlink.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define LLVM_LIBC_SRC_UNISTD_READLINK_H
1111

1212
#include "src/__support/macros/config.h"
13-
#include <unistd.h>
13+
#include "hdr/unistd_macros.h"
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

libc/src/unistd/readlinkat.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#define LLVM_LIBC_SRC_UNISTD_READLINKAT_H
1111

1212
#include "src/__support/macros/config.h"
13-
#include <unistd.h>
13+
#include "hdr/unistd_macros.h"
1414

1515
namespace LIBC_NAMESPACE_DECL {
1616

0 commit comments

Comments
 (0)