Disable the SRT offset optimisation on MachO platforms
authorBen Gamari <bgamari.foss@gmail.com>
Tue, 22 May 2018 13:36:35 +0000 (09:36 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 23 May 2018 20:49:51 +0000 (16:49 -0400)
commitbf10456edaa03dc010821cd4c3d9f49cb11d89da
tree38c508cad2bd3690fafd6f3d96d3dc1b029ed45a
parentd424d4a46a729f8530e9273282d22b6b8f34daaa
Disable the SRT offset optimisation on MachO platforms

Unfortunately, this optimisation is infeasible on MachO platforms (e.g.
Darwin) due to an object format limitation. Specifically, linking fails
with errors of the form:

     error: unsupported relocation with subtraction expression, symbol
     '_integerzmgmp_GHCziIntegerziType_quotInteger_closure' can not be
     undefined in a subtraction expression

Apparently MachO does not permit relocations' subtraction expressions to
refer to undefined symbols. As far as I can tell this means that it is
essentially impossible to express an offset between symbols living in
different compilation units. This means that we lively can't use this
optimisation on MachO platforms.

Test Plan: Validate on Darwin

Reviewers: simonmar, erikd

Subscribers: rwbarton, thomie, carter, angerman

GHC Trac Issues: #15169

Differential Revision: https://phabricator.haskell.org/D4715
compiler/cmm/CLabel.hs
compiler/cmm/CmmBuildInfoTables.hs
compiler/cmm/CmmInfo.hs
includes/rts/storage/InfoTables.h