Use a got to access a hidden weak undefined on MachO.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 17 Jan 2018 19:19:55 +0000 (19:19 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 17 Jan 2018 19:19:55 +0000 (19:19 +0000)
commitd7008692355f5029ffc6360d25574e65613d63af
tree40146b40e778d6de16c1718d88ffe7556c4750bb
parentbbcaf4ac5caadf71593cdd1bee8d0697ac190aaf
Use a got to access a hidden weak undefined on MachO.

Trying to link

__attribute__((weak, visibility("hidden"))) extern int foo;
int *main(void) {
  return &foo;
}

on OS X fails with

ld: 32-bit RIP relative reference out of range (-4294971318 max is +/-2GB): from _main (0x100000FAB) to _foo@0x00001000 (0x00000000) in '_main' from test.o for architecture x86_64

The problem being that 0 cannot be computed as a fixed difference from
%rip. Exactly the same issue exists on ELF and we can use the same
solution.

llvm-svn: 322739
llvm/lib/Target/TargetMachine.cpp
llvm/test/CodeGen/X86/hidden-vis-3.ll