<div dir="ltr">Ah, yes I see.  Well, giving it the proper arguments when running via valgrind puts me back to an &quot;Invalid read&quot; segfault.  I confirmed that the linker_unload executable itself is 64 bit:<div><br></div>

<div><div>$ file linker_unload</div><div>linker_unload: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped</div><div><br></div><div><div>==72103== Command: ./linker_unload /home/beehive/ryan_scratch/ghc-working/libraries/base/dist-install/build/libHSbase-4.7.0.0.a /home/beehive/ryan_scratch/ghc-working/libraries/ghc-prim/dist-install/build/libHSghc-prim-0.3.1.0.a /home/beehive/ryan_scratch/ghc-working/libraries/integer-gmp/dist-install/build/libHSinteger-gmp-0.5.1.0.a</div>

<div>==72103==</div><div>==72103== Invalid read of size 8</div><div>==72103==    at 0x479F9F: checkUnload (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div><div>==72103==    by 0x4689DA: GarbageCollect (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div>

<div>==72103==    by 0x4621F0: scheduleDoGC (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div><div>==72103==    by 0x462314: performGC_ (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div>

<div>==72103==    by 0x403341: main (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div><div>==72103==  Address 0xf45ed70 is 80 bytes inside a block of size 120 free&#39;d</div><div>==72103==    at 0x4A063F0: free (vg_replace_malloc.c:446)</div>

<div>==72103==    by 0x479F9E: checkUnload (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div><div>==72103==    by 0x4689DA: GarbageCollect (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div>

<div>==72103==    by 0x4621F0: scheduleDoGC (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div><div>==72103==    by 0x462314: performGC_ (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div>

<div>==72103==    by 0x403341: main (in /home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload)</div><div>==72103==</div></div><div><br></div><div><br></div></div></div><div class="gmail_extra"><br><br>
<div class="gmail_quote">
On Sun, Sep 1, 2013 at 11:01 PM, Austin Seipp <span dir="ltr">&lt;<a href="mailto:aseipp@pobox.com" target="_blank">aseipp@pobox.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Oops, should have said this: if you checkout the Makefile for<br>
testsuite/tests/rts - at the very bottom - you&#39;ll see the<br>
linker_unload target. When run, the executable needs some arguments so<br>
it knows what to try and load:<br>
<br>
---<br>
./linker_unload $(BASE) $(GHC_PRIM) $(INTEGER_GMP)<br>
---<br>
<br>
So you also need to provide the right arguments. Sorry about that!<br>
<div class="HOEnZb"><div class="h5"><br>
On Sun, Sep 1, 2013 at 9:54 PM, Ryan Newton &lt;<a href="mailto:rrnewton@gmail.com">rrnewton@gmail.com</a>&gt; wrote:<br>
&gt; Hi Austin,<br>
&gt;<br>
&gt; Should have said -- this is 64-bit RHEL 6 (my academic departments<br>
&gt; standardized configuration).<br>
&gt;<br>
&gt;  $ uname -a<br>
&gt;      Linux  2.6.32-358.14.1.el6.x86_64 #1 SMP Mon Jun 17 15:54:20 EDT 2013<br>
&gt; x86_64 x86_64 x86_64 GNU/Linux<br>
&gt;<br>
&gt; Weirdly it seems to have a different behavior when run by &quot;make&quot; and by<br>
&gt; hand.  When I run the make command you provided it segfaults with error code<br>
&gt; 2:<br>
&gt;<br>
&gt; cd . &amp;&amp; $MAKE -s --no-print-directory linker_unload    &lt;/dev/null<br>
&gt;&gt;linker_unload.run.stdout 2&gt;linker_unload.run.stderr<br>
&gt; Wrong exit code (expected 0 , actual 2 )<br>
&gt; Stdout:<br>
&gt; Stderr:<br>
&gt; make[1]: *** [linker_unload] Segmentation fault (core dumped)<br>
&gt; *** unexpected failure for linker_unload(normal)<br>
&gt; Unexpected results from:<br>
&gt; TEST=&quot;linker_unload&quot;<br>
&gt;<br>
&gt; But then when I run it by hand with &quot;./linker_unload&quot; or &quot;valgrind<br>
&gt; ./linker_unload&quot; I get an unknown symbol error with exit code 1:<br>
&gt;<br>
&gt; ==70613==<br>
&gt; linker_unload: Test.o: unknown symbol `base_GHCziNum_zdfNumInt_closure&#39;<br>
&gt; linker_unload: resolveObjs failed<br>
&gt; ==70613==<br>
&gt; ==70613== HEAP SUMMARY:<br>
&gt;<br>
&gt;<br>
&gt;    -Ryan<br>
&gt;<br>
&gt;<br>
&gt; On Sun, Sep 1, 2013 at 10:46 PM, Austin Seipp &lt;<a href="mailto:aseipp@pobox.com">aseipp@pobox.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; I have also not seen this test fail on amd64/Linux since Simon<br>
&gt;&gt; committed it. From the valgrind output, it looks like your machine is<br>
&gt;&gt; 32bit, correct Ryan? Edward told me yesterday on IRC he saw this fail<br>
&gt;&gt; on 64bit Linux, so I&#39;m a little confused.<br>
&gt;&gt;<br>
&gt;&gt; Can you please try this?<br>
&gt;&gt;<br>
&gt;&gt; $ cd testsuite/tests/rts<br>
&gt;&gt; $ make TEST=&quot;linker_unload&quot; EXTRA_HC_OPTS=&quot;-debug&quot;<br>
&gt;&gt; $ valgrind ./linker_unload<br>
&gt;&gt;<br>
&gt;&gt; This will link you with a debug copy of the RTS, so Valgrind/GDB can<br>
&gt;&gt; relate errors back to the relevant source code. Perhaps this will help<br>
&gt;&gt; shed light on your problem.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Sun, Sep 1, 2013 at 9:39 PM, Edward Z. Yang &lt;<a href="mailto:ezyang@mit.edu">ezyang@mit.edu</a>&gt; wrote:<br>
&gt;&gt; &gt; However, as far as I can tell, it is not 100% reproduceable.<br>
&gt;&gt; &gt; In a recent validate of 5f98d44d8617756971cf47c040f2556de4e98f63,<br>
&gt;&gt; &gt; this test does not fail.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Edward<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Excerpts from Edward Z. Yang&#39;s message of Fri Aug 30 21:55:29 -0700<br>
&gt;&gt; &gt; 2013:<br>
&gt;&gt; &gt;&gt; Yes, this one is failing for me too. Probably related to the<br>
&gt;&gt; &gt;&gt; recent object unload patch for<br>
&gt;&gt; &gt;&gt; <a href="http://ghc.haskell.org/trac/ghc/ticket/8039" target="_blank">http://ghc.haskell.org/trac/ghc/ticket/8039</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Excerpts from Ryan Newton&#39;s message of Fri Aug 30 21:51:<a href="tel:24%20-0700%202013" value="+12407002013">24 -0700 2013</a>:<br>
&gt;&gt; &gt;&gt; &gt; That test builds an executable named &#39;linker_unload&#39; which segfaults<br>
&gt;&gt; &gt;&gt; &gt; for<br>
&gt;&gt; &gt;&gt; &gt; me.  Valgrind says this:<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;     ==42800== Invalid read of size 8<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    at 0x66945F: checkUnload (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x657F7A: GarbageCollect (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x651790: scheduleDoGC (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x6518B4: performGC_ (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x403BB1: main (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==  Address 0x5bfdd20 is 80 bytes inside a block of size<br>
&gt;&gt; &gt;&gt; &gt; 120<br>
&gt;&gt; &gt;&gt; &gt; free&#39;d<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    at 0x4C273F0: free (vg_replace_malloc.c:446)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x66945E: checkUnload (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x657F7A: GarbageCollect (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x651790: scheduleDoGC (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x6518B4: performGC_ (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;     ==42800==    by 0x403BB1: main (in<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; /home/beehive/ryan_scratch/validate14/testsuite/tests/rts/linker_unload)<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; This went the same across a couple different independent checkouts.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;   -Ryan<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; ghc-devs mailing list<br>
&gt;&gt; &gt; <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
&gt;&gt; &gt; <a href="http://www.haskell.org/mailman/listinfo/ghc-devs" target="_blank">http://www.haskell.org/mailman/listinfo/ghc-devs</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Regards,<br>
&gt;&gt; Austin - PGP: 4096R/0x91384671<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; ghc-devs mailing list<br>
&gt;&gt; <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/ghc-devs" target="_blank">http://www.haskell.org/mailman/listinfo/ghc-devs</a><br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
--<br>
Regards,<br>
Austin - PGP: 4096R/0x91384671<br>
</div></div></blockquote></div><br></div>