[libc-commits] [PATCH] D146177: [libc] Add aliases to C memory functions for integration tests
Joseph Huber via Phabricator via libc-commits
libc-commits at lists.llvm.org
Wed Mar 15 18:15:19 PDT 2023
This revision was automatically updated to reflect the committed changes.
Closed by commit rG929ad8bc7cc2: [libc] Add aliases to C memory functions for integration tests (authored by jhuber6).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D146177/new/
https://reviews.llvm.org/D146177
Files:
libc/cmake/modules/LLVMLibCTestRules.cmake
libc/test/IntegrationTest/test.cpp
Index: libc/test/IntegrationTest/test.cpp
===================================================================
--- libc/test/IntegrationTest/test.cpp
+++ libc/test/IntegrationTest/test.cpp
@@ -9,6 +9,43 @@
#include <stddef.h>
#include <stdint.h>
+// Integration tests rely on the following memory functions. This is because the
+// compiler code generation can emit calls to them. We want to map the external
+// entrypoint to the internal implementation of the function used for testing.
+// This is done manually as not all targets support aliases.
+
+namespace __llvm_libc {
+
+int bcmp(const void *lhs, const void *rhs, size_t count);
+void bzero(void *ptr, size_t count);
+int memcmp(const void *lhs, const void *rhs, size_t count);
+void *memcpy(void *__restrict, const void *__restrict, size_t);
+void *memmove(void *dst, const void *src, size_t count);
+void *memset(void *ptr, int value, size_t count);
+
+} // namespace __llvm_libc
+
+extern "C" {
+
+int bcmp(const void *lhs, const void *rhs, size_t count) {
+ __llvm_libc::bcmp(lhs, rhs, count);
+}
+void bzero(void *ptr, size_t count) { __llvm_libc::bzero(ptr, count); }
+int memcmp(const void *lhs, const void *rhs, size_t count) {
+ __llvm_libc::memcmp(lhs, rhs, count);
+}
+void *memcpy(void *__restrict dst, const void *__restrict src, size_t count) {
+ __llvm_libc::memcpy(dst, src, count);
+}
+void *memmove(void *dst, const void *src, size_t count) {
+ __llvm_libc::memmove(dst, src, count);
+}
+void *memset(void *ptr, int value, size_t count) {
+ __llvm_libc::memset(ptr, value, count);
+}
+
+} // extern "C"
+
// Integration tests cannot use the SCUDO standalone allocator as SCUDO pulls
// various other parts of the libc. Since SCUDO development does not use
// LLVM libc build rules, it is very hard to keep track or pull all that SCUDO
Index: libc/cmake/modules/LLVMLibCTestRules.cmake
===================================================================
--- libc/cmake/modules/LLVMLibCTestRules.cmake
+++ libc/cmake/modules/LLVMLibCTestRules.cmake
@@ -448,8 +448,8 @@
libc.src.stdlib.atexit
libc.src.stdlib.exit
libc.src.unistd.environ
- )
- list(APPEND memory_functions
+ # We always add the memory functions objects. This is because the
+ # compiler's codegen can emit calls to the C memory functions.
libc.src.string.bcmp
libc.src.string.bzero
libc.src.string.memcmp
@@ -457,9 +457,6 @@
libc.src.string.memmove
libc.src.string.memset
)
- # We remove the memory function deps because we want to explicitly add the
- # object files which include the public symbols of the memory functions.
- list(REMOVE_ITEM fq_deps_list ${memory_functions})
list(REMOVE_DUPLICATES fq_deps_list)
# TODO: Instead of gathering internal object files from entrypoints,
@@ -474,13 +471,6 @@
endif()
return()
endif()
- # We add the memory functions objects explicitly. Note that we
- # are adding objects of the targets which contain the public
- # C symbols. This is because compiler codegen can emit calls to
- # the C memory functions.
- foreach(func IN LISTS memory_functions)
- list(APPEND link_object_files $<TARGET_OBJECTS:${func}>)
- endforeach()
list(REMOVE_DUPLICATES link_object_files)
# Make a library of all deps
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146177.505675.patch
Type: text/x-patch
Size: 3305 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libc-commits/attachments/20230316/d24d2cef/attachment.bin>
More information about the libc-commits
mailing list