wasi_socket_ext.c: avoid tls to make this library-friendly (#4338)

This commit is contained in:
YAMAMOTO Takashi
2025-06-11 08:46:35 +09:00
committed by GitHub
parent 07c23cb98e
commit 7f968f5926

View File

@ -12,6 +12,26 @@
#include <wasi/api.h>
#include <wasi_socket_ext.h>
/*
* Avoid direct TLS access to allow a single library to be
* linked to both of threaded and non-threaded applications.
*
* wasi-libc's errno is a TLS variable, exposed directly via
* errno.h. if we use it here, LLVM may lower it differently,
* depending on enabled features like atomcs and bulk-memory.
* we tweak the way to access errno here in order to make us
* compatible with both of threaded and non-threaded applications.
* __errno_location() should be reasonably stable because
* it was introduced as an alternative ABI for non-C software.
* https://github.com/WebAssembly/wasi-libc/pull/347
*/
#if defined(errno)
#undef errno
#endif
int *
__errno_location(void);
#define errno (*__errno_location())
#define HANDLE_ERROR(error) \
if (error != __WASI_ERRNO_SUCCESS) { \
errno = error; \