summaryrefslogtreecommitdiffstatshomepage
path: root/qemu-arm
diff options
context:
space:
mode:
Diffstat (limited to 'qemu-arm')
-rw-r--r--qemu-arm/main.c4
-rw-r--r--qemu-arm/mpconfigport.h6
-rw-r--r--qemu-arm/test_main.c16
3 files changed, 23 insertions, 3 deletions
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 <stdint.h>
#include <stdio.h>
#include <string.h>
+#include <malloc.h>
#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 <stdint.h>
#include <stdio.h>
#include <string.h>
+#include <malloc.h>
#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) {