Anyone else failing to validate on 'linker_unload'?

Ryan Newton rrnewton at gmail.com
Tue Sep 3 20:13:04 CEST 2013


> Ryan, can you do one final thing? When you run that program, be sure
> to specify `+RTS -Dl` (must be linked with -debug.) This will enable
> all the debug output where the linker is concerned. There will be a
> few hundred lines just for initialization (based on my machine.) If my
> theory is correct, you'll probably see stuff like 'Unloading object
> file ...' right as the invalid read/segfault occurs.


Hi Austin,

I did this, and it produced a 97MB text file of debug output, the tail end
of which was:

*initLinker: idempotent return*
*lookupSymbol: value of stg_gc_unpt_r1 is 0x485570*
*`stg_gc_unpt_r1' resolves to 0x485570Reloc: P = 0x40b510f3   S = 0x485570
  A = 0xfffffffffffffffc*
*relocations for section 3 using symtab 8*
*Rel entry   0 is raw( (nil) 0x800000001  (nil))   lookupSymbol: looking up
base_ControlziApplicative_zdfApplicativeIO3_info*
*initLinker: start*
*initLinker: idempotent return*
*lookupSymbol: value of base_ControlziApplicative_zdfApplicativeIO3_info is
0x40b51058*
*`base_ControlziApplicative_zdfApplicativeIO3_info' resolves to
0x40b51058Reloc: P = 0x40b51100   S = 0x40b51058   A = (nil)*
*resolveObjs: done*
*lookupSymbol: looking up f*
*initLinker: start*
*initLinker: idempotent return*
*lookupSymbol: value of f is 0x440330c0*
*initLinker: start*
*initLinker: idempotent return*
*unloadObj: Test.o*
*Checking whether to unload Test.o*
*Unloading object file Test.o*

And that's when it segfaulted (notusing valgrind).  If it is of any use,
here is the full output, which fortunately compresses down to 4.4MB:


http://www.cs.indiana.edu/~rrnewton/temp/linker_unload_debug_output.txt.bz2

Best,
  -Ryan

P.S. Here is the equivalent output from the same thing being run under
valgrind:

initLinker: idempotent return
lookupSymbol: value of base_ControlziApplicative_zdfApplicativeIO3_info is
0x4c15058
`base_ControlziApplicative_zdfApplicativeIO3_info' resolves to
0x4c15058Reloc: P = 0x4c15100   S = 0x4c15058   A = (nil)
resolveObjs: done
lookupSymbol: looking up f
initLinker: start
initLinker: idempotent return
lookupSymbol: value of f is 0x4c0f0c0
initLinker: start
initLinker: idempotent return
unloadObj: Test.o
Checking whether to unload Test.o
Unloading object file Test.o
==9030== Invalid read of size 8
==9030==    at 0x492502: checkUnload (CheckUnload.c:286)
==9030==    by 0x476580: GarbageCollect (GC.c:666)
==9030==    by 0x46ADCD: scheduleDoGC (Schedule.c:1652)
==9030==    by 0x46B976: performGC_ (Schedule.c:2551)
==9030==    by 0x46B9AE: performMajorGC (Schedule.c:2565)
==9030==    by 0x4043E1: main (in
/home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload2)
==9030==  Address 0x95c4580 is 80 bytes inside a block of size 120 free'd
==9030==    at 0x4A063F0: free (vg_replace_malloc.c:446)
==9030==    by 0x4656D5: stgFree (RtsUtils.c:107)
==9030==    by 0x45DDF4: freeObjectCode (Linker.c:2087)
==9030==    by 0x4924CF: checkUnload (CheckUnload.c:295)
==9030==    by 0x476580: GarbageCollect (GC.c:666)
==9030==    by 0x46ADCD: scheduleDoGC (Schedule.c:1652)
==9030==    by 0x46B976: performGC_ (Schedule.c:2551)
==9030==    by 0x46B9AE: performMajorGC (Schedule.c:2565)
==9030==    by 0x4043E1: main (in
/home/beehive/ryan_scratch/ghc-working/testsuite/tests/rts/linker_unload2)
==9030==
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ghc-devs/attachments/20130903/cbcde0a6/attachment.htm>


More information about the ghc-devs mailing list