summaryrefslogtreecommitdiffstats
path: root/Tools
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-05-19 15:05:52 (GMT)
committerGitHub <noreply@github.com>2022-05-19 15:05:52 (GMT)
commit7afccd34a659af6676c17abbd431e58093d25746 (patch)
tree24bd5c780dc660b2882019f28260d9bd1d8e8daf /Tools
parent611d43c2a49e7c2c35fc03b0f58570b07c41b0eb (diff)
downloadcpython-7afccd34a659af6676c17abbd431e58093d25746.zip
cpython-7afccd34a659af6676c17abbd431e58093d25746.tar.gz
cpython-7afccd34a659af6676c17abbd431e58093d25746.tar.bz2
gh-90473: Decrease recursion limit and skip tests on WASI (GH-92803)
(cherry picked from commit 137fd3d88aa46669f5717734e823f4c594ab2843) Co-authored-by: Christian Heimes <christian@python.org>
Diffstat (limited to 'Tools')
-rw-r--r--Tools/peg_generator/pegen/c_generator.py6
-rw-r--r--Tools/wasm/README.md21
-rw-r--r--Tools/wasm/config.site-wasm32-wasi21
3 files changed, 45 insertions, 3 deletions
diff --git a/Tools/peg_generator/pegen/c_generator.py b/Tools/peg_generator/pegen/c_generator.py
index 56a1e5a..65bfd59 100644
--- a/Tools/peg_generator/pegen/c_generator.py
+++ b/Tools/peg_generator/pegen/c_generator.py
@@ -37,7 +37,11 @@ EXTENSION_PREFIX = """\
# define D(x)
#endif
-# define MAXSTACK 6000
+#ifdef __wasi__
+# define MAXSTACK 4000
+#else
+# define MAXSTACK 6000
+#endif
"""
diff --git a/Tools/wasm/README.md b/Tools/wasm/README.md
index 83806f0..977b2bb 100644
--- a/Tools/wasm/README.md
+++ b/Tools/wasm/README.md
@@ -220,10 +220,27 @@ AddType application/wasm wasm
# WASI (wasm32-wasi)
-WASI builds require [WASI SDK](https://github.com/WebAssembly/wasi-sdk) and
-currently [wasix](https://github.com/singlestore-labs/wasix) for POSIX
+WASI builds require [WASI SDK](https://github.com/WebAssembly/wasi-sdk) 15.0+
+and currently [wasix](https://github.com/singlestore-labs/wasix) for POSIX
compatibility stubs.
+## WASI limitations and issues (WASI SDK 15.0)
+
+A lot of Emscripten limitations also apply to WASI. Noticable restrictions
+are:
+
+- Call stack size is limited. Default recursion limit and parser stack size
+ are smaller than in regular Python builds.
+- ``socket(2)`` cannot create new socket file descriptors. WASI programs can
+ call read/write/accept on a file descriptor that is passed into the process.
+- ``socket.gethostname()`` and host name resolution APIs like
+ ``socket.gethostbyname()`` are not implemented and always fail.
+- ``chmod(2)`` is not available. It's not possible to modify file permissions,
+ yet. A future version of WASI may provide a limited ``set_permissions`` API.
+- File locking (``fcntl``) is not available.
+- ``os.pipe()``, ``os.mkfifo()``, and ``os.mknod()`` are not supported.
+
+
# Detect WebAssembly builds
## Python code
diff --git a/Tools/wasm/config.site-wasm32-wasi b/Tools/wasm/config.site-wasm32-wasi
index 255e99c..ee3fc83 100644
--- a/Tools/wasm/config.site-wasm32-wasi
+++ b/Tools/wasm/config.site-wasm32-wasi
@@ -17,3 +17,24 @@ ac_cv_header_sys_resource_h=no
# undefined symbols / unsupported features
ac_cv_func_eventfd=no
+
+# WASI SDK 15.0 has no pipe syscall.
+ac_cv_func_pipe=no
+
+# WASI SDK 15.0 cannot create fifos and special files.
+ac_cv_func_mkfifo=no
+ac_cv_func_mkfifoat=no
+ac_cv_func_mknod=no
+ac_cv_func_mknodat=no
+
+# fdopendir() fails on SDK 15.0,
+# OSError: [Errno 28] Invalid argument: '.'
+ac_cv_func_fdopendir=no
+
+# WASIX stubs we don't want to use.
+ac_cv_func_kill=no
+
+# WASI sockets are limited to operations on given socket fd and inet sockets.
+# Disable AF_UNIX and AF_PACKET support, see socketmodule.h.
+ac_cv_header_sys_un_h=no
+ac_cv_header_netpacket_packet_h=no