[libc-commits] [libc] [libc] Add proxy headers to handle memory allocation associated with the header `#include <stdlib.h> (PR #114690)

via libc-commits libc-commits at lists.llvm.org
Sat Nov 2 18:17:01 PDT 2024


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-libc

Author: Job Henandez Lara (Jobhdez)

<details>
<summary>Changes</summary>

This finishes the work from https://github.com/llvm/llvm-project/pull/114453 by adding proxy headers for `malloc`, `realloc`, `free` and `aligned_alloc`.

---
Full diff: https://github.com/llvm/llvm-project/pull/114690.diff


15 Files Affected:

- (modified) libc/hdr/CMakeLists.txt (+40) 
- (added) libc/hdr/aligned_alloc.h (+21) 
- (added) libc/hdr/free.h (+21) 
- (added) libc/hdr/malloc.h (+21) 
- (added) libc/hdr/realloc.h (+21) 
- (modified) libc/src/__support/CMakeLists.txt (+3) 
- (modified) libc/src/__support/CPP/CMakeLists.txt (+6-2) 
- (modified) libc/src/__support/CPP/new.cpp (+1-1) 
- (modified) libc/src/__support/CPP/new.h (+3-1) 
- (modified) libc/src/__support/CPP/string.h (+3-1) 
- (modified) libc/src/__support/File/CMakeLists.txt (+1) 
- (modified) libc/src/__support/File/file.cpp (+1) 
- (modified) libc/src/__support/char_vector.h (+4-1) 
- (modified) libc/src/stdio/printf_core/CMakeLists.txt (+3-2) 
- (modified) libc/src/stdio/printf_core/vasprintf_internal.h (+4-1) 


``````````diff
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 {

``````````

</details>


https://github.com/llvm/llvm-project/pull/114690


More information about the libc-commits mailing list