diff --git a/qemu-arm/main.c b/qemu-arm/main.c index a35005e9da..3750dde453 100644 --- a/qemu-arm/main.c +++ b/qemu-arm/main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "py/nlr.h" #include "py/obj.h" @@ -9,6 +10,7 @@ #include "py/runtime0.h" #include "py/runtime.h" #include "py/stackctrl.h" +#include "py/gc.h" #include "py/repl.h" #include "py/pfenv.h" @@ -51,6 +53,8 @@ void do_str(const char *src) { int main(int argc, char **argv) { mp_stack_set_limit(10240); + void *heap = malloc(16 * 1024); + gc_init(heap, (char*)heap + 16 * 1024); mp_init(); do_str("print('hello world!')"); mp_deinit(); diff --git a/qemu-arm/mpconfigport.h b/qemu-arm/mpconfigport.h index f9f0486558..f5e5d029d0 100644 --- a/qemu-arm/mpconfigport.h +++ b/qemu-arm/mpconfigport.h @@ -4,11 +4,11 @@ #define MICROPY_ALLOC_PATH_MAX (512) #define MICROPY_EMIT_X64 (0) -#define MICROPY_EMIT_THUMB (0) -#define MICROPY_EMIT_INLINE_THUMB (0) +#define MICROPY_EMIT_THUMB (1) +#define MICROPY_EMIT_INLINE_THUMB (1) #define MICROPY_MEM_STATS (0) #define MICROPY_DEBUG_PRINTERS (0) -#define MICROPY_ENABLE_GC (0) +#define MICROPY_ENABLE_GC (1) #define MICROPY_STACK_CHECK (1) #define MICROPY_HELPER_REPL (0) #define MICROPY_HELPER_LEXER_UNIX (0) diff --git a/qemu-arm/test_main.c b/qemu-arm/test_main.c index 30bd169040..cc4e15357e 100644 --- a/qemu-arm/test_main.c +++ b/qemu-arm/test_main.c @@ -1,6 +1,7 @@ #include #include #include +#include #include "py/nlr.h" #include "py/obj.h" @@ -9,6 +10,7 @@ #include "py/runtime0.h" #include "py/runtime.h" #include "py/stackctrl.h" +#include "py/gc.h" #include "py/repl.h" #include "py/pfenv.h" @@ -58,6 +60,8 @@ end: int main() { const char a[] = {"sim"}; mp_stack_set_limit(10240); + void *heap = malloc(256 * 1024); + gc_init(heap, (char*)heap + 256 * 1024); mp_init(); int r = tinytest_main(1, (const char **) a, groups); mp_deinit(); @@ -66,6 +70,18 @@ int main() { } void gc_collect(void) { + gc_collect_start(); + + // get the registers and the sp + jmp_buf env; + setjmp(env); + volatile mp_uint_t dummy; + void *sp = (void*)&dummy; + + // trace the stack, including the registers (since they live on the stack in this function) + gc_collect_root((void**)sp, ((uint32_t)MP_STATE_VM(stack_top) - (uint32_t)sp) / sizeof(uint32_t)); + + gc_collect_end(); } mp_lexer_t *mp_lexer_new_from_file(const char *filename) { diff --git a/tools/tinytest-codegen.py b/tools/tinytest-codegen.py index ae6dc19b4e..fe30193729 100755 --- a/tools/tinytest-codegen.py +++ b/tools/tinytest-codegen.py @@ -46,8 +46,8 @@ testgroup_member = ( ## XXX: may be we could have `--without ` argument... # currently these tests are selected because they pass on qemu-arm -test_dirs = ('basics',) # 'float', 'import', 'io', 'misc') -exclude_tests = ('basics/builtin_override.py', 'basics/class_super_object.py', 'basics/memoryview_gc.py',) +test_dirs = ('basics', 'micropython', 'inlineasm') # 'float', 'import', 'io', 'misc') +exclude_tests = ('basics/builtin_override.py', 'basics/class_super_object.py', 'micropython/heapalloc.py') output = []