<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en">
<head>
<meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
<title>
GitLab
</title>



<style>img {
max-width: 100%; height: auto;
}
</style>
</head>
<body>
<div class="content">

<h3>
Ben Gamari pushed to branch wip/facebook/ghc-8.8-unloading
at <a href="https://gitlab.haskell.org/ghc/ghc">Glasgow Haskell Compiler / GHC</a>
</h3>
<h4>
Commits:
</h4>
<ul>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/b8a233807e80e1c06ebe8fd202db05a1656540d9">b8a23380</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-24T16:21:44+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Revert "Add loadNativeObj and unloadNativeObj"

This reverts commit b6482d18f78fc52de3321c03ab20cb84f0253016.
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/fe92ef34db215a52c568737568c3f0c6ff3ec7eb">fe92ef34</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-24T16:21:48+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Refactor foreign export tracking

This avoids calling `libc` in the initializers which are responsible for
registering foreign exports. We believe this should avoid the corruption
observed in #18548.

See Note [Tracking foreign exports] in rts/ForeignExports.c for an
overview of the new scheme.

(cherry picked from commit c492134912e5270180881b7345ee86dc32756bdd)
(cherry picked from commit ed57c3a9eb9286faa222f98e484a9ef3432b2025)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/d79732beb1bed9b632ed6a9ab1ce2c9cf7ec46cc">d79732be</a></strong>
<div>
<span>by Ben Gamari</span>
<i>at 2020-11-24T16:21:48+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">rts: Refactor unloading of foreign export StablePtrs

Previously we would allocate a linked list cell for each foreign export.
Now we can avoid this by taking advantage of the fact that they are
already broken into groups.

(cherry picked from commit 40dc91069d15bfc1d81f1722b39e06cac8fdddd1)
(cherry picked from commit 65be3832f3aa48bbde896ee846c18fcba1f16b42)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/8ded6f17ede81626e652291bf767a43569578910">8ded6f17</a></strong>
<div>
<span>by Ömer Sinan Ağacan</span>
<i>at 2020-11-24T16:21:48+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Fix and enable object unloading in GHCi

Fixes #16525 by tracking dependencies between object file symbols and
marking symbol liveness during garbage collection

See Note [Object unloading] in CheckUnload.c for details.

(cherry picked from commit c34a4b98b1f09ea3096d39a839a86f2d7185c796)
(cherry picked from commit a4153029347c48be38bace114438b72475e2c40f)
</pre>
</li>
<li>
<strong><a href="https://gitlab.haskell.org/ghc/ghc/-/commit/958aba5ae6b579646c3c8055b1c9d3c17c3bbb03">958aba5a</a></strong>
<div>
<span>by Ray Shih</span>
<i>at 2020-11-24T16:21:48+00:00</i>
</div>
<pre class="commit-message" style="white-space: pre-wrap; margin: 0;">Add loadNativeObj and unloadNativeObj

(This change is originally written by niteria)

This adds two functions:
* `loadNativeObj`
* `unloadNativeObj`
and implements them for Linux.

They are useful if you want to load a shared object with Haskell code
using the system linker and have GHC call dlclose() after the
code is no longer referenced from the heap.

Using the system linker allows you to load the shared object
above outside the low-mem region. It also loads the DWARF sections
in a way that `perf` understands.

`dl_iterate_phdr` is what makes this implementation Linux specific.

(cherry picked from commit 2782487f5f6ad9df4dc8725226a47f07fec77f9f)
</pre>
</li>
</ul>
<h4>30 changed files:</h4>
<ul>
<li class="file-stats">
<a href="#cf5b233b6ec5c0a6951d1018fee507d2d2d71391">
compiler/deSugar/DsForeign.hs
</a>
</li>
<li class="file-stats">
<a href="#47f4bea1d308dee249030e6063d92071b5aac240">
compiler/ghci/Linker.hs
</a>
</li>
<li class="file-stats">
<a href="#40f83a2cddcbc1f8190b0551eb572ccf4ea88cc9">
includes/Rts.h
</a>
</li>
<li class="file-stats">
<a href="#456263288343573de99d23371fb69e400889ac65">
<span class="new-file">
+
includes/rts/ForeignExports.h
</span>
</a>
</li>
<li class="file-stats">
<a href="#94ca41c5afbb3d932bd6f37ee16458322988fb69">
includes/rts/storage/GC.h
</a>
</li>
<li class="file-stats">
<a href="#ba1d62598dfbf5ddb817dd9c93461a02a0bba43d">
rts/CheckUnload.c
</a>
</li>
<li class="file-stats">
<a href="#67cc28da78ad5c427434fbe2efdcecffe61ae002">
rts/CheckUnload.h
</a>
</li>
<li class="file-stats">
<a href="#ae718f022c910e7a1a4e159b50a9ad3a8f8afcfe">
<span class="new-file">
+
rts/ForeignExports.c
</span>
</a>
</li>
<li class="file-stats">
<a href="#29001fa4f85b778737a44790761e498504c3f160">
<span class="new-file">
+
rts/ForeignExports.h
</span>
</a>
</li>
<li class="file-stats">
<a href="#152b85a9ce66dcf385a199eab2acad9d98fd737b">
rts/Hash.c
</a>
</li>
<li class="file-stats">
<a href="#4352fec095ae082617e59e2f077ec6dc9e865ee7">
rts/Hash.h
</a>
</li>
<li class="file-stats">
<a href="#044fe9284335a9bfd17546e06c2e5c40a680dd3d">
rts/Linker.c
</a>
</li>
<li class="file-stats">
<a href="#687f0b17315e54a1692de64626391e572ca298e9">
rts/LinkerInternals.h
</a>
</li>
<li class="file-stats">
<a href="#9ed11d0519762dae04656481b089dbb5b05acf98">
rts/RtsStartup.c
</a>
</li>
<li class="file-stats">
<a href="#16c842a51a135c8ef2c7c7f94336544868348a3c">
rts/RtsSymbols.c
</a>
</li>
<li class="file-stats">
<a href="#b7ec52d5e302083ed03503182f1293694dda24f3">
rts/linker/Elf.c
</a>
</li>
<li class="file-stats">
<a href="#c13531a3a86ee59ab6d8d4bd01fbea1ad9646bdb">
rts/linker/LoadArchive.c
</a>
</li>
<li class="file-stats">
<a href="#f4db9593d88d3c951505379e54f3db74f49ae142">
rts/linker/MachO.c
</a>
</li>
<li class="file-stats">
<a href="#9670354b74fe55079feca82e1510129734b46f4f">
rts/linker/PEi386.c
</a>
</li>
<li class="file-stats">
<a href="#1fbdc15fb59db29e00c07dc7dac3b36492baaa1c">
rts/linker/elf_got.c
</a>
</li>
<li class="file-stats">
<a href="#e432c7b248b68100c3cc37db36ee80d975efd697">
rts/rts.cabal.in
</a>
</li>
<li class="file-stats">
<a href="#37a93df244a7789fddf557443b6398d06763e9cc">
rts/sm/Evac.c
</a>
</li>
<li class="file-stats">
<a href="#6477e10756faf038741e63d1ad499a1df809fe10">
rts/sm/GC.c
</a>
</li>
<li class="file-stats">
<a href="#06e70a7de800b2de9d75c2d5b5b554929f6b9bcb">
rts/sm/GC.h
</a>
</li>
<li class="file-stats">
<a href="#0bfe9d4217bccddd6b00d2d6a5e56e7de4c86273">
rts/sm/Storage.c
</a>
</li>
<li class="file-stats">
<a href="#26627baa966cfbb2801731d80e40d9793c23ab55">
testsuite/tests/ghci/T16525a/T16525a.script
</a>
</li>
<li class="file-stats">
<a href="#8f8e60113be652bd8dad559787917715363a6f6f">
testsuite/tests/ghci/T16525a/T16525a.stdout
</a>
</li>
<li class="file-stats">
<a href="#c198785d7f916bc321dc6d4f89114348bbf64d53">
testsuite/tests/ghci/T16525a/all.T
</a>
</li>
<li class="file-stats">
<a href="#2d8799bf001d0147f8d062a8f2ad48f8334e3843">
<span class="new-file">
+
testsuite/tests/ghci/T16525b/A.hs
</span>
</a>
</li>
<li class="file-stats">
<a href="#96e22c48586ff706ca32dfe75bb438fe4ebbd1e3">
<span class="new-file">
+
testsuite/tests/ghci/T16525b/B.hs
</span>
</a>
</li>
</ul>
<h5>The diff was not included because it is too large.</h5>

</div>
<div class="footer" style="margin-top: 10px;">
<p style="font-size: small; color: #666;">

<br>
<a href="https://gitlab.haskell.org/ghc/ghc/-/compare/0ac691710c8131767b940f0e36b171312dd1ba9e...958aba5ae6b579646c3c8055b1c9d3c17c3bbb03">View it on GitLab</a>.
<br>
You're receiving this email because of your account on gitlab.haskell.org.
If you'd like to receive fewer emails, you can
adjust your notification settings.



</p>
</div>
</body>
</html>