mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
eba10cda24
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
20 lines
548 B
LLVM
20 lines
548 B
LLVM
; RUN: llc < %s -mtriple=i386-apple-darwin9 | FileCheck %s -check-prefix=X32
|
|
; RUN: llc < %s -mtriple=x86_64-apple-darwin9 | FileCheck %s -check-prefix=X64
|
|
|
|
@x = external hidden global i32 ; <i32*> [#uses=1]
|
|
@y = extern_weak hidden global i32 ; <i32*> [#uses=1]
|
|
|
|
define i32 @t() nounwind readonly {
|
|
entry:
|
|
; X32: _t:
|
|
; X32: movl _y, %eax
|
|
|
|
; X64: _t:
|
|
; X64: movq _y@GOTPCREL(%rip), %rax
|
|
|
|
%0 = load i32, i32* @x, align 4 ; <i32> [#uses=1]
|
|
%1 = load i32, i32* @y, align 4 ; <i32> [#uses=1]
|
|
%2 = add i32 %1, %0 ; <i32> [#uses=1]
|
|
ret i32 %2
|
|
}
|