Refactored SymbolInfo to lower memory usage in RTS
authorTamar Christina <tamar@zhox.com>
Fri, 3 Jun 2016 19:42:16 +0000 (21:42 +0200)
committerBen Gamari <ben@smart-cactus.org>
Fri, 3 Jun 2016 19:42:32 +0000 (21:42 +0200)
commit37473722960a1066c3b45c94377ba08769b1375b
treecdaebe9089fc39d1077c765cfe152f4176f2afb4
parent1dadd9a91454bb098e9c47d6c034b07e2e1e2529
Refactored SymbolInfo to lower memory usage in RTS

Previously as part of #11223 a new struct `SymbolInfo` was introduced to
keep track it the weak symbol status of a symbol.

This structure also kept a copy of the calculated address of the symbol
which turns out was useful in ignoring non-weak zero-valued symbols.

The information was kept in an array so it means for every symbol two
extra bytes were kept even though the vast majority of symbols are
non-weak and non-zero valued.

This changes the array into a sparse map keeping this information only
for the symbols that are weak or zero-valued. This allows for a
reduction in the amount of information needed to be kept while giving up
a small (negligable) hit in performance as this information now has to
be looked up in hashmaps.

Test Plan: ./validate on all platforms that use the runtime linker.

For unix platforms please ensure `DYNAMIC_GHC_PROGRAMS=NO` is added to
your validate file.

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D2184

GHC Trac Issues: #11816
rts/Linker.c
rts/LinkerInternals.h
rts/RtsSymbolInfo.c [new file with mode: 0644]
rts/RtsSymbolInfo.h [new file with mode: 0644]
testsuite/tests/rts/T11223/T11223_simple_duplicate_lib.stderr-mingw32