[libc-commits] [libc] [libc] Add wasm support for some submodules in llvm-libc. (PR #154383)
via libc-commits
libc-commits at lists.llvm.org
Tue Aug 19 09:57:34 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-libc
Author: None (google-yfyang)
<details>
<summary>Changes</summary>
Introducing several emscripten-specific changes to the llvm-libc headers as well as adding a wasm sigsetjmp.cpp.
---
Full diff: https://github.com/llvm/llvm-project/pull/154383.diff
5 Files Affected:
- (modified) libc/src/__support/StringUtil/platform_errors.h (+1-1)
- (modified) libc/src/__support/StringUtil/tables/posix_errors.h (+5)
- (modified) libc/src/__support/StringUtil/tables/stdc_errors.h (+5)
- (modified) libc/src/__support/macros/properties/architectures.h (+4)
- (added) libc/src/setjmp/wasm/sigsetjmp.cpp (+14)
``````````diff
diff --git a/libc/src/__support/StringUtil/platform_errors.h b/libc/src/__support/StringUtil/platform_errors.h
index 32e8414b3e3de..5f83865482e72 100644
--- a/libc/src/__support/StringUtil/platform_errors.h
+++ b/libc/src/__support/StringUtil/platform_errors.h
@@ -9,7 +9,7 @@
#ifndef LLVM_LIBC_SRC___SUPPORT_STRINGUTIL_PLATFORM_ERRORS_H
#define LLVM_LIBC_SRC___SUPPORT_STRINGUTIL_PLATFORM_ERRORS_H
-#if defined(__linux__) || defined(__Fuchsia__)
+#if defined(__linux__) || defined(__Fuchsia__) || defined(__EMSCRIPTEN__)
#include "tables/linux_platform_errors.h"
#else
#include "tables/minimal_platform_errors.h"
diff --git a/libc/src/__support/StringUtil/tables/posix_errors.h b/libc/src/__support/StringUtil/tables/posix_errors.h
index b21f28f0b1321..d386a48c21d44 100644
--- a/libc/src/__support/StringUtil/tables/posix_errors.h
+++ b/libc/src/__support/StringUtil/tables/posix_errors.h
@@ -63,7 +63,12 @@ LIBC_INLINE_VAR constexpr MsgTable<76> POSIX_ERRORS = {
MsgMapping(EPROTO, "Protocol error"),
MsgMapping(EMULTIHOP, "Multihop attempted"),
MsgMapping(EBADMSG, "Bad message"),
+#ifdef __EMSCRIPTEN__
+ // For now, match the musl string
+ MsgMapping(EOVERFLOW, "Value too large for data type"),
+#else
MsgMapping(EOVERFLOW, "Value too large for defined data type"),
+#endif
MsgMapping(ENOTSOCK, "Socket operation on non-socket"),
MsgMapping(EDESTADDRREQ, "Destination address required"),
MsgMapping(EMSGSIZE, "Message too long"),
diff --git a/libc/src/__support/StringUtil/tables/stdc_errors.h b/libc/src/__support/StringUtil/tables/stdc_errors.h
index a326616f20ef5..9a23d0718ea13 100644
--- a/libc/src/__support/StringUtil/tables/stdc_errors.h
+++ b/libc/src/__support/StringUtil/tables/stdc_errors.h
@@ -16,7 +16,12 @@
namespace LIBC_NAMESPACE_DECL {
LIBC_INLINE_VAR constexpr const MsgTable<4> STDC_ERRORS = {
+#ifdef __EMSCRIPTEN__
+ // For now, match the musl name for errno 0.
+ MsgMapping(0, "No error information"),
+#else
MsgMapping(0, "Success"),
+#endif
MsgMapping(EDOM, "Numerical argument out of domain"),
MsgMapping(ERANGE, "Numerical result out of range"),
MsgMapping(EILSEQ, "Invalid or incomplete multibyte or wide character"),
diff --git a/libc/src/__support/macros/properties/architectures.h b/libc/src/__support/macros/properties/architectures.h
index ecc93196be286..21e9bc4288cd7 100644
--- a/libc/src/__support/macros/properties/architectures.h
+++ b/libc/src/__support/macros/properties/architectures.h
@@ -41,6 +41,10 @@
#define LIBC_TARGET_ARCH_IS_ARM
#endif
+#if defined(__wasm__)
+#define LIBC_TARGET_ARCH_IS_WASM
+#endif
+
#if defined(__aarch64__) || defined(__arm64__) || defined(_M_ARM64)
#define LIBC_TARGET_ARCH_IS_AARCH64
#endif
diff --git a/libc/src/setjmp/wasm/sigsetjmp.cpp b/libc/src/setjmp/wasm/sigsetjmp.cpp
new file mode 100644
index 0000000000000..809356d4577eb
--- /dev/null
+++ b/libc/src/setjmp/wasm/sigsetjmp.cpp
@@ -0,0 +1,14 @@
+#include "src/setjmp/sigsetjmp.h"
+#include "hdr/offsetof_macros.h"
+#include "src/__support/common.h"
+#include "src/__support/macros/config.h"
+
+#if !defined(LIBC_TARGET_ARCH_IS_WASM)
+#error "Invalid file include"
+#endif
+
+namespace LIBC_NAMESPACE_DECL {
+[[gnu::returns_twice]] int sigsetjmp(jmp_buf sigjmp_buf, int savesigs) {
+ return setjmp(sigjmp_buf);
+}
+}
``````````
</details>
https://github.com/llvm/llvm-project/pull/154383
More information about the libc-commits
mailing list