diff --git a/runtime/runtime.c b/runtime/runtime.c index 78b992287..bd8c5fb25 100644 --- a/runtime/runtime.c +++ b/runtime/runtime.c @@ -790,7 +790,7 @@ extern int Lwrite (int n) { /* GC starts here */ -extern const size_t __gc_data_end, __gc_data_start; +extern const size_t __start_custom_data, __stop_custom_data; # ifdef __ENABLE_GC__ @@ -1004,8 +1004,8 @@ extern void gc_test_and_copy_root (size_t ** root) { } extern void gc_root_scan_data (void) { - size_t * p = &__gc_data_start; - while (p != &__gc_data_end) { + size_t * p = &__start_custom_data; + while (p != &__stop_custom_data) { gc_test_and_copy_root (p); p++; } diff --git a/src/X86.ml b/src/X86.ml index c6a478bac..de4c3ef31 100644 --- a/src/X86.ml +++ b/src/X86.ml @@ -659,15 +659,12 @@ class env prg = let genasm cmd prog = let sm = SM.compile cmd prog in let env, code = compile cmd (new env sm) sm in - let gc_start, gc_end = "__gc_data_start", "__gc_data_end" in let globals = - List.map (fun s -> Meta (Printf.sprintf "\t.globl\t%s" s)) ([gc_start; gc_end] @ env#publics) + List.map (fun s -> Meta (Printf.sprintf "\t.globl\t%s" s)) env#publics in - let data = [Meta "\t.data"; - Meta (Printf.sprintf "filler:\t.fill\t%d, 4, 1" env#max_locals_size); - Meta (Printf.sprintf "%s:" gc_start)] @ + let data = [Meta "\t.section custom_data,\"aw\",@progbits"; + Meta (Printf.sprintf "filler:\t.fill\t%d, 4, 1" env#max_locals_size)] @ (List.map (fun s -> Meta (Printf.sprintf "%s:\t.int\t1" s)) env#globals) @ - [Meta (Printf.sprintf "%s:" gc_end)] @ (List.map (fun (s, v) -> Meta (Printf.sprintf "%s:\t.string\t\"%s\"" v s)) env#strings) in let asm = Buffer.create 1024 in