Remove lookup of sections by name instead use the index numbers as offsets
authorTamar Christina <tamar@zhox.com>
Tue, 12 Jan 2016 19:34:25 +0000 (20:34 +0100)
committerTamar Christina <tamar@zhox.com>
Thu, 14 Jan 2016 20:35:12 +0000 (21:35 +0100)
commit49e414a736efe6a5aa221907d9eab9019978e225
tree7955c8e9e355c50a26ef5fdb8fe7fdf90e2bff67
parentdb371c10a2da722a18b0d5bc042eb2d02ba60e1b
Remove lookup of sections by name instead use the index numbers as offsets

Summary:
This patch comes from @awson

{{{
Playing with `-fsplit-sections` on Windows I've found a pile of ancient
(it was borrowed from Hugs interpreter code and I don't even know when
was it created), absolutely redundant and plain wrong code in RTS linker.

Technically it is a bug, but it doesn't break things when used with
current Windows binutils with no special linker scripts involved.

OTOH, it slows down runtime linker on Windows noticeably and thus can
be considered as a performance bug.

The nice side-effect for existing users is that GHCi now loads compiled
object code much faster on Windows.
}}}

More specifically, sections were being looked up by name by doing a loop
over all sections until the section with the given name is found.

The new approach uses the section index and finds the section in O(1) time
based on information gathered when we originally processed the section

Test Plan: ./validate (was run on GHC x86)

Reviewers: austin, awson, erikd, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: awson, #ghc_windows_task_force

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

GHC Trac Issues: #11388
rts/Linker.c