# REQUIRES: mips # Check the primary GOT cannot be made to overflow # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux \ # RUN: %p/Inputs/mips-64-got-load.s -o %t1.so.o # RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t2.so.o # RUN: ld.lld -shared -mips-got-size 32 %t1.so.o %t2.so.o -o %t-sgot.so # RUN: ld.lld -shared -mips-got-size 24 %t1.so.o %t2.so.o -o %t-mgot.so # RUN: llvm-readobj -r -dt -mips-plt-got %t-sgot.so | FileCheck -check-prefix=SGOT %s # RUN: llvm-readobj -r -dt -mips-plt-got %t-mgot.so | FileCheck -check-prefix=MGOT %s # SGOT: Primary GOT { # SGOT-NEXT: Canonical gp value: 0x27FF0 # SGOT-NEXT: Reserved entries [ # SGOT-NEXT: Entry { # SGOT-NEXT: Address: # SGOT-NEXT: Access: -32752 # SGOT-NEXT: Initial: 0x0 # SGOT-NEXT: Purpose: Lazy resolver # SGOT-NEXT: } # SGOT-NEXT: Entry { # SGOT-NEXT: Address: # SGOT-NEXT: Access: -32744 # SGOT-NEXT: Initial: 0x80000000 # SGOT-NEXT: Purpose: Module pointer (GNU extension) # SGOT-NEXT: } # SGOT-NEXT: ] # SGOT-NEXT: Local entries [ # SGOT-NEXT: Entry { # SGOT-NEXT: Address: # SGOT-NEXT: Access: -32736 # SGOT-NEXT: Initial: 0x20020 # SGOT-NEXT: } # SGOT-NEXT: Entry { # SGOT-NEXT: Address: # SGOT-NEXT: Access: -32728 # SGOT-NEXT: Initial: 0x20030 # SGOT-NEXT: } # SGOT-NEXT: ] # SGOT-NEXT: Global entries [ # SGOT-NEXT: ] # SGOT-NEXT: Number of TLS and multi-GOT entries: 0 # SGOT-NEXT: } # MGOT: Primary GOT { # MGOT-NEXT: Canonical gp value: 0x27FF0 # MGOT-NEXT: Reserved entries [ # MGOT-NEXT: Entry { # MGOT-NEXT: Address: # MGOT-NEXT: Access: -32752 # MGOT-NEXT: Initial: 0x0 # MGOT-NEXT: Purpose: Lazy resolver # MGOT-NEXT: } # MGOT-NEXT: Entry { # MGOT-NEXT: Address: # MGOT-NEXT: Access: -32744 # MGOT-NEXT: Initial: 0x80000000 # MGOT-NEXT: Purpose: Module pointer (GNU extension) # MGOT-NEXT: } # MGOT-NEXT: ] # MGOT-NEXT: Local entries [ # MGOT-NEXT: Entry { # MGOT-NEXT: Address: # MGOT-NEXT: Access: -32736 # MGOT-NEXT: Initial: 0x20020 # MGOT-NEXT: } # MGOT-NEXT: ] # MGOT-NEXT: Global entries [ # MGOT-NEXT: ] # MGOT-NEXT: Number of TLS and multi-GOT entries: 1 # MGOT-NEXT: } .text .global foo2 foo2: ld $2, %got_disp(local2)($gp) .bss local2: .word 0