-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[libc] Add proxy headers to handle memory allocation associated with the header `#include <stdlib.h> #114690
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-libc Author: Job Henandez Lara (Jobhdez) ChangesThis finishes the work from #114453 by adding proxy headers for Full diff: https://github.com/llvm/llvm-project/pull/114690.diff 15 Files Affected:
diff --git a/libc/hdr/CMakeLists.txt b/libc/hdr/CMakeLists.txt
index c63eadab6f5d77..34dd60ae629b1e 100644
--- a/libc/hdr/CMakeLists.txt
+++ b/libc/hdr/CMakeLists.txt
@@ -23,6 +23,16 @@ function(add_proxy_header_library target_name)
)
endfunction()
+add_proxy_header_library(
+ aligned_alloc
+ HDRS
+ aligned_alloc.h
+ DEPENDS
+ .stdlib_overlay.h
+ FULL_BUILD_DEPENDS
+ libc.include.stdlib
+)
+
add_proxy_header_library(
math_macros
HDRS
@@ -152,6 +162,16 @@ add_proxy_header_library(
libc.include.float
)
+add_proxy_header_library(
+ free
+ HDRS
+ free.h
+ DEPENDS
+ .stdlib_overlay.h
+ FULL_BUILD_DEPENDS
+ libc.include.stdlib
+)
+
add_proxy_header_library(
limits_macros
HDRS
@@ -170,6 +190,26 @@ add_proxy_header_library(
libc.include.link
)
+add_proxy_header_library(
+ malloc
+ HDRS
+ malloc.h
+ DEPENDS
+ .stdlib_overlay.h
+ FULL_BUILD_DEPENDS
+ libc.include.stdlib
+)
+
+add_proxy_header_library(
+ realloc
+ HDRS
+ realloc.h
+ DEPENDS
+ .stdlib_overlay.h
+ FULL_BUILD_DEPENDS
+ libc.include.stdlib
+)
+
add_proxy_header_library(
sys_auxv_macros
HDRS
diff --git a/libc/hdr/aligned_alloc.h b/libc/hdr/aligned_alloc.h
new file mode 100644
index 00000000000000..11d0d0331bd81f
--- /dev/null
+++ b/libc/hdr/aligned_alloc.h
@@ -0,0 +1,21 @@
+//===-- Definition of the aligned_alloc.h proxy ---------------------------===//
+//
+// 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_ALIGNED_ALLOC_H
+#define LLVM_LIBC_HDR_ALIGNED_ALLOC_H
+
+#ifdef LIBC_FULL_BUILD
+extern "C" void *aligned_alloc(size_t, size_t);
+
+#else // Overlay mode
+
+#include "stdlib_overlay.h"
+
+#endif
+
+#endif
diff --git a/libc/hdr/free.h b/libc/hdr/free.h
new file mode 100644
index 00000000000000..f40593ff96aeca
--- /dev/null
+++ b/libc/hdr/free.h
@@ -0,0 +1,21 @@
+//===-- Definition of the free.h proxy ------------------------------------===//
+//
+// 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_FREE_H
+#define LLVM_LIBC_HDR_FREE_H
+
+#ifdef LIBC_FULL_BUILD
+extern "C" void free(void *);
+
+#else // Overlay mode
+
+#include "stdlib_overlay.h"
+
+#endif
+
+#endif
diff --git a/libc/hdr/malloc.h b/libc/hdr/malloc.h
new file mode 100644
index 00000000000000..be002440cd25bf
--- /dev/null
+++ b/libc/hdr/malloc.h
@@ -0,0 +1,21 @@
+//===-- Definition of the malloc.h proxy ----------------------------------===//
+//
+// 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_MALLOC_H
+#define LLVM_LIBC_HDR_MALLOC_H
+
+#ifdef LIBC_FULL_BUILD
+extern "C" void *malloc(size_t);
+
+#else // Overlay mode
+
+#include "stdlib_overlay.h"
+
+#endif
+
+#endif
diff --git a/libc/hdr/realloc.h b/libc/hdr/realloc.h
new file mode 100644
index 00000000000000..140d175d5462b7
--- /dev/null
+++ b/libc/hdr/realloc.h
@@ -0,0 +1,21 @@
+//===-- Definition of the realloc.h proxy ---------------------------------===//
+//
+// 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_REALLOC_H
+#define LLVM_LIBC_HDR_REALLOC_H
+
+#ifdef LIBC_FULL_BUILD
+extern "C" void *realloc(void *ptr, size_t new_size);
+
+#else // Overlay mode
+
+#include "stdlib_overlay.h"
+
+#endif
+
+#endif
diff --git a/libc/src/__support/CMakeLists.txt b/libc/src/__support/CMakeLists.txt
index 14a3acff8fae93..448cfa64c32157 100644
--- a/libc/src/__support/CMakeLists.txt
+++ b/libc/src/__support/CMakeLists.txt
@@ -236,6 +236,9 @@ add_header_library(
HDRS
char_vector.h
DEPENDS
+ libc.hdr.free
+ libc.hdr.malloc
+ libc.hdr.realloc
libc.src.__support.common
)
diff --git a/libc/src/__support/CPP/CMakeLists.txt b/libc/src/__support/CPP/CMakeLists.txt
index 774668be42e56d..cc2e48bb81abf1 100644
--- a/libc/src/__support/CPP/CMakeLists.txt
+++ b/libc/src/__support/CPP/CMakeLists.txt
@@ -80,7 +80,9 @@ add_header_library(
HDRS
string.h
DEPENDS
- libc.include.stdlib
+ libc.hdr.free
+ libc.hdr.malloc
+ libc.hdr.realloc
.string_view
libc.src.__support.common
libc.src.__support.integer_to_string
@@ -199,7 +201,9 @@ add_object_library(
HDRS
new.h
DEPENDS
- libc.include.stdlib
+ libc.hdr.free
+ libc.hdr.malloc
+ libc.hdr.aligned_alloc
libc.src.__support.common
libc.src.__support.macros.properties.os
)
diff --git a/libc/src/__support/CPP/new.cpp b/libc/src/__support/CPP/new.cpp
index 8316329fb10b0b..969bd5b1231562 100644
--- a/libc/src/__support/CPP/new.cpp
+++ b/libc/src/__support/CPP/new.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "new.h"
-#include <stdlib.h> // For free, etc
+#include "hdr/free.h" // For free, etc
void operator delete(void *mem) noexcept { ::free(mem); }
diff --git a/libc/src/__support/CPP/new.h b/libc/src/__support/CPP/new.h
index c1b6b95033f84c..71e9c1e23c27df 100644
--- a/libc/src/__support/CPP/new.h
+++ b/libc/src/__support/CPP/new.h
@@ -13,8 +13,10 @@
#include "src/__support/macros/config.h"
#include "src/__support/macros/properties/os.h"
+#include "hdr/aligned_alloc.h"
+#include "hdr/free.h"
+#include "hdr/malloc.h"
#include <stddef.h> // For size_t
-#include <stdlib.h> // For malloc, free etc.
// Defining members in the std namespace is not preferred. But, we do it here
// so that we can use it to define the operator new which takes std::align_val_t
diff --git a/libc/src/__support/CPP/string.h b/libc/src/__support/CPP/string.h
index 64d4c276e84281..ea3096b6ca68c4 100644
--- a/libc/src/__support/CPP/string.h
+++ b/libc/src/__support/CPP/string.h
@@ -16,8 +16,10 @@
#include "src/string/memory_utils/inline_memset.h"
#include "src/string/string_utils.h" // string_length
+#include "hdr/free.h"
+#include "hdr/malloc.h"
+#include "hdr/realloc.h"
#include <stddef.h> // size_t
-#include <stdlib.h> // malloc, free
namespace LIBC_NAMESPACE_DECL {
namespace cpp {
diff --git a/libc/src/__support/File/CMakeLists.txt b/libc/src/__support/File/CMakeLists.txt
index 1b390a12424d04..b04606ab27ae6b 100644
--- a/libc/src/__support/File/CMakeLists.txt
+++ b/libc/src/__support/File/CMakeLists.txt
@@ -18,6 +18,7 @@ add_object_library(
libc.src.__support.error_or
libc.hdr.types.off_t
libc.hdr.stdio_macros
+ libc.hdr.realloc
)
add_object_library(
diff --git a/libc/src/__support/File/file.cpp b/libc/src/__support/File/file.cpp
index 51811a27c1acd6..7528780df2b0bc 100644
--- a/libc/src/__support/File/file.cpp
+++ b/libc/src/__support/File/file.cpp
@@ -8,6 +8,7 @@
#include "file.h"
+#include "hdr/realloc.h"
#include "hdr/stdio_macros.h"
#include "hdr/types/off_t.h"
#include "src/__support/CPP/new.h"
diff --git a/libc/src/__support/char_vector.h b/libc/src/__support/char_vector.h
index df109da5d81278..e44d037a9a042f 100644
--- a/libc/src/__support/char_vector.h
+++ b/libc/src/__support/char_vector.h
@@ -13,7 +13,10 @@
#include "src/__support/macros/config.h"
#include <stddef.h> // size_t
-#include <stdlib.h> // malloc, realloc, free
+
+#include "hdr/free.h"
+#include "hdr/malloc.h"
+#include "hdr/realloc.h"
namespace LIBC_NAMESPACE_DECL {
diff --git a/libc/src/stdio/printf_core/CMakeLists.txt b/libc/src/stdio/printf_core/CMakeLists.txt
index 8172fda1e866ed..a192ea863be3f9 100644
--- a/libc/src/stdio/printf_core/CMakeLists.txt
+++ b/libc/src/stdio/printf_core/CMakeLists.txt
@@ -132,8 +132,9 @@ add_header_library(
libc.src.__support.arg_list
libc.src.stdio.printf_core.printf_main
libc.src.stdio.printf_core.writer
- libc.src.stdlib.malloc
- libc.src.stdlib.realloc
+ libc.hdr.malloc
+ libc.hdr.free
+ libc.hdr.realloc
)
if(NOT (TARGET libc.src.__support.File.file) AND LLVM_LIBC_FULL_BUILD)
diff --git a/libc/src/stdio/printf_core/vasprintf_internal.h b/libc/src/stdio/printf_core/vasprintf_internal.h
index e3448eebd302b7..26cf7b98053de4 100644
--- a/libc/src/stdio/printf_core/vasprintf_internal.h
+++ b/libc/src/stdio/printf_core/vasprintf_internal.h
@@ -11,7 +11,10 @@
#include "src/stdio/printf_core/core_structs.h"
#include "src/stdio/printf_core/printf_main.h"
#include "src/stdio/printf_core/writer.h"
-#include <stdlib.h> // malloc, realloc, free
+// #include <stdlib.h> // malloc, realloc, free
+#include "hdr/free.h"
+#include "hdr/malloc.h"
+#include "hdr/realloc.h"
namespace LIBC_NAMESPACE_DECL {
namespace printf_core {
|
libc/hdr/CMakeLists.txt
Outdated
HDRS | ||
aligned_alloc.h | ||
DEPENDS | ||
.stdlib_overlay |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: move this target after stdlib_overlay
target.
libc/hdr/func/free.h
Outdated
#define LLVM_LIBC_HDR_FUNC_FREE_H | ||
|
||
#ifdef LIBC_FULL_BUILD | ||
#include "hdr/types/size_t.h" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
size_t
is not needed
DEPENDS | ||
libc.hdr.stdlib_overlay | ||
FULL_BUILD_DEPENDS | ||
libc.include.stdlib |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
size_t
header dependency.
DEPENDS | ||
libc.hdr.stdlib_overlay | ||
FULL_BUILD_DEPENDS | ||
libc.include.stdlib |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
size_t
header dependency
libc/test/src/stdlib/CMakeLists.txt
Outdated
@@ -387,6 +387,7 @@ if(LLVM_LIBC_FULL_BUILD) | |||
libc.src.stdlib.exit | |||
libc.src.stdlib.atexit | |||
libc.src.__support.CPP.array | |||
libc.hdr.func._Exit |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
put libc.hdr
above libc.src
and probably remove libc.include.stdlib
libc/test/src/stdlib/CMakeLists.txt
Outdated
@@ -401,6 +402,7 @@ if(LLVM_LIBC_FULL_BUILD) | |||
libc.src.stdlib.quick_exit | |||
libc.src.stdlib.at_quick_exit | |||
libc.src.__support.CPP.array | |||
libc.hdr.func._Exit |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: put libc.hdr
above libc.src
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/131/builds/9605 Here is the relevant piece of the build log for the reference
|
…the header `#include <stdlib.h> (llvm#114690) This finishes the work from llvm#114453 by adding proxy headers for `malloc`, `realloc`, `free` and `aligned_alloc`.
This finishes the work from #114453 by adding proxy headers for
malloc
,realloc
,free
andaligned_alloc
.