| # 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-readelf -s -A %t-sgot.so | FileCheck -check-prefixes=SYM,SGOT %s |
| # RUN: llvm-readelf -s -A %t-mgot.so | FileCheck -check-prefixes=SYM,MGOT %s |
| |
| # SYM: Symbol table '.symtab' |
| # SYM: {{.*}}: [[LOC1:[0-9a-f]+]] {{.*}} local1 |
| # SYM: {{.*}}: [[LOC2:[0-9a-f]+]] {{.*}} local2 |
| |
| # SGOT: Primary GOT: |
| # SGOT-NEXT: Canonical gp value: |
| # SGOT-EMPTY: |
| # SGOT-NEXT: Reserved entries: |
| # SGOT-NEXT: Address Access Initial Purpose |
| # SGOT-NEXT: {{.*}} -32752(gp) 0000000000000000 Lazy resolver |
| # SGOT-NEXT: {{.*}} -32744(gp) 8000000000000000 Module pointer (GNU extension) |
| # SGOT-EMPTY: |
| # SGOT-NEXT: Local entries: |
| # SGOT-NEXT: Address Access Initial |
| # SGOT-NEXT: {{.*}} -32736(gp) [[LOC1]] |
| # SGOT-NEXT: {{.*}} -32728(gp) [[LOC2]] |
| |
| # MGOT: Primary GOT: |
| # MGOT-NEXT: Canonical gp value: |
| # MGOT-EMPTY: |
| # MGOT-NEXT: Reserved entries: |
| # MGOT-NEXT: Address Access Initial Purpose |
| # MGOT-NEXT: {{.*}} -32752(gp) 0000000000000000 Lazy resolver |
| # MGOT-NEXT: {{.*}} -32744(gp) 8000000000000000 Module pointer (GNU extension) |
| # MGOT-EMPTY: |
| # MGOT-NEXT: Local entries: |
| # MGOT-NEXT: Address Access Initial |
| # MGOT-NEXT: {{.*}} -32736(gp) [[LOC1]] |
| # MGOT-EMPTY: |
| # MGOT-NEXT: Number of TLS and multi-GOT entries 1 |
| |
| .text |
| .global foo2 |
| foo2: |
| ld $2, %got_disp(local2)($gp) |
| |
| .bss |
| local2: |
| .word 0 |