summaryrefslogtreecommitdiff
path: root/libc/src/threads
diff options
context:
space:
mode:
authorSiva Chandra Reddy <sivachandra@google.com>2021-08-27 18:49:40 +0000
committerSiva Chandra Reddy <sivachandra@google.com>2021-09-01 19:41:52 +0000
commit2f4f452f166bbbf0d39193f0e68d680d235e64ba (patch)
treea0ce2efa807e428cf4904b9997c0779368722f9b /libc/src/threads
parentccbb4c8b4ffd00588f0c21c7e5208bf210b26a53 (diff)
[libc] Add a skeleton for C standard condition variable functions.
This patch adds a skeleton as a preparatory step for the next patch which adds the actual implementations of the condition variable functions. Reviewed By: michaelrj Differential Revision: https://reviews.llvm.org/D108947
Diffstat (limited to 'libc/src/threads')
-rw-r--r--libc/src/threads/CMakeLists.txt35
-rw-r--r--libc/src/threads/cnd_broadcast.h20
-rw-r--r--libc/src/threads/cnd_destroy.h20
-rw-r--r--libc/src/threads/cnd_init.h20
-rw-r--r--libc/src/threads/cnd_signal.h20
-rw-r--r--libc/src/threads/cnd_wait.h20
-rw-r--r--libc/src/threads/linux/CMakeLists.txt55
-rw-r--r--libc/src/threads/linux/cnd_broadcast.cpp16
-rw-r--r--libc/src/threads/linux/cnd_destroy.cpp16
-rw-r--r--libc/src/threads/linux/cnd_init.cpp16
-rw-r--r--libc/src/threads/linux/cnd_signal.cpp16
-rw-r--r--libc/src/threads/linux/cnd_wait.cpp18
12 files changed, 272 insertions, 0 deletions
diff --git a/libc/src/threads/CMakeLists.txt b/libc/src/threads/CMakeLists.txt
index a5d9589e44f3..de72701bef75 100644
--- a/libc/src/threads/CMakeLists.txt
+++ b/libc/src/threads/CMakeLists.txt
@@ -50,3 +50,38 @@ add_entrypoint_object(
DEPENDS
.${LIBC_TARGET_OS}.mtx_unlock
)
+
+add_entrypoint_object(
+ cnd_init
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.cnd_init
+)
+
+add_entrypoint_object(
+ cnd_destroy
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.cnd_destroy
+)
+
+add_entrypoint_object(
+ cnd_wait
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.cnd_wait
+)
+
+add_entrypoint_object(
+ cnd_signal
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.cnd_signal
+)
+
+add_entrypoint_object(
+ cnd_broadcast
+ ALIAS
+ DEPENDS
+ .${LIBC_TARGET_OS}.cnd_broadcast
+)
diff --git a/libc/src/threads/cnd_broadcast.h b/libc/src/threads/cnd_broadcast.h
new file mode 100644
index 000000000000..219341bc4498
--- /dev/null
+++ b/libc/src/threads/cnd_broadcast.h
@@ -0,0 +1,20 @@
+//===-- Implementation header for cnd_broadcast function --------*- C++ -*-===//
+//
+// 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_SRC_THREADS_CND_BROADCAST_H
+#define LLVM_LIBC_SRC_THREADS_CND_BROADCAST_H
+
+#include "include/threads.h"
+
+namespace __llvm_libc {
+
+int cnd_broadcast(cnd_t *cond);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_THREADS_CND_BROADCAST_H
diff --git a/libc/src/threads/cnd_destroy.h b/libc/src/threads/cnd_destroy.h
new file mode 100644
index 000000000000..4fa1ea18b5e2
--- /dev/null
+++ b/libc/src/threads/cnd_destroy.h
@@ -0,0 +1,20 @@
+//===-- Implementation header for cnd_destroy function ----------*- C++ -*-===//
+//
+// 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_SRC_THREADS_CND_DESTROY_H
+#define LLVM_LIBC_SRC_THREADS_CND_DESTROY_H
+
+#include "include/threads.h"
+
+namespace __llvm_libc {
+
+void cnd_destroy(cnd_t *cond);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_THREADS_CND_DESTROY_H
diff --git a/libc/src/threads/cnd_init.h b/libc/src/threads/cnd_init.h
new file mode 100644
index 000000000000..8c14c88342e3
--- /dev/null
+++ b/libc/src/threads/cnd_init.h
@@ -0,0 +1,20 @@
+//===-- Implementation header for cnd_init function -------------*- C++ -*-===//
+//
+// 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_SRC_THREADS_CND_INIT_H
+#define LLVM_LIBC_SRC_THREADS_CND_INIT_H
+
+#include "include/threads.h"
+
+namespace __llvm_libc {
+
+int cnd_init(cnd_t *cond);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_THREADS_CND_INIT_H
diff --git a/libc/src/threads/cnd_signal.h b/libc/src/threads/cnd_signal.h
new file mode 100644
index 000000000000..d85802dda484
--- /dev/null
+++ b/libc/src/threads/cnd_signal.h
@@ -0,0 +1,20 @@
+//===-- Implementation header for cnd_signal function -----------*- C++ -*-===//
+//
+// 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_SRC_THREADS_CND_SIGNAL_H
+#define LLVM_LIBC_SRC_THREADS_CND_SIGNAL_H
+
+#include "include/threads.h"
+
+namespace __llvm_libc {
+
+int cnd_signal(cnd_t *cond);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_THREADS_CND_SIGNAL_H
diff --git a/libc/src/threads/cnd_wait.h b/libc/src/threads/cnd_wait.h
new file mode 100644
index 000000000000..5f9ac0884676
--- /dev/null
+++ b/libc/src/threads/cnd_wait.h
@@ -0,0 +1,20 @@
+//===-- Implementation header for cnd_wait function -------------*- C++ -*-===//
+//
+// 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_SRC_THREADS_CND_WAIT_H
+#define LLVM_LIBC_SRC_THREADS_CND_WAIT_H
+
+#include "include/threads.h"
+
+namespace __llvm_libc {
+
+int cnd_wait(cnd_t *cond, mtx_t *mutex);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_THREADS_CND_WAIT_H
diff --git a/libc/src/threads/linux/CMakeLists.txt b/libc/src/threads/linux/CMakeLists.txt
index b28850b94d8f..abf38fabb8ae 100644
--- a/libc/src/threads/linux/CMakeLists.txt
+++ b/libc/src/threads/linux/CMakeLists.txt
@@ -113,3 +113,58 @@ add_entrypoint_object(
.threads_utils
libc.include.threads
)
+
+add_entrypoint_object(
+ cnd_init
+ SRCS
+ cnd_init.cpp
+ HDRS
+ ../cnd_init.h
+ DEPENDS
+ .threads_utils
+ libc.include.threads
+)
+
+add_entrypoint_object(
+ cnd_destroy
+ SRCS
+ cnd_destroy.cpp
+ HDRS
+ ../cnd_destroy.h
+ DEPENDS
+ .threads_utils
+ libc.include.threads
+)
+
+add_entrypoint_object(
+ cnd_wait
+ SRCS
+ cnd_wait.cpp
+ HDRS
+ ../cnd_wait.h
+ DEPENDS
+ .threads_utils
+ libc.include.threads
+)
+
+add_entrypoint_object(
+ cnd_signal
+ SRCS
+ cnd_signal.cpp
+ HDRS
+ ../cnd_signal.h
+ DEPENDS
+ .threads_utils
+ libc.include.threads
+)
+
+add_entrypoint_object(
+ cnd_broadcast
+ SRCS
+ cnd_broadcast.cpp
+ HDRS
+ ../cnd_broadcast.h
+ DEPENDS
+ .threads_utils
+ libc.include.threads
+)
diff --git a/libc/src/threads/linux/cnd_broadcast.cpp b/libc/src/threads/linux/cnd_broadcast.cpp
new file mode 100644
index 000000000000..e10f9fa6c228
--- /dev/null
+++ b/libc/src/threads/linux/cnd_broadcast.cpp
@@ -0,0 +1,16 @@
+//===-- Linux implementation of the cnd_broadcast function ----------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/threads/cnd_broadcast.h"
+#include "src/__support/common.h"
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(int, cnd_broadcast, (cnd_t * cond)) { return thrd_success; }
+
+} // namespace __llvm_libc
diff --git a/libc/src/threads/linux/cnd_destroy.cpp b/libc/src/threads/linux/cnd_destroy.cpp
new file mode 100644
index 000000000000..ac8a852a9739
--- /dev/null
+++ b/libc/src/threads/linux/cnd_destroy.cpp
@@ -0,0 +1,16 @@
+//===-- Linux implementation of the cnd_destroy function ------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/threads/cnd_destroy.h"
+#include "src/__support/common.h"
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(void, cnd_destroy, (cnd_t * cond)) { }
+
+} // namespace __llvm_libc
diff --git a/libc/src/threads/linux/cnd_init.cpp b/libc/src/threads/linux/cnd_init.cpp
new file mode 100644
index 000000000000..f034695227b7
--- /dev/null
+++ b/libc/src/threads/linux/cnd_init.cpp
@@ -0,0 +1,16 @@
+//===-- Linux implementation of the cnd_init function ---------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/threads/cnd_init.h"
+#include "src/__support/common.h"
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(int, cnd_init, (cnd_t * cond)) { return thrd_success; }
+
+} // namespace __llvm_libc
diff --git a/libc/src/threads/linux/cnd_signal.cpp b/libc/src/threads/linux/cnd_signal.cpp
new file mode 100644
index 000000000000..8ef16a355e7b
--- /dev/null
+++ b/libc/src/threads/linux/cnd_signal.cpp
@@ -0,0 +1,16 @@
+//===-- Linux implementation of the cnd_signal function -------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/threads/cnd_signal.h"
+#include "src/__support/common.h"
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(int, cnd_signal, (cnd_t * cond)) { return thrd_success; }
+
+} // namespace __llvm_libc
diff --git a/libc/src/threads/linux/cnd_wait.cpp b/libc/src/threads/linux/cnd_wait.cpp
new file mode 100644
index 000000000000..e2dda46d2dc9
--- /dev/null
+++ b/libc/src/threads/linux/cnd_wait.cpp
@@ -0,0 +1,18 @@
+//===-- Linux implementation of the cnd_wait function ---------------------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===//
+
+#include "src/threads/cnd_wait.h"
+#include "src/__support/common.h"
+
+namespace __llvm_libc {
+
+LLVM_LIBC_FUNCTION(int, cnd_wait, (cnd_t * cond, mtx_t *mutex)) {
+ return thrd_success;
+}
+
+} // namespace __llvm_libc