summaryrefslogtreecommitdiffstatshomepage
path: root/unix
diff options
context:
space:
mode:
Diffstat (limited to 'unix')
-rw-r--r--unix/gccollect.c12
-rw-r--r--unix/mpconfigport.h3
2 files changed, 15 insertions, 0 deletions
diff --git a/unix/gccollect.c b/unix/gccollect.c
index d934f9cae2..4f3b786e72 100644
--- a/unix/gccollect.c
+++ b/unix/gccollect.c
@@ -34,6 +34,17 @@
extern void *stack_top;
+#if MICROPY_GCREGS_SETJMP
+#include <setjmp.h>
+
+typedef jmp_buf regs_t;
+
+void gc_helper_get_regs(regs_t arr) {
+ setjmp(arr);
+}
+
+#else // !MICROPY_GCREGS_SETJMP
+
// We capture here callee-save registers, i.e. ones which may contain
// interesting values held there by our callers. It doesn't make sense
// to capture caller-saved registers, because they, well, put on the
@@ -112,6 +123,7 @@ void gc_helper_get_regs(regs_t arr) {
arr[9] = r13;
}
#endif
+#endif // !MICROPY_GCREGS_SETJMP
void gc_collect(void) {
//gc_dump_info();
diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h
index 1b1d938a84..0c12101fd0 100644
--- a/unix/mpconfigport.h
+++ b/unix/mpconfigport.h
@@ -49,6 +49,9 @@
// Define to MICROPY_ERROR_REPORTING_DETAILED to get function, etc.
// names in exception messages (may require more RAM).
#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_DETAILED)
+// Define to 1 to use untested inefficient GC helper implementation
+// (if more efficient arch-specific one is not available).
+#define MICROPY_GCREGS_SETJMP (0)
extern const struct _mp_obj_module_t mp_module_os;
extern const struct _mp_obj_module_t mp_module_time;