Questions about pointers in GHC

Ben Gamari ben at
Sat Mar 10 18:42:38 UTC 2018

Xuanrui Qi <me at> writes:

> Hi all,

> I have a few questions about heap-allocated memory pointers in GHC.
> Both code and data live in the heap, and both can have pointers to
> other objects. However, according to my understanding, most
> heap-allocated objects would be immutable. Moreover even if objects
> might be mutated, most pointers should not be updated. I have heard
> that the runtime system might implement several features by updating
> pointers, but I am not sure which features are they.
Code generally doesn't live on the dynamically-allocated heap. Rather,
it is mmap'd immutably into the process's address space. However,
closures, which can live in the heap, generally contain pointers to
code and can indeed be mutated.

> My question is thus: (1) is there a way to trace mutations of heap
> objects (for instance by modifying the GC system code) [I don't need
> to know what is the change, all I want to know is what has been
> changed],

Indeed it is possible. The RTS already tracks most mutations via a write
barrier to ensure safety of its generational GC. See the recordMutable
macro defined in Cmm.h.

> and (2) is there a way where I could trace pointer updates
> [in this case I'd like to know both the old and objects, preferably by
> name]? More specifically, are these possible by annotating/changing
> the runtime system only (i.e. not touching code generation)?
This will be a fair bit harder, requiring modification of the RTS's
mutation operations (see PrimOps.cmm and Updates.cmm) at very least.


- Ben
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <>

More information about the ghc-devs mailing list