mirror of https://github.com/pyodide/pyodide.git
Remove bad ctypes patch (#2331)
This commit is contained in:
parent
ca97aaf9bd
commit
f06eb77387
|
@ -1,34 +0,0 @@
|
||||||
From d9b55121e5e0671efaa850096d3f816cee18479a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Hood <hood@mit.edu>
|
|
||||||
Date: Wed, 23 Jun 2021 13:47:30 -0700
|
|
||||||
Subject: [PATCH 06/10] Don't dereference function pointer
|
|
||||||
|
|
||||||
Ctypes thinks that the result of dlsym is a pointer to the function pointer, so
|
|
||||||
it should call it like `result = (*f)(args)`. Probably this is true for the
|
|
||||||
native dlsym, but our dlsym returns an index into the indirect call table
|
|
||||||
"wasmTable", in particular it isn't even aligned like a pointer should be.
|
|
||||||
This patch fixes it so that it calls it like `result = f(args)` instead.
|
|
||||||
---
|
|
||||||
Modules/_ctypes/_ctypes.c | 6 +++++-
|
|
||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
|
|
||||||
index 5f8a723f63..379aa8a7d5 100644
|
|
||||||
--- a/Modules/_ctypes/_ctypes.c
|
|
||||||
+++ b/Modules/_ctypes/_ctypes.c
|
|
||||||
@@ -778,7 +778,11 @@ CDataType_in_dll(PyObject *type, PyObject *args)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
- return PyCData_AtAddress(type, address);
|
|
||||||
+ CDataObject *ob = (CDataObject *)GenericPyCData_new(type, NULL, NULL);
|
|
||||||
+ if (ob == NULL)
|
|
||||||
+ return NULL;
|
|
||||||
+ *(void **)ob->b_ptr = address;
|
|
||||||
+ return (PyObject*)ob;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char from_param_doc[] =
|
|
||||||
--
|
|
||||||
2.25.1
|
|
||||||
|
|
|
@ -194,17 +194,12 @@
|
||||||
- test_callback_large_struct
|
- test_callback_large_struct
|
||||||
- CFunctions
|
- CFunctions
|
||||||
- test_struct_return_2H
|
- test_struct_return_2H
|
||||||
- test_frozentable
|
|
||||||
- FunctionTestCase
|
- FunctionTestCase
|
||||||
- test_an_integer
|
skip-node:
|
||||||
- test_optimizeflag
|
|
||||||
- test_pass_by_value_in_register
|
|
||||||
- test_struct_by_value
|
|
||||||
- test_longlong_callbacks
|
- test_longlong_callbacks
|
||||||
- test_longdouble
|
- test_longdouble
|
||||||
- test_longlong
|
- test_longlong
|
||||||
- test_ulonglong
|
- test_ulonglong
|
||||||
|
|
||||||
- test_curses
|
- test_curses
|
||||||
- test_dataclasses
|
- test_dataclasses
|
||||||
- test_datetime:
|
- test_datetime:
|
||||||
|
|
|
@ -11,26 +11,20 @@ from pyodide_build.common import UNVENDORED_STDLIB_MODULES
|
||||||
|
|
||||||
|
|
||||||
def filter_info(info: dict[str, Any], browser: str) -> dict[str, Any]:
|
def filter_info(info: dict[str, Any], browser: str) -> dict[str, Any]:
|
||||||
info = dict(info)
|
|
||||||
# keep only flags related to the current browser
|
# keep only flags related to the current browser
|
||||||
flags_to_remove = ["firefox", "chrome", "node"]
|
suffix = "-" + browser
|
||||||
flags_to_remove.remove(browser)
|
result = {key.removesuffix(suffix): value for key, value in info.items()}
|
||||||
for browser in flags_to_remove:
|
if "skip" in info and f"skip{suffix}" in info:
|
||||||
for key in list(info.keys()):
|
result["skip"] = info["skip"] + info[f"skip{suffix}"]
|
||||||
if key.endswith(browser):
|
return result
|
||||||
del info[key]
|
|
||||||
return info
|
|
||||||
|
|
||||||
|
|
||||||
def possibly_skip_test(request, info: dict[str, Any]) -> dict[str, Any]:
|
def possibly_skip_test(request, info: dict[str, Any]) -> dict[str, Any]:
|
||||||
for reason in (
|
if "segfault" in info:
|
||||||
reason for (flag, reason) in info.items() if flag.startswith("segfault")
|
pytest.skip(f"known segfault: {info['segfault']}")
|
||||||
):
|
|
||||||
pytest.skip(f"known segfault: {reason}")
|
|
||||||
|
|
||||||
for reason in (
|
if "xfail" in info:
|
||||||
reason for [flag, reason] in info.items() if flag.startswith("xfail")
|
reason = info["xfail"]
|
||||||
):
|
|
||||||
if request.config.option.run_xfail:
|
if request.config.option.run_xfail:
|
||||||
request.applymarker(
|
request.applymarker(
|
||||||
pytest.mark.xfail(
|
pytest.mark.xfail(
|
||||||
|
|
Loading…
Reference in New Issue