blob: 478e294f02f380294a60b4f313ff82ae56cced24 [file] [log] [blame]
# REQUIRES: mips
# Check R_MIPS_GOT16 relocation against weak symbols.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -shared -o %t1.so
# RUN: llvm-readobj -r -dt -dynamic-table -mips-plt-got %t1.so \
# RUN: | FileCheck -check-prefixes=CHECK,NOSYM %s
# RUN: ld.lld %t.o -shared -Bsymbolic -o %t2.so
# RUN: llvm-readobj -r -dt -dynamic-table -mips-plt-got %t2.so \
# RUN: | FileCheck -check-prefixes=CHECK,SYM %s
# CHECK: Relocations [
# CHECK-NEXT: ]
# NOSYM: Symbol {
# NOSYM: Name: foo
# NOSYM-NEXT: Value: 0x20000
# NOSYM-NEXT: Size: 0
# NOSYM-NEXT: Binding: Weak
# NOSYM-NEXT: Type: None
# NOSYM-NEXT: Other: 0
# NOSYM-NEXT: Section: .data
# NOSYM-NEXT: }
# CHECK: Symbol {
# CHECK: Name: bar
# CHECK-NEXT: Value: 0x0
# CHECK-NEXT: Size: 0
# CHECK-NEXT: Binding: Weak
# CHECK-NEXT: Type: None
# CHECK-NEXT: Other: 0
# CHECK-NEXT: Section: Undefined
# CHECK-NEXT: }
# NOSYM: Symbol {
# NOSYM: Name: sym
# NOSYM-NEXT: Value: 0x20004
# NOSYM-NEXT: Size: 0
# NOSYM-NEXT: Binding: Global
# NOSYM-NEXT: Type: None
# NOSYM-NEXT: Other: 0
# NOSYM-NEXT: Section: .data
# NOSYM-NEXT: }
# CHECK: 0x70000011 MIPS_SYMTABNO 4
# SYM: 0x7000000A MIPS_LOCAL_GOTNO 4
# SYM: 0x70000013 MIPS_GOTSYM 0x3
# NOSYM: 0x7000000A MIPS_LOCAL_GOTNO 2
# NOSYM: 0x70000013 MIPS_GOTSYM 0x1
# CHECK: Primary GOT {
# CHECK-NEXT: Canonical gp value:
# CHECK-NEXT: Reserved entries [
# CHECK: ]
# SYM: Local entries [
# SYM-NEXT: Entry {
# SYM-NEXT: Address:
# SYM-NEXT: Access: -32744
# SYM-NEXT: Initial: 0x20000
# SYM-NEXT: }
# SYM-NEXT: Entry {
# SYM-NEXT: Address:
# SYM-NEXT: Access: -32740
# SYM-NEXT: Initial: 0x20004
# SYM-NEXT: }
# SYM-NEXT: ]
# NOSYM: Local entries [
# NOSYM-NEXT: ]
# SYM-NEXT: Global entries [
# SYM-NEXT: Entry {
# SYM-NEXT: Address:
# SYM-NEXT: Access: -32736
# SYM-NEXT: Initial: 0x0
# SYM-NEXT: Value: 0x0
# SYM-NEXT: Type: None
# SYM-NEXT: Section: Undefined
# SYM-NEXT: Name: bar
# SYM-NEXT: }
# SYM-NEXT: ]
# NOSYM-NEXT: Global entries [
# NOSYM-NEXT: Entry {
# NOSYM-NEXT: Address:
# NOSYM-NEXT: Access: -32744
# NOSYM-NEXT: Initial: 0x20000
# NOSYM-NEXT: Value: 0x20000
# NOSYM-NEXT: Type: None
# NOSYM-NEXT: Section: .data
# NOSYM-NEXT: Name: foo
# NOSYM-NEXT: }
# NOSYM-NEXT: Entry {
# NOSYM-NEXT: Address:
# NOSYM-NEXT: Access: -32740
# NOSYM-NEXT: Initial: 0x0
# NOSYM-NEXT: Value: 0x0
# NOSYM-NEXT: Type: None
# NOSYM-NEXT: Section: Undefined
# NOSYM-NEXT: Name: bar
# NOSYM-NEXT: }
# NOSYM-NEXT: Entry {
# NOSYM-NEXT: Address:
# NOSYM-NEXT: Access: -32736
# NOSYM-NEXT: Initial: 0x20004
# NOSYM-NEXT: Value: 0x20004
# NOSYM-NEXT: Type: None
# NOSYM-NEXT: Section: .data
# NOSYM-NEXT: Name: sym
# NOSYM-NEXT: }
# NOSYM-NEXT: ]
# CHECK: Number of TLS and multi-GOT entries: 0
# CHECK-NEXT: }
.text
.global sym
.weak foo,bar
func:
lw $t0,%got(foo)($gp)
lw $t0,%got(bar)($gp)
lw $t0,%got(sym)($gp)
.data
.weak foo
foo:
.word 0
sym:
.word 0