blob: ebc2625970cbc32128f778fdba9e739676e6cbde [file] [log] [blame]
# REQUIRES: mips
# Check MIPS specific .dynamic section entries.
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o
# RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %p/Inputs/mips-dynamic.s -o %td.o
# RUN: ld.lld -shared %td.o -o %td.so
# RUN: ld.lld %t.o %td.so -o %t.exe
# RUN: llvm-readobj -sections -dynamic-table %t.exe \
# RUN: | FileCheck -check-prefixes=EXE,NOPIE %s
# RUN: ld.lld -pie %t.o %td.so -o %t.so
# RUN: llvm-readobj -sections -dyn-symbols -dynamic-table %t.so \
# RUN: | FileCheck -check-prefixes=EXE,PIE %s
# RUN: ld.lld %t.o --image-base=0x123000 %td.so -o %t.exe
# RUN: llvm-readobj -sections -dynamic-table %t.exe \
# RUN: | FileCheck -check-prefix=IMAGE_BASE %s
# RUN: ld.lld -shared %t.o %td.so -o %t.so
# RUN: llvm-readobj -sections -dyn-symbols -dynamic-table %t.so \
# RUN: | FileCheck -check-prefix=DSO %s
# EXE: Sections [
# EXE: Name: .dynamic
# EXE-NEXT: Type: SHT_DYNAMIC
# EXE-NEXT: Flags [
# EXE-NEXT: SHF_ALLOC
# EXE-NEXT: ]
# EXE: Name: .rld_map
# EXE-NEXT: Type: SHT_PROGBITS
# EXE-NEXT: Flags [
# EXE-NEXT: SHF_ALLOC
# EXE-NEXT: SHF_WRITE
# EXE-NEXT: ]
# EXE-NEXT: Address: [[RLDMAPADDR:0x[0-9a-f]+]]
# EXE-NEXT: Offset:
# EXE-NEXT: Size: 4
# EXE: Name: .got
# EXE-NEXT: Type: SHT_PROGBITS
# EXE-NEXT: Flags [ (0x10000003)
# EXE-NEXT: SHF_ALLOC
# EXE-NEXT: SHF_MIPS_GPREL
# EXE-NEXT: SHF_WRITE
# EXE-NEXT: ]
# EXE-NEXT: Address: [[GOTADDR:0x[0-9a-f]+]]
# EXE-NEXT: Offset:
# EXE-NEXT: Size: 8
# EXE: ]
# PIE: DynamicSection [
# PIE-NEXT: Tag Type Name/Value
# PIE: 0x00000004 HASH 0x{{[0-9A-F]+}}
# PIE-NEXT: 0x70000001 MIPS_RLD_VERSION 1
# PIE-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
# PIE-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x0
# PIE-NEXT: 0x70000011 MIPS_SYMTABNO 2
# PIE-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 2
# PIE-NEXT: 0x70000013 MIPS_GOTSYM 0x2
# PIE-NEXT: 0x00000003 PLTGOT [[GOTADDR]]
# PIE-NEXT: 0x70000035 MIPS_RLD_MAP_REL 0x{{[0-9A-F]+}}
# PIE-NEXT: 0x00000000 NULL 0x0
# PIE-NEXT: ]
# NOPIE: DynamicSection [
# NOPIE-NEXT: Tag Type Name/Value
# NOPIE: 0x00000004 HASH 0x{{[0-9A-F]+}}
# NOPIE-NEXT: 0x70000001 MIPS_RLD_VERSION 1
# NOPIE-NEXT: 0x70000005 MIPS_FLAGS NOTPOT
# NOPIE-NEXT: 0x70000006 MIPS_BASE_ADDRESS 0x10000
# NOPIE-NEXT: 0x70000011 MIPS_SYMTABNO 2
# NOPIE-NEXT: 0x7000000A MIPS_LOCAL_GOTNO 2
# NOPIE-NEXT: 0x70000013 MIPS_GOTSYM 0x2
# NOPIE-NEXT: 0x00000003 PLTGOT [[GOTADDR]]
# NOPIE-NEXT: 0x70000016 MIPS_RLD_MAP [[RLDMAPADDR]]
# NOPIE-NEXT: 0x70000035 MIPS_RLD_MAP_REL 0x{{[0-9A-F]+}}
# NOPIE-NEXT: 0x00000000 NULL 0x0
# NOPIE-NEXT: ]
# IMAGE_BASE: 0x70000006 MIPS_BASE_ADDRESS 0x123000
# DSO: Sections [
# DSO: Name: .dynamic
# DSO-NEXT: Type: SHT_DYNAMIC
# DSO-NEXT: Flags [
# DSO-NEXT: SHF_ALLOC
# DSO-NEXT: ]
# DSO: Name: .got
# DSO-NEXT: Type: SHT_PROGBITS
# DSO-NEXT: Flags [ (0x10000003)
# DSO-NEXT: SHF_ALLOC
# DSO-NEXT: SHF_MIPS_GPREL
# DSO-NEXT: SHF_WRITE
# DSO-NEXT: ]
# DSO-NEXT: Address: [[GOTADDR:0x[0-9a-f]+]]
# DSO-NEXT: Offset:
# DSO-NEXT: Size: 8
# DSO: ]
# DSO: DynamicSymbols [
# DSO: Name: @
# DSO: Name: __start@
# DSO: Name: _foo@
# DSO: ]
# DSO: DynamicSection [
# DSO-NEXT: Tag Type Name/Value
# DSO-DAG: 0x00000003 PLTGOT [[GOTADDR]]
# DSO-DAG: 0x70000001 MIPS_RLD_VERSION 1
# DSO-DAG: 0x70000005 MIPS_FLAGS NOTPOT
# DSO-DAG: 0x70000006 MIPS_BASE_ADDRESS 0x0
# DSO-DAG: 0x7000000A MIPS_LOCAL_GOTNO 2
# DSO-DAG: 0x70000011 MIPS_SYMTABNO 3
# DSO-DAG: 0x70000013 MIPS_GOTSYM 0x3
# DSO: ]
.text
.globl __start,_foo
.type _foo,@function
__start:
nop