Commit | Line | Data |
---|---|---|
7f918cf1 CE |
1 | /* Copyright (C) 2010 Matthew Fluet. |
2 | * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh | |
3 | * Jagannathan, and Stephen Weeks. | |
4 | * Copyright (C) 1997-2000 NEC Research Institute. | |
5 | * | |
6 | * MLton is released under a BSD-style license. | |
7 | * See the file MLton-LICENSE for details. | |
8 | */ | |
9 | ||
10 | /* ---------------------------------------------------------------- */ | |
11 | /* translateHeap */ | |
12 | /* ---------------------------------------------------------------- */ | |
13 | ||
14 | void translateObjptr (GC_state s, | |
15 | objptr *opp) { | |
16 | pointer p; | |
17 | pointer from, to; | |
18 | ||
19 | from = s->translateState.from; | |
20 | to = s->translateState.to; | |
21 | p = objptrToPointer (*opp, from); | |
22 | p = (p - from) + to; | |
23 | *opp = pointerToObjptr (p, to); | |
24 | } | |
25 | ||
26 | /* translateHeap (s, from, to, size) | |
27 | */ | |
28 | void translateHeap (GC_state s, pointer from, pointer to, size_t size) { | |
29 | pointer limit; | |
30 | ||
31 | if (from == to) | |
32 | return; | |
33 | ||
34 | if (DEBUG or s->controls.messages) | |
35 | fprintf (stderr, | |
36 | "[GC: Translating old-gen of size %s bytes of heap at "FMTPTR" from "FMTPTR".]\n", | |
37 | uintmaxToCommaString(size), | |
38 | (uintptr_t)to, | |
39 | (uintptr_t)from); | |
40 | s->translateState.from = from; | |
41 | s->translateState.to = to; | |
42 | /* Translate globals and heap. */ | |
43 | foreachGlobalObjptr (s, translateObjptr); | |
44 | limit = to + size; | |
45 | foreachObjptrInRange (s, alignFrontier (s, to), &limit, translateObjptr, FALSE); | |
46 | } |