Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / gc / translate.c
CommitLineData
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
14void 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 */
28void 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}