[mips] Make another set of test cases more tolerant to exact symbol addresses. NFC

llvm-svn: 371313
This commit is contained in:
Simon Atanasyan 2019-09-07 15:44:40 +00:00
parent 72e99e63a2
commit fcef13344d
16 changed files with 247 additions and 352 deletions

View File

@ -1,26 +1,31 @@
# REQUIRES: mips
# Check R_MIPS_GOT16 relocation calculation.
# RUN: echo "SECTIONS { \
# RUN: . = 0x20000; .text : { *(.text) } \
# RUN: . = 0x30000; .got : { *(.got) } \
# RUN: }" > %t.script
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t-be.o
# RUN: ld.lld %t-be.o -o %t-be.exe
# RUN: ld.lld %t-be.o --script %t.script -o %t-be.exe
# RUN: llvm-readobj --sections -r --symbols --mips-plt-got %t-be.exe \
# RUN: | FileCheck -check-prefixes=ELF,EXE %s
# RUN: | FileCheck -check-prefix=ELF %s
# RUN: llvm-objdump -d %t-be.exe | FileCheck -check-prefix=DIS %s
# RUN: llvm-mc -filetype=obj -triple=mipsel-unknown-linux %s -o %t-el.o
# RUN: ld.lld %t-el.o -o %t-el.exe
# RUN: ld.lld %t-el.o --script %t.script -o %t-el.exe
# RUN: llvm-readobj --sections -r --symbols --mips-plt-got %t-el.exe \
# RUN: | FileCheck -check-prefixes=ELF,EXE %s
# RUN: | FileCheck -check-prefix=ELF %s
# RUN: llvm-objdump -d %t-el.exe | FileCheck -check-prefix=DIS %s
# RUN: ld.lld -shared %t-be.o -o %t-be.so
# RUN: ld.lld -shared %t-be.o --script %t.script -o %t-be.so
# RUN: llvm-readobj --sections -r --symbols --mips-plt-got %t-be.so \
# RUN: | FileCheck -check-prefixes=ELF,DSO %s
# RUN: | FileCheck -check-prefix=ELF %s
# RUN: llvm-objdump -d %t-be.so | FileCheck -check-prefix=DIS %s
# RUN: ld.lld -shared %t-el.o -o %t-el.so
# RUN: ld.lld -shared %t-el.o --script %t.script -o %t-el.so
# RUN: llvm-readobj --sections -r --symbols --mips-plt-got %t-el.so \
# RUN: | FileCheck -check-prefixes=ELF,DSO %s
# RUN: | FileCheck -check-prefix=ELF %s
# RUN: llvm-objdump -d %t-el.so | FileCheck -check-prefix=DIS %s
.text
@ -30,8 +35,6 @@ __start:
.data
.globl v1
.type v1,@object
.size v1,4
v1:
.word 0
@ -51,16 +54,13 @@ v1:
# ELF-NEXT: Value: 0x[[V1:[0-9A-F]+]]
#
# ELF: {{.*}} GOT {
# EXE-NEXT: Canonical gp value: 0x38000
# DSO-NEXT: Canonical gp value: 0x28000
# ELF-NEXT: Canonical gp value: 0x37FF0
#
# ELF: Entry {
# EXE: Address: 0x30018
# DSO: Address: 0x20018
# ELF: Address: 0x30008
# ELF-NEXT: Access: -32744
# ELF-NEXT: Initial: 0x[[V1]]
# "v1 GOT entry address" - _gp
# exe: 0x30018 - 0x38000 = -0x7fe8 == 0x8018 == 32792
# dso: 0x20018 - 0x28000 = -0x7fe8 == 0x8018 == 32792
# DIS: {{.*}} lui $2, 32792
# 0x30008 - 0x37FF0 = -0x7fe8 == 0x8018 == 32792
# DIS: lui $2, 32792

View File

@ -3,118 +3,42 @@
# 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 --dyn-syms --dynamic-table --mips-plt-got %t1.so \
# RUN: llvm-readelf -r --dyn-syms --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 --dyn-syms --dynamic-table --mips-plt-got %t2.so \
# RUN: llvm-readelf -r --dyn-syms --dynamic-table --mips-plt-got %t2.so \
# RUN: | FileCheck -check-prefixes=CHECK,SYM %s
# CHECK: Relocations [
# CHECK-NEXT: ]
# CHECK: There are no relocations in this file.
# 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 table '.dynsym'
# CHECK-DAG: [[FOO:[0-9a-f]+]] 0 NOTYPE WEAK DEFAULT 8 foo
# CHECK-DAG: 00000000 0 NOTYPE WEAK DEFAULT UND bar
# CHECK-DAG: [[SYM:[0-9a-f]+]] 0 NOTYPE GLOBAL DEFAULT 8 sym
# 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: }
# CHECK: Dynamic section
# CHECK: (MIPS_SYMTABNO) 4
# NOSYM: (MIPS_LOCAL_GOTNO) 2
# NOSYM: (MIPS_GOTSYM) 0x1
# SYM: (MIPS_LOCAL_GOTNO) 4
# SYM: (MIPS_GOTSYM) 0x3
# 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: }
# NOSYM: Primary GOT:
# NOSYM-NOT: Local entries:
# NOSYM: Global entries:
# NOSYM-NEXT: Access Initial Sym.Val. Type Ndx Name
# NOSYM-NEXT: -32744(gp) [[FOO]] [[FOO]] NOTYPE 8 foo
# NOSYM-NEXT: -32740(gp) 00000000 00000000 NOTYPE UND bar
# NOSYM-NEXT: -32736(gp) [[SYM]] [[SYM]] NOTYPE 8 sym
# 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: }
# SYM: Primary GOT:
# SYM: Local entries:
# SYM-NEXT: Access Initial
# SYM-NEXT: -32744(gp) [[FOO]]
# SYM-NEXT: -32740(gp) [[SYM]]
# SYM: Global entries:
# SYM-NEXT: Access Initial Sym.Val. Type Ndx Name
# SYM-NEXT: -32736(gp) 00000000 00000000 NOTYPE UND bar
.text
.global sym

View File

@ -6,27 +6,32 @@
# RUN: ld.lld -r -o %t %t.o %t.o
# RUN: llvm-objdump -d -r --no-show-raw-insn %t | FileCheck -check-prefix=OBJ %s
# RUN: ld.lld -shared -o %t.so %t
# RUN: llvm-objdump -d --no-show-raw-insn %t.so | FileCheck -check-prefix=SO %s
# RUN: llvm-objdump -d -t --print-imm-hex --no-show-raw-insn %t.so \
# RUN: | FileCheck -check-prefix=SO %s
# OBJ: Disassembly of section .text:
# OBJ-EMPTY:
# OBJ-NEXT: .text:
# OBJ-NEXT: 0: lw $25, 0($gp)
# OBJ-NEXT: 00000000: R_MIPS_GOT16 .data
# OBJ-NEXT: 4: addiu $4, $25, 0
# OBJ-NEXT: 00000004: R_MIPS_LO16 .data
# OBJ: 10: lw $25, 0($gp)
# OBJ-NEXT: 00000010: R_MIPS_GOT16 .data
# OBJ-NEXT: 14: addiu $4, $25, 16
# OBJ-NEXT: 00000014: R_MIPS_LO16 .data
# OBJ-NEXT: lw $25, 0($gp)
# OBJ-NEXT: 00000000: R_MIPS_GOT16 .data
# OBJ-NEXT: addiu $4, $25, 0
# OBJ-NEXT: 00000004: R_MIPS_LO16 .data
# OBJ: lw $25, 0($gp)
# OBJ-NEXT: 00000010: R_MIPS_GOT16 .data
# OBJ-NEXT: addiu $4, $25, 16
# OBJ-NEXT: 00000014: R_MIPS_LO16 .data
# SO: Disassembly of section .text:
# SO-EMPTY:
# SO-NEXT: .text:
# SO-NEXT: 10000: lw $25, -32744($gp)
# SO-NEXT: 10004: addiu $4, $25, 0
# SO: 10010: lw $25, -32744($gp)
# SO-NEXT: 10014: addiu $4, $25, 16
# SO-NEXT: lw $25, -0x7fe8($gp)
# SO-NEXT: addiu $4, $25, 0x[[D1:[0-9a-f]+]]
# SO: lw $25, -0x7fe8($gp)
# SO-NEXT: addiu $4, $25, 0x[[D2:[0-9a-f]+]]
# SO: SYMBOL TABLE
# SO: [[D1]]
# SO: [[D2]]
.text
lw $t9, %got(.data)($gp)

View File

@ -2,52 +2,54 @@
# Check R_MIPS_GOT16 relocation calculation.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -shared -o %t.so
# RUN: echo "SECTIONS { \
# RUN: . = 0x1000; .text ALIGN(0x1000) : { *(.text) } \
# RUN: . = 0x3000; .data : { *(.data) } \
# RUN: }" > %t.script
# RUN: ld.lld %t.o -shared --script %t.script -o %t.so
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.so | FileCheck %s
# RUN: llvm-readelf -r --mips-plt-got %t.so | FileCheck -check-prefix=GOT %s
# CHECK: Disassembly of section .text:
# CHECK-EMPTY:
# CHECK-NEXT: __start:
# CHECK-NEXT: 10000: lw $8, -32744($gp)
# CHECK-NEXT: 10004: addi $8, $8, 44
# CHECK-NEXT: 10008: lw $8, -32732($gp)
# CHECK-NEXT: 1000c: addi $8, $8, -28672
# CHECK-NEXT: 10010: lw $8, -32728($gp)
# CHECK-NEXT: 10014: addi $8, $8, -28668
# CHECK-NEXT: 10018: lw $8, -32728($gp)
# CHECK-NEXT: 1001c: addi $8, $8, 4100
# CHECK-NEXT: 10020: lw $8, -32720($gp)
# CHECK-NEXT: 10024: addi $8, $8, 4104
# CHECK-NEXT: 10028: lw $8, -32716($gp)
# CHECK: __start:
# CHECK-NEXT: lw $8, -32744($gp)
# CHECK-NEXT: addi $8, $8, 8236
# CHECK-NEXT: lw $8, -32732($gp)
# CHECK-NEXT: addi $8, $8, -16384
# CHECK-NEXT: lw $8, -32728($gp)
# CHECK-NEXT: addi $8, $8, -16380
# CHECK-NEXT: lw $8, -32728($gp)
# CHECK-NEXT: addi $8, $8, 16388
# CHECK-NEXT: lw $8, -32720($gp)
# CHECK-NEXT: addi $8, $8, 16392
# CHECK-NEXT: lw $8, -32716($gp)
#
# CHECK: SYMBOL TABLE:
# CHECK: 00041008 .data 00000000 .hidden bar
# CHECK: 00024008 .data 00000000 .hidden bar
# CHECK: 00000000 *UND* 00000000 foo
# GOT: There are no relocations in this file.
# GOT: Local entries:
# GOT-NEXT: Address Access Initial
# GOT-NEXT: 00041018 -32744(gp) 00010000
# ^-- (0x1002c + 0x8000) & ~0xffff
# GOT-NEXT: 0004101c -32740(gp) 00020000
# ^-- redundant unused entry
# GOT-NEXT: 00041020 -32736(gp) 00020000
# ^-- redundant unused entry
# GOT-NEXT: 00041024 -32732(gp) 00030000
# ^-- (0x29000 + 0x8000) & ~0xffff
# GOT-NEXT: 00041028 -32728(gp) 00040000
# ^-- (0x29000 + 0x10004 + 0x8000) & ~0xffff
# ^-- (0x29000 + 0x18004 + 0x8000) & ~0xffff
# GOT-NEXT: 0004102c -32724(gp) 00050000
# ^-- redundant unused entry
# GOT-NEXT: 00041030 -32720(gp) 00041008
# ^-- 'bar' address
# GOT-NEXT: Access Initial
# GOT-NEXT: -32744(gp) 00000000
# ^-- (0x2000 + 0x8000) & ~0xffff
# GOT-NEXT: -32740(gp) 00010000
# ^-- redundant unused entry
# GOT-NEXT: -32736(gp) 00000000
# ^-- redundant unused entry
# GOT-NEXT: -32732(gp) 00010000
# ^-- (0x3000 + 0x9000 + 0x8000) & ~0xffff
# GOT-NEXT: -32728(gp) 00020000
# ^-- (0x3000 + 0x9000 + 0x10004 + 0x8000) & ~0xffff
# ^-- (0x3000 + 0x9000 + 0x18004 + 0x8000) & ~0xffff
# GOT-NEXT: -32724(gp) 00030000
# ^-- redundant unused entry
# GOT-NEXT: -32720(gp) 00024008
# ^-- 'bar' address
# GOT-EMPTY:
# GOT-NEXT: Global entries:
# GOT-NEXT: Address Access Initial Sym.Val. Type Ndx Name
# GOT-NEXT: 00041034 -32716(gp) 00000000 00000000 NOTYPE UND foo
# GOT-NEXT: Access Initial Sym.Val. Type Ndx Name
# GOT-NEXT: -32716(gp) 00000000 00000000 NOTYPE UND foo
.text
.globl __start

View File

@ -3,31 +3,30 @@
# we use our own value.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld -shared -o %t.so %t.o %S/Inputs/mips-gp-disp.so
# RUN: llvm-readobj --symbols %t.so | FileCheck -check-prefix=INT-SO %s
# RUN: llvm-readobj --symbols %S/Inputs/mips-gp-disp.so \
# RUN: echo "SECTIONS { \
# RUN: . = 0x1000; .text ALIGN(0x1000) : { *(.text) } \
# RUN: . = 0x30000; .got : { *(.got) } \
# RUN: }" > %t.script
# RUN: ld.lld -shared --script %t.script -o %t.so %t.o %S/Inputs/mips-gp-disp.so
# RUN: llvm-readelf --symbols %t.so | FileCheck -check-prefix=INT-SO %s
# RUN: llvm-readelf --symbols %S/Inputs/mips-gp-disp.so \
# RUN: | FileCheck -check-prefix=EXT-SO %s
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.so | FileCheck -check-prefix=DIS %s
# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
# RUN: llvm-readelf -r %t.so | FileCheck -check-prefix=REL %s
# INT-SO: Name: _gp_disp
# INT-SO-NEXT: Value:
# INT-SO-NEXT: Size:
# INT-SO-NEXT: Binding: Local
# EXT-SO: Name: _gp_disp
# EXT-SO-NEXT: Value: 0x20000
# INT-SO: 00000000 0 NOTYPE LOCAL HIDDEN ABS _gp_disp
# EXT-SO: 00020000 0 NOTYPE GLOBAL DEFAULT 9 _gp_disp
# DIS: Disassembly of section .text:
# DIS-EMPTY:
# DIS-NEXT: __start:
# DIS-NEXT: 10000: lui $8, 1
# DIS-NEXT: 10004: addi $8, $8, 32752
# ^-- 0x37ff0 & 0xffff
# DIS: 00027ff0 .got 00000000 .hidden _gp
# DIS-NEXT: lui $8, 3
# DIS-NEXT: addi $8, $8, 24560
# ^-- (_gp - __start) & 0xffff
# DIS: 00037ff0 .got 00000000 .hidden _gp
# DIS: 00002000 .text 00000000 __start
# REL: Relocations [
# REL-NEXT: ]
# REL: There are no relocations in this file
.text
.globl __start

View File

@ -2,16 +2,19 @@
# Check handling of relocations against __gnu_local_gp symbol.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld -o %t.exe %t.o
# RUN: echo "SECTIONS { \
# RUN: . = 0x10000; .text ALIGN(0x1000) : { *(.text) } \
# RUN: . = 0x30000; .got : { *(.got) } \
# RUN: }" > %t.script
# RUN: ld.lld --script %t.script -o %t.exe %t.o
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.exe | FileCheck %s
# CHECK: Disassembly of section .text:
# CHECK-EMPTY:
# CHECK-NEXT: __start:
# CHECK-NEXT: 20000: lui $8, 3
# CHECK-NEXT: 20004: addi $8, $8, 32752
# CHECK: __start:
# CHECK-NEXT: lui $8, 3
# CHECK-NEXT: addi $8, $8, 32752
# CHECK: 00037ff0 .got 00000000 .hidden _gp
# CHECK: 00011000 .text 00000000 __start
.text
.globl __start

View File

@ -19,8 +19,8 @@
# CHECK-NEXT: SHF_MIPS_GPREL
# CHECK-NEXT: SHF_WRITE
# CHECK-NEXT: ]
# CHECK-NEXT: Address: 0x20000
# CHECK-NEXT: Offset: 0x20000
# CHECK-NEXT: Address:
# CHECK-NEXT: Offset:
# CHECK: }
# CHECK: Section {
# CHECK-NEXT: Index:
@ -31,6 +31,6 @@
# CHECK-NEXT: SHF_MIPS_GPREL
# CHECK-NEXT: SHF_WRITE
# CHECK-NEXT: ]
# CHECK-NEXT: Address: 0x20008
# CHECK-NEXT: Offset: 0x20008
# CHECK-NEXT: Address:
# CHECK-NEXT: Offset:
# CHECK: }

View File

@ -5,23 +5,24 @@
# RUN: ld.lld -r -o %t-rel.o %t.o
# RUN: llvm-readobj --mips-reginfo %t-rel.o | FileCheck --check-prefix=REL %s
# RUN: ld.lld -shared -o %t.so %S/Inputs/mips-gp0-non-zero.o
# RUN: llvm-readobj --mips-reginfo %t.so | FileCheck --check-prefix=DSO %s
# RUN: echo "SECTIONS { \
# RUN: .rodata ALIGN(0x1000) : { *(.rodata) } \
# RUN: . = 0x20000; .text : { *(.text) } \
# RUN: }" > %t.script
# RUN: ld.lld -shared --script %t.script -o %t.so %S/Inputs/mips-gp0-non-zero.o
# RUN: llvm-objdump -s -t %t.so | FileCheck --check-prefix=DUMP %s
# REL: GP: 0x0
# DSO: GP: 0x27FF0
# DUMP: Contents of section .rodata:
# DUMP: {{[0-9a-f]+}} ffff0004 ffff0008
# ^ 0x10004 + 0x7ff0 - 0x27ff0
# ^ 0x10008 + 0x7ff0 - 0x27ff0
# DUMP: 1000 fffffff4 fffffff8
# ^ 0x20004 + 0x7ff0 - 0x28000
# ^ 0x20008 + 0x7ff0 - 0x28000
# DUMP: SYMBOL TABLE:
# DUMP: 00010008 .text 00000000 bar
# DUMP: 00010004 .text 00000000 foo
# DUMP: 00027ff0 .got 00000000 .hidden _gp
# DUMP: 00020008 .text 00000000 bar
# DUMP: 00020004 .text 00000000 foo
# DUMP: 00028000 .got 00000000 .hidden _gp
.text
.global __start

View File

@ -2,7 +2,11 @@
# Check R_MIPS_GPREL32 relocation calculation.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld -shared -o %t.so %t.o
# RUN: echo "SECTIONS { \
# RUN: .rodata ALIGN(0x1000) : { *(.rodata) } \
# RUN: . = 0x20000; .text : { *(.text) } \
# RUN: }" > %t.script
# RUN: ld.lld -shared --script %t.script -o %t.so %t.o
# RUN: llvm-objdump -s -section=.rodata -t %t.so | FileCheck %s
.text
@ -20,11 +24,11 @@ v1:
.gpword bar
# CHECK: Contents of section .rodata:
# CHECK: {{[0-9a-f]+}} fffe8014 fffe8018
# ^ 0x10004 - 0x27ff0
# ^ 0x10008 - 0x27ff0
# CHECK: 1000 ffff8004 ffff8008
# ^ 0x20004 - 0x28000
# ^ 0x20008 - 0x28000
# CHECK: SYMBOL TABLE:
# CHECK: 00010008 .text 00000000 bar
# CHECK: 00010004 .text 00000000 foo
# CHECK: 00027ff0 .got 00000000 .hidden _gp
# CHECK: 00020008 .text 00000000 bar
# CHECK: 00020004 .text 00000000 foo
# CHECK: 00028000 .got 00000000 .hidden _gp

View File

@ -4,7 +4,7 @@
# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux %s -o %t1.o
# RUN: llvm-mc -filetype=obj -triple=mips64-unknown-linux \
# RUN: %S/Inputs/mips-dynamic.s -o %t2.o
# RUN: ld.lld %t1.o %t2.o -o %t.exe
# RUN: ld.lld %t1.o %t2.o %t.script -o %t.exe
# RUN: llvm-objdump -d --no-show-raw-insn %t.exe | FileCheck %s
.global __start
@ -14,7 +14,10 @@ __start:
lui $7, %highest(_foo+0x300047FFF7FF8)
ld $7, %higher (_foo+0x300047FFF7FF8)($7)
# CHECK: 20000: lui $6, 3
# CHECK-NEXT: 20004: daddiu $6, $6, 5
# CHECK-NEXT: 20008: lui $7, 3
# CHECK-NEXT: 2000c: ld $7, 5($7)
# CHECK: __start:
# CHECK-NEXT: lui $6, 3
# CHECK-NEXT: daddiu $6, $6, 5
# CHECK-NEXT: lui $7, 3
# CHECK-NEXT: ld $7, 5($7)
# CHECK-EMPTY:
# CHECK-NEXT: _foo:

View File

@ -1,13 +1,17 @@
# REQUIRES: mips
# Check R_MIPS_HI16 / LO16 relocations calculation against _gp_disp.
# RUN: echo "SECTIONS { \
# RUN: . = 0x10000; .text ALIGN(0x1000) : { *(.text) } \
# RUN: . = 0x30000; .got : { *(.got) } \
# RUN: }" > %t.script
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t1.o
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
# RUN: %S/Inputs/mips-dynamic.s -o %t2.o
# RUN: ld.lld %t1.o %t2.o -o %t.exe
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.exe | FileCheck -check-prefix=EXE %s
# RUN: ld.lld %t1.o %t2.o -shared -o %t.so
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.so | FileCheck -check-prefix=SO %s
# RUN: ld.lld %t1.o %t2.o --script %t.script -o %t.exe
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.exe | FileCheck %s
# RUN: ld.lld %t1.o %t2.o -shared --script %t.script -o %t.so
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.so | FileCheck %s
.text
.globl __start
@ -19,38 +23,20 @@ bar:
lui $t0,%hi(_gp_disp)
addi $t0,$t0,%lo(_gp_disp)
# EXE: Disassembly of section .text:
# EXE-EMPTY:
# EXE-NEXT: __start:
# EXE-NEXT: 20000: lui $8, 2
# ^-- %hi(0x47ff0-0x20000)
# EXE-NEXT: 20004: addi $8, $8, -32768
# ^-- %lo(0x38000-0x20004+4)
# EXE: bar:
# EXE-NEXT: 2000c: lui $8, 1
# ^-- %hi(0x38000-0x2000c)
# EXE-NEXT: 20010: addi $8, $8, 32756
# ^-- %lo(0x38000-0x20010+4)
# CHECK: Disassembly of section .text:
# CHECK-EMPTY:
# CHECK-NEXT: __start:
# CHECK-NEXT: 11000: lui $8, 2
# ^-- %hi(0x37ff0-0x11000)
# CHECK-NEXT: 11004: addi $8, $8, 28656
# ^-- %lo(0x37ff0-0x11004+4)
# CHECK: bar:
# CHECK-NEXT: 1100c: lui $8, 2
# ^-- %hi(0x37ff0-0x1100c)
# CHECK-NEXT: 11010: addi $8, $8, 28644
# ^-- %lo(0x37ff0-0x11010+4)
# EXE: SYMBOL TABLE:
# EXE: 0002000c .text 00000000 bar
# EXE: 00038000 .got 00000000 .hidden _gp
# EXE: 00020000 .text 00000000 __start
# SO: Disassembly of section .text:
# SO-EMPTY:
# SO-NEXT: __start:
# SO-NEXT: 10000: lui $8, 2
# ^-- %hi(0x28000-0x10000)
# SO-NEXT: 10004: addi $8, $8, -32768
# ^-- %lo(0x28000-0x10004+4)
# SO: bar:
# SO-NEXT: 1000c: lui $8, 1
# ^-- %hi(0x28000-0x1000c)
# SO-NEXT: 10010: addi $8, $8, 32756
# ^-- %lo(0x28000-0x10010+4)
# SO: SYMBOL TABLE:
# SO: 0001000c .text 00000000 bar
# SO: 00028000 .got 00000000 .hidden _gp
# SO: 00010000 .text 00000000 __start
# CHECK: SYMBOL TABLE:
# CHECK: 0001100c .text 00000000 bar
# CHECK: 00037ff0 .got 00000000 .hidden _gp
# CHECK: 00011000 .text 00000000 __start

View File

@ -3,7 +3,7 @@
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -o %t.exe 2>&1 | FileCheck -check-prefix=WARN %s
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.exe | FileCheck %s
# RUN: llvm-objdump -d -t --print-imm-hex --no-show-raw-insn %t.exe | FileCheck %s
.text
.globl __start
@ -15,14 +15,12 @@ _label:
# WARN: can't find matching R_MIPS_LO16 relocation for R_MIPS_HI16
# CHECK: Disassembly of section .text:
# CHECK-EMPTY:
# CHECK-NEXT: __start:
# CHECK-NEXT: 20000: lui $8, 3
# ^-- %hi(__start) w/o addend
# CHECK-NEXT 20004: addi $8, $8, 8
# ^-- %lo(_label)
# CHECK: __start:
# CHECK-NEXT: lui $8, 0x3
# ^-- %hi(__start) w/o addend
# CHECK-NEXT: addi $8, $8, 0x[[VAL:[0-9a-f]+]]
# ^-- %lo(_label)
# CHECK: SYMBOL TABLE:
# CHECK: 00020008 .text 00000000 _label
# CHECK: 00020000 .text 00000000 __start
# CHECK: 00020{{0*}}[[VAL]] .text 00000000 _label
# CHECK: 00020{{.*}} .text 00000000 __start

View File

@ -2,8 +2,9 @@
# Check R_MIPS_HI16 / LO16 relocations calculation.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -o %t.exe
# RUN: llvm-objdump -d -t %t.exe | FileCheck %s
# RUN: echo "SECTIONS { . = 0x20000; .text ALIGN(0x1000) : { *(.text) } }" > %t.script
# RUN: ld.lld %t.o --script %t.script -o %t.exe
# RUN: llvm-objdump -d -t --no-show-raw-insn %t.exe | FileCheck %s
.text
.globl __start
@ -29,25 +30,23 @@ l1:
g1:
.word 0
# CHECK: Disassembly of section .text:
# CHECK-EMPTY:
# CHECK-NEXT: __start:
# CHECK-NEXT: 20000: 3c 08 00 02 lui $8, 2
# ^-- %hi(__start+4)
# CHECK-NEXT: 20004: 3c 09 00 03 lui $9, 3
# ^-- %hi(g1+8)
# CHECK-NEXT: 20008: 21 08 00 04 addi $8, $8, 4
# ^-- %lo(__start+4)
# CHECK-NEXT: 2000c: 21 08 00 0c addi $8, $8, 12
# ^-- %lo(g1+8)
# CHECK-NEXT: 20010: 3c 08 00 04 lui $8, 4
# ^-- %hi(l1+0x10000-4)
# CHECK-NEXT: 20014: 3c 09 00 05 lui $9, 5
# ^-- %hi(l1+0x20000-4)
# CHECK-NEXT: 20018: 21 08 ff fc addi $8, $8, -4
# ^-- %lo(l1-4)
# CHECK: __start:
# CHECK-NEXT: 21000: lui $8, 2
# ^-- %hi(__start+4)
# CHECK-NEXT: 21004: lui $9, 2
# ^-- %hi(g1+8)
# CHECK-NEXT: 21008: addi $8, $8, 4100
# ^-- %lo(__start+4)
# CHECK-NEXT: 2100c: addi $8, $8, 4140
# ^-- %lo(g1+8)
# CHECK-NEXT: 21010: lui $8, 3
# ^-- %hi(l1+0x10000-4)
# CHECK-NEXT: 21014: lui $9, 4
# ^-- %hi(l1+0x20000-4)
# CHECK-NEXT: 21018: addi $8, $8, 4124
# ^-- %lo(l1-4)
# CHECK: SYMBOL TABLE:
# CHECK: 0030000 l O .data 00000004 l1
# CHECK: 0020000 .text 00000000 __start
# CHECK: 0030004 g O .data 00000004 g1
# CHECK: 0021020 l O .data 00000004 l1
# CHECK: 0021000 .text 00000000 __start
# CHECK: 0021024 g O .data 00000004 g1

20
lld/test/ELF/mips-jalr.s Normal file
View File

@ -0,0 +1,20 @@
# REQUIRES: mips
# Check that lld ignores R_MIPS_JALR relocation for now.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: ld.lld %t.o -o %t.exe
# RUN: llvm-readelf -r %t.o | FileCheck -check-prefix=REL %s
# RUN: llvm-objdump -d --no-show-raw-insn %t.exe | FileCheck %s
# REL: R_MIPS_CALL16 {{.*}} foo
# REL: R_MIPS_JALR {{.*}} foo
# CHECK: jalr $25
.text
.global __start
.option pic2
__start:
jal foo
foo:
nop

View File

@ -1,51 +0,0 @@
# Check that lld ignores R_MIPS_JALR relocation for now.
# RUN: yaml2obj %s -o %t.o
# RUN: ld.lld %t.o -o %t.so -shared
# RUN: llvm-objdump -d --no-show-raw-insn %t.so | FileCheck %s
# RUN: llvm-readobj -r %t.so | FileCheck -check-prefix=REL %s
# REQUIRES: mips
# CHECK: 10000: jalr $25
# REL: Relocations [
# REL-NEXT: ]
!ELF
FileHeader:
Class: ELFCLASS32
Data: ELFDATA2LSB
Type: ET_REL
Machine: EM_MIPS
Flags: [EF_MIPS_PIC, EF_MIPS_CPIC, EF_MIPS_ABI_O32, EF_MIPS_ARCH_32]
Sections:
- Name: .text
Type: SHT_PROGBITS
Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
AddressAlign: 16
Content: "09f82003"
# ^-- jalr T1
- Name: .rel.text
Type: SHT_REL
Link: .symtab
Info: .text
Relocations:
- Offset: 0
Symbol: T1
Type: R_MIPS_JALR
Symbols:
- Name: T1
Type: STT_FUNC
Section: .text
Value: 0
Size: 4
- Name: __start
Type: STT_FUNC
Section: .text
Value: 0
Size: 4
Binding: STB_GLOBAL

View File

@ -6,25 +6,27 @@
# RUN: %p/Inputs/mips-mgot-1.s -o %t1.o
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \
# RUN: %p/Inputs/mips-mgot-2.s -o %t2.o
# RUN: ld.lld -shared -mips-got-size 52 %t0.o %t1.o %t2.o -o %t.so
# RUN: echo "SECTIONS { \
# RUN: . = 0x10000; .text : { *(.text) } \
# RUN: . = 0x70000; .got : { *(.got) } \
# RUN: }" > %t.script
# RUN: ld.lld -shared -mips-got-size 52 --script %t.script %t0.o %t1.o %t2.o -o %t.so
# RUN: llvm-objdump -s -section=.got -t %t.so | FileCheck %s
# RUN: llvm-readobj -r --dyn-syms --mips-plt-got %t.so | FileCheck -check-prefix=GOT %s
# CHECK: Contents of section .got:
# CHECK-NEXT: 70000 00000000 80000000 00010000 00010030
# CHECK-NEXT: 70010 00000000 00000004 00030000 00040000
# CHECK-NEXT: 70020 00050000 00060000 00070000 00080000
# CHECK-NEXT: 70000 00000000 80000000 [[FOO0:[0-9a-f]+]] [[FOO2:[0-9a-f]+]]
# CHECK-NEXT: 70010 00000000 00000004 00010000 00020000
# CHECK-NEXT: 70020 00030000 00040000 00050000 00060000
# CHECK-NEXT: 70030 00000000 00000000 00000000 00000000
# CHECK-NEXT: 70040 00000000 00000000 00000000
# CHECK: SYMBOL TABLE:
# CHECK: 00000000 l O .tdata 00000000 loc0
# CHECK: 00010000 .text 00000000 foo0
# CHECK: [[FOO0]] .text 00000000 foo0
# CHECK: 00000000 g O .tdata 00000000 tls0
# CHECK: 00010020 .text 00000000 foo1
# CHECK: 00000004 g O .tdata 00000000 tls1
# CHECK: 00010030 .text 00000000 foo2
# CHECK: 00000008 g O .tdata 00000000 tls2
# CHECK: [[FOO2]] .text 00000000 foo2
# GOT: Relocations [
# GOT-NEXT: Section (7) .rel.dyn {
@ -48,11 +50,11 @@
# GOT: DynamicSymbols [
# GOT: Symbol {
# GOT: Name: foo0
# GOT-NEXT: Value: 0x10000
# GOT-NEXT: Value: 0x[[FOO0:[0-9A-F]+]]
# GOT: }
# GOT-NEXT: Symbol {
# GOT-NEXT: Name: foo2
# GOT-NEXT: Value: 0x10030
# GOT-NEXT: Value: 0x[[FOO2:[0-9A-F]+]]
# GOT: }
# GOT-NEXT: ]
@ -78,8 +80,8 @@
# GOT-NEXT: Entry {
# GOT-NEXT: Address:
# GOT-NEXT: Access: -32744
# GOT-NEXT: Initial: 0x10000
# GOT-NEXT: Value: 0x10000
# GOT-NEXT: Initial: 0x[[FOO0]]
# GOT-NEXT: Value: 0x[[FOO0]]
# GOT-NEXT: Type: None
# GOT-NEXT: Section: .text
# GOT-NEXT: Name: foo0
@ -87,8 +89,8 @@
# GOT-NEXT: Entry {
# GOT-NEXT: Address:
# GOT-NEXT: Access: -32740
# GOT-NEXT: Initial: 0x10030
# GOT-NEXT: Value: 0x10030
# GOT-NEXT: Initial: 0x[[FOO2]]
# GOT-NEXT: Value: 0x[[FOO2]]
# GOT-NEXT: Type: None
# GOT-NEXT: Section: .text
# GOT-NEXT: Name: foo2