diff options
author | Fangrui Song <maskray@google.com> | 2019-08-28 12:06:06 +0000 |
---|---|---|
committer | Fangrui Song <maskray@google.com> | 2019-08-28 12:06:06 +0000 |
commit | 523f999acf6faa94d497ca1e81cb676d0a6063d5 (patch) | |
tree | 137cbd8d68850251482d9833f29a13506bf2b256 | |
parent | ab6594575a221debb2a02f6b0e277c6cc86e9154 (diff) | |
download | bcm5719-llvm-523f999acf6faa94d497ca1e81cb676d0a6063d5.tar.gz bcm5719-llvm-523f999acf6faa94d497ca1e81cb676d0a6063d5.zip |
[ELF][RISCV] Allow PT_LOAD to have overlapping p_offset ranges on EM_RISCV
Port the D64906 technique to RISC-V. It deletes 3 alignments at
PT_LOAD boundaries for the default case: the size of a RISC-V binary
decreases by at most 12kb.
llvm-svn: 370192
-rw-r--r-- | lld/ELF/Writer.cpp | 6 | ||||
-rw-r--r-- | lld/test/ELF/riscv-gp.s | 17 | ||||
-rw-r--r-- | lld/test/ELF/riscv-plt.s | 65 | ||||
-rw-r--r-- | lld/test/ELF/riscv-reloc-copy.s | 19 | ||||
-rw-r--r-- | lld/test/ELF/riscv-reloc-got.s | 50 | ||||
-rw-r--r-- | lld/test/ELF/riscv-tls-gd.s | 58 | ||||
-rw-r--r-- | lld/test/ELF/riscv-tls-ie.s | 54 | ||||
-rw-r--r-- | lld/test/ELF/riscv-tls-ld.s | 44 | ||||
-rw-r--r-- | lld/test/ELF/riscv32-reloc-32-pic.s | 6 | ||||
-rw-r--r-- | lld/test/ELF/riscv64-reloc-64-pic.s | 6 |
10 files changed, 169 insertions, 156 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 4de22eff38e..df8b9a9d945 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -2224,9 +2224,9 @@ template <class ELFT> void Writer<ELFT>::fixSectionAlignments() { // and non-executable segments. // // TODO Enable this technique on all targets. - bool enable = - config->emachine != EM_HEXAGON && config->emachine != EM_MIPS && - config->emachine != EM_RISCV && config->emachine != EM_X86_64; + bool enable = config->emachine != EM_HEXAGON && + config->emachine != EM_MIPS && + config->emachine != EM_X86_64; if (!enable || (config->zSeparateCode && prev && (prev->p_flags & PF_X) != (p->p_flags & PF_X))) diff --git a/lld/test/ELF/riscv-gp.s b/lld/test/ELF/riscv-gp.s index 83b5f0dd735..5f0819fcc85 100644 --- a/lld/test/ELF/riscv-gp.s +++ b/lld/test/ELF/riscv-gp.s @@ -1,19 +1,22 @@ # REQUIRES: riscv # RUN: llvm-mc -filetype=obj -triple=riscv32 %s -o %t.32.o # RUN: ld.lld -pie %t.32.o -o %t.32 -# RUN: llvm-readelf -s %t.32 | FileCheck --check-prefix=SYM %s -# RUN: llvm-readelf -S %t.32 | FileCheck --check-prefix=SEC %s +# RUN: llvm-readelf -s %t.32 | FileCheck --check-prefix=SYM32 %s +# RUN: llvm-readelf -S %t.32 | FileCheck --check-prefix=SEC32 %s # RUN: not ld.lld -shared %t.32.o -o /dev/null 2>&1 | FileCheck --check-prefix=ERR %s # RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.64.o # RUN: ld.lld -pie %t.64.o -o %t.64 -# RUN: llvm-readelf -s %t.64 | FileCheck --check-prefix=SYM %s -# RUN: llvm-readelf -S %t.64 | FileCheck --check-prefix=SEC %s +# RUN: llvm-readelf -s %t.64 | FileCheck --check-prefix=SYM64 %s +# RUN: llvm-readelf -S %t.64 | FileCheck --check-prefix=SEC64 %s # RUN: not ld.lld -shared %t.64.o -o /dev/null 2>&1 | FileCheck --check-prefix=ERR %s -## __global_pointer$ = .sdata+0x800 = 0x3800 -# SEC: [ 7] .sdata PROGBITS {{0*}}00003000 -# SYM: {{0*}}00003800 0 NOTYPE GLOBAL DEFAULT 7 __global_pointer$ +## __global_pointer$ = .sdata+0x800 = 0x39b8 +# SEC32: [ 7] .sdata PROGBITS {{0*}}000031b8 +# SYM32: {{0*}}000039b8 0 NOTYPE GLOBAL DEFAULT 7 __global_pointer$ + +# SEC64: [ 7] .sdata PROGBITS {{0*}}000032d0 +# SYM64: {{0*}}00003ad0 0 NOTYPE GLOBAL DEFAULT 7 __global_pointer$ ## __global_pointer$ - 0x1000 = 4096*3-2048 # DIS: 1000: auipc gp, 3 diff --git a/lld/test/ELF/riscv-plt.s b/lld/test/ELF/riscv-plt.s index 0afd5b0057f..0f0567692ea 100644 --- a/lld/test/ELF/riscv-plt.s +++ b/lld/test/ELF/riscv-plt.s @@ -2,18 +2,18 @@ # RUN: echo '.globl bar, weak; .type bar,@function; .type weak,@function; bar: weak:' > %t1.s # RUN: llvm-mc -filetype=obj -triple=riscv32 %t1.s -o %t1.32.o -# RUN: ld.lld -shared %t1.32.o -o %t1.32.so +# RUN: ld.lld -shared %t1.32.o -soname=t1.32.so -o %t1.32.so # RUN: llvm-mc -filetype=obj -triple=riscv32 %s -o %t.32.o -# RUN: ld.lld %t.32.o %t1.32.so -o %t.32 +# RUN: ld.lld %t.32.o %t1.32.so -z separate-code -o %t.32 # RUN: llvm-readelf -S -s %t.32 | FileCheck --check-prefixes=SEC,NM %s # RUN: llvm-readobj -r %t.32 | FileCheck --check-prefix=RELOC32 %s # RUN: llvm-readelf -x .got.plt %t.32 | FileCheck --check-prefix=GOTPLT32 %s # RUN: llvm-objdump -d --no-show-raw-insn %t.32 | FileCheck --check-prefixes=DIS,DIS32 %s # RUN: llvm-mc -filetype=obj -triple=riscv64 %t1.s -o %t1.64.o -# RUN: ld.lld -shared %t1.64.o -o %t1.64.so +# RUN: ld.lld -shared %t1.64.o -soname=t1.64.so -o %t1.64.so # RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.64.o -# RUN: ld.lld %t.64.o %t1.64.so -o %t.64 +# RUN: ld.lld %t.64.o %t1.64.so -z separate-code -o %t.64 # RUN: llvm-readelf -S -s %t.64 | FileCheck --check-prefixes=SEC,NM %s # RUN: llvm-readobj -r %t.64 | FileCheck --check-prefix=RELOC64 %s # RUN: llvm-readelf -x .got.plt %t.64 | FileCheck --check-prefix=GOTPLT64 %s @@ -29,34 +29,34 @@ ## The .got.plt slots relocated by .rela.plt point to .plt ## This is required by glibc. # RELOC32: .rela.plt { -# RELOC32-NEXT: 0x13008 R_RISCV_JUMP_SLOT bar 0x0 -# RELOC32-NEXT: 0x1300C R_RISCV_JUMP_SLOT weak 0x0 +# RELOC32-NEXT: 0x13070 R_RISCV_JUMP_SLOT bar 0x0 +# RELOC32-NEXT: 0x13074 R_RISCV_JUMP_SLOT weak 0x0 # RELOC32-NEXT: } # GOTPLT32: section '.got.plt' -# GOTPLT32-NEXT: 0x00013000 00000000 00000000 30100100 30100100 +# GOTPLT32-NEXT: 0x00013068 00000000 00000000 30100100 30100100 # RELOC64: .rela.plt { -# RELOC64-NEXT: 0x13010 R_RISCV_JUMP_SLOT bar 0x0 -# RELOC64-NEXT: 0x13018 R_RISCV_JUMP_SLOT weak 0x0 +# RELOC64-NEXT: 0x130E0 R_RISCV_JUMP_SLOT bar 0x0 +# RELOC64-NEXT: 0x130E8 R_RISCV_JUMP_SLOT weak 0x0 # RELOC64-NEXT: } # GOTPLT64: section '.got.plt' -# GOTPLT64-NEXT: 0x00013000 00000000 00000000 00000000 00000000 -# GOTPLT64-NEXT: 0x00013010 30100100 00000000 30100100 00000000 +# GOTPLT64-NEXT: 0x000130d0 00000000 00000000 00000000 00000000 +# GOTPLT64-NEXT: 0x000130e0 30100100 00000000 30100100 00000000 # DIS: _start: ## Direct call ## foo - . = 0x11020-0x11000 = 32 -# DIS-NEXT: auipc ra, 0 -# DIS-NEXT: 11004: jalr 32(ra) -## bar@plt - . = 0x11050-0x1100c = 72 -# DIS-NEXT: auipc ra, 0 -# DIS-NEXT: 1100c: jalr 72(ra) -## bar@plt - . = 0x11050-0x11014 = 64 -# DIS-NEXT: auipc ra, 0 -# DIS-NEXT: 11014: jalr 64(ra) -## weak@plt - . = 0x11060-0x1101c = 72 -# DIS-NEXT: auipc ra, 0 -# DIS-NEXT: 1101c: jalr 72(ra) +# DIS-NEXT: 11000: auipc ra, 0 +# DIS-NEXT: jalr 32(ra) +## bar@plt - . = 0x11050-0x11008 = 72 +# DIS-NEXT: 11008: auipc ra, 0 +# DIS-NEXT: jalr 72(ra) +## bar@plt - . = 0x11050-0x11010 = 64 +# DIS-NEXT: 11010: auipc ra, 0 +# DIS-NEXT: jalr 64(ra) +## weak@plt - . = 0x11060-0x11018 = 72 +# DIS-NEXT: 11018: auipc ra, 0 +# DIS-NEXT: jalr 72(ra) # DIS: foo: # DIS-NEXT: 11020: @@ -64,28 +64,29 @@ # DIS: .plt: # DIS-NEXT: auipc t2, 2 # DIS-NEXT: sub t1, t1, t3 -## .got.plt - .plt = 0x13000 - 0x11030 = 4096*2-48 -# DIS32-NEXT: lw t3, -48(t2) -# DIS64-NEXT: ld t3, -48(t2) +## .got.plt - .plt = 0x13068 - 0x11030 = 4096*2+56 +# DIS32-NEXT: lw t3, 56(t2) +# DIS64-NEXT: ld t3, 160(t2) # DIS-NEXT: addi t1, t1, -44 -# DIS-NEXT: addi t0, t2, -48 +# DIS32-NEXT: addi t0, t2, 56 +# DIS64-NEXT: addi t0, t2, 160 # DIS32-NEXT: srli t1, t1, 2 # DIS64-NEXT: srli t1, t1, 1 # DIS32-NEXT: lw t0, 4(t0) # DIS64-NEXT: ld t0, 8(t0) # DIS-NEXT: jr t3 -## 32-bit: &.got.plt[bar]-. = 0x13008-0x11050 = 4096*2-72 +## 32-bit: &.got.plt[bar]-. = 0x13070-0x11050 = 4096*2+32 # DIS: 11050: auipc t3, 2 -# DIS32-NEXT: lw t3, -72(t3) -# DIS64-NEXT: ld t3, -64(t3) +# DIS32-NEXT: lw t3, 32(t3) +# DIS64-NEXT: ld t3, 144(t3) # DIS-NEXT: jalr t1, t3 # DIS-NEXT: nop -## 32-bit: &.got.plt[weak]-. = 0x1300c-0x11060 = 4096*2-84 +## 32-bit: &.got.plt[weak]-. = 0x13074-0x11060 = 4096*2+20 # DIS: 11060: auipc t3, 2 -# DIS32-NEXT: lw t3, -84(t3) -# DIS64-NEXT: ld t3, -72(t3) +# DIS32-NEXT: lw t3, 20(t3) +# DIS64-NEXT: ld t3, 136(t3) # DIS-NEXT: jalr t1, t3 # DIS-NEXT: nop diff --git a/lld/test/ELF/riscv-reloc-copy.s b/lld/test/ELF/riscv-reloc-copy.s index 94d839d41df..17a5902cc47 100644 --- a/lld/test/ELF/riscv-reloc-copy.s +++ b/lld/test/ELF/riscv-reloc-copy.s @@ -1,23 +1,24 @@ # REQUIRES: riscv # RUN: llvm-mc -filetype=obj -triple=riscv32 %p/Inputs/relocation-copy.s -o %t1.o -# RUN: ld.lld -shared %t1.o -o %t1.so +# RUN: ld.lld -shared %t1.o -soname=t1.so -o %t1.so # RUN: llvm-mc -filetype=obj -triple=riscv32 %s -o %t.o # RUN: ld.lld %t.o %t1.so -o %t -# RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC %s +# RUN: llvm-readobj -r %t | FileCheck --check-prefixes=REL,REL32 %s # RUN: llvm-nm -S %t | FileCheck --check-prefix=NM32 %s # RUN: llvm-mc -filetype=obj -triple=riscv64 %p/Inputs/relocation-copy.s -o %t1.o -# RUN: ld.lld -shared %t1.o -o %t1.so +# RUN: ld.lld -shared %t1.o -soname=t1.so -o %t1.so # RUN: llvm-mc -filetype=obj -triple=riscv64 %s -o %t.o # RUN: ld.lld %t.o %t1.so -o %t -# RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC %s +# RUN: llvm-readobj -r %t | FileCheck --check-prefixes=REL,REL64 %s # RUN: llvm-nm -S %t | FileCheck --check-prefix=NM64 %s -# RELOC: .rela.dyn { -# RELOC-NEXT: 0x13000 R_RISCV_COPY x 0x0 -# RELOC-NEXT: } +# REL: .rela.dyn { +# REL32-NEXT: 0x13210 R_RISCV_COPY x 0x0 +# REL64-NEXT: 0x13360 R_RISCV_COPY x 0x0 +# REL-NEXT: } -# NM32: 00013000 00000004 B x -# NM64: 0000000000013000 0000000000000004 B x +# NM32: 00013210 00000004 B x +# NM64: 0000000000013360 0000000000000004 B x la a0, x diff --git a/lld/test/ELF/riscv-reloc-got.s b/lld/test/ELF/riscv-reloc-got.s index 1adccd9d05f..ce4d648d48d 100644 --- a/lld/test/ELF/riscv-reloc-got.s +++ b/lld/test/ELF/riscv-reloc-got.s @@ -1,59 +1,63 @@ # REQUIRES: riscv # RUN: echo '.globl b; b:' | llvm-mc -filetype=obj -triple=riscv32 - -o %t1.o -# RUN: ld.lld -shared %t1.o -o %t1.so +# RUN: ld.lld -shared %t1.o -soname=t1.so -o %t1.so # RUN: llvm-mc -filetype=obj -triple=riscv32 -position-independent %s -o %t.o # RUN: ld.lld %t.o %t1.so -o %t +# RUN: llvm-readelf -S %t | FileCheck --check-prefix=SEC32 %s # RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC32 %s -# RUN: llvm-nm %t | FileCheck --check-prefix=NM %s +# RUN: llvm-nm %t | FileCheck --check-prefix=NM32 %s # RUN: llvm-readobj -x .got %t | FileCheck --check-prefix=HEX32 %s # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=DIS32 %s # RUN: echo '.globl b; b:' | llvm-mc -filetype=obj -triple=riscv64 - -o %t1.o -# RUN: ld.lld -shared %t1.o -o %t1.so +# RUN: ld.lld -shared %t1.o -soname=t1.so -o %t1.so # RUN: llvm-mc -filetype=obj -triple=riscv64 -position-independent %s -o %t.o # RUN: ld.lld %t.o %t1.so -o %t +# RUN: llvm-readelf -S %t | FileCheck --check-prefix=SEC64 %s # RUN: llvm-readobj -r %t | FileCheck --check-prefix=RELOC64 %s -# RUN: llvm-nm %t | FileCheck --check-prefix=NM %s +# RUN: llvm-nm %t | FileCheck --check-prefix=NM64 %s # RUN: llvm-readobj -x .got %t | FileCheck --check-prefix=HEX64 %s # RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck --check-prefix=DIS64 %s -# SEC: .got PROGBITS 00012060 020060 00000c +# SEC32: .got PROGBITS 0001220c 00020c 00000c +# SEC64: .got PROGBITS 0000000000012358 000358 000018 # RELOC32: .rela.dyn { -# RELOC32-NEXT: 0x12068 R_RISCV_32 b 0x0 +# RELOC32-NEXT: 0x12214 R_RISCV_32 b 0x0 # RELOC32-NEXT: } # RELOC64: .rela.dyn { -# RELOC64-NEXT: 0x120D0 R_RISCV_64 b 0x0 +# RELOC64-NEXT: 0x12368 R_RISCV_64 b 0x0 # RELOC64-NEXT: } -# NM: 00013000 d a +# NM32: 00013218 d a +# NM64: 0000000000013370 d a ## .got[0] = _DYNAMIC ## .got[1] = a (filled at link time) ## .got[2] = 0 (relocated by R_RISCV_64 at runtime) # HEX32: section '.got': -# HEX32: 0x00012060 00200100 00300100 00000000 +# HEX32: 0x0001220c ac210100 18320100 00000000 # HEX64: section '.got': -# HEX64: 0x000120c0 00200100 00000000 00300100 00000000 -# HEX64: 0x000120d0 00000000 00000000 +# HEX64: 0x00012358 98220100 00000000 70330100 00000000 +# HEX64: 0x00012368 00000000 00000000 -## &.got[1]-. = 0x12060-0x11000 = 4096*1+100 -# DIS32: 11000: auipc a0, 1 -# DIS32-NEXT: lw a0, 100(a0) -## &.got[2]-. = 0x12064-0x11008 = 4096*1+96 -# DIS32: 11008: auipc a0, 1 -# DIS32-NEXT: lw a0, 96(a0) +## &.got[1]-. = 0x12210-0x1119c = 4096*1+116 +# DIS32: 1119c: auipc a0, 1 +# DIS32-NEXT: lw a0, 116(a0) +## &.got[2]-. = 0x12214-0x111a4 = 4096*1+112 +# DIS32: 111a4: auipc a0, 1 +# DIS32-NEXT: lw a0, 112(a0) -## &.got[1]-. = 0x120c8-0x11000 = 4096*1+100 -# DIS64: 11000: auipc a0, 1 -# DIS64-NEXT: ld a0, 200(a0) -## &.got[2]-. = 0x120d0-0x11008 = 4096*1+200 -# DIS64: 11008: auipc a0, 1 -# DIS64-NEXT: ld a0, 200(a0) +## &.got[1]-. = 0x12360-0x11288 = 4096*1+216 +# DIS64: 11288: auipc a0, 1 +# DIS64-NEXT: ld a0, 216(a0) +## &.got[2]-. = 0x12368-0x11290 = 4096*1+216 +# DIS64: 11290: auipc a0, 1 +# DIS64-NEXT: ld a0, 216(a0) la a0,a la a0,b diff --git a/lld/test/ELF/riscv-tls-gd.s b/lld/test/ELF/riscv-tls-gd.s index 3f5735aabf2..078199438ef 100644 --- a/lld/test/ELF/riscv-tls-gd.s +++ b/lld/test/ELF/riscv-tls-gd.s @@ -46,42 +46,42 @@ # RUN: llvm-readelf -x .got %t.64 | FileCheck --check-prefix=IE64-GOT %s # GD32-REL: .rela.dyn { -# GD32-REL-NEXT: 0x2070 R_RISCV_TLS_DTPMOD32 a 0x0 -# GD32-REL-NEXT: 0x2074 R_RISCV_TLS_DTPREL32 a 0x0 -# GD32-REL-NEXT: 0x2078 R_RISCV_TLS_DTPMOD32 b 0x0 -# GD32-REL-NEXT: 0x207C R_RISCV_TLS_DTPREL32 b 0x0 +# GD32-REL-NEXT: 0x2310 R_RISCV_TLS_DTPMOD32 a 0x0 +# GD32-REL-NEXT: 0x2314 R_RISCV_TLS_DTPREL32 a 0x0 +# GD32-REL-NEXT: 0x2318 R_RISCV_TLS_DTPMOD32 b 0x0 +# GD32-REL-NEXT: 0x231C R_RISCV_TLS_DTPREL32 b 0x0 # GD32-REL-NEXT: } -## &DTPMOD(a) - . = 0x2070 - 0x1000 = 4096*1+112 -# GD32: 1000: auipc a0, 1 -# GD32-NEXT: addi a0, a0, 112 +## &DTPMOD(a) - . = 0x2310 - 0x1250 = 4096*1+192 +# GD32: 1250: auipc a0, 1 +# GD32-NEXT: addi a0, a0, 192 # GD32-NEXT: auipc ra, 0 # GD32-NEXT: jalr 56(ra) -## &DTPMOD(b) - . = 0x2078 - 0x1010 = 4096*1+104 -# GD32: 1010: auipc a0, 1 -# GD32-NEXT: addi a0, a0, 104 +## &DTPMOD(b) - . = 0x2318 - 0x1260 = 4096*1+184 +# GD32: 1260: auipc a0, 1 +# GD32-NEXT: addi a0, a0, 184 # GD32-NEXT: auipc ra, 0 # GD32-NEXT: jalr 40(ra) # GD64-REL: .rela.dyn { -# GD64-REL-NEXT: 0x20E0 R_RISCV_TLS_DTPMOD64 a 0x0 -# GD64-REL-NEXT: 0x20E8 R_RISCV_TLS_DTPREL64 a 0x0 -# GD64-REL-NEXT: 0x20F0 R_RISCV_TLS_DTPMOD64 b 0x0 -# GD64-REL-NEXT: 0x20F8 R_RISCV_TLS_DTPREL64 b 0x0 +# GD64-REL-NEXT: 0x24D0 R_RISCV_TLS_DTPMOD64 a 0x0 +# GD64-REL-NEXT: 0x24D8 R_RISCV_TLS_DTPREL64 a 0x0 +# GD64-REL-NEXT: 0x24E0 R_RISCV_TLS_DTPMOD64 b 0x0 +# GD64-REL-NEXT: 0x24E8 R_RISCV_TLS_DTPREL64 b 0x0 # GD64-REL-NEXT: } -## &DTPMOD(a) - . = 0x20e0 - 0x1000 = 4096*1+224 -# GD64: 1000: auipc a0, 1 -# GD64-NEXT: addi a0, a0, 224 +## &DTPMOD(a) - . = 0x24d0 - 0x1398 = 4096*1+312 +# GD64: 1398: auipc a0, 1 +# GD64-NEXT: addi a0, a0, 312 # GD64-NEXT: auipc ra, 0 -# GD64-NEXT: jalr 56(ra) +# GD64-NEXT: jalr 64(ra) -## &DTPMOD(b) - . = 0x20f0 - 0x1010 = 4096*1+224 -# GD64: 1010: auipc a0, 1 -# GD64-NEXT: addi a0, a0, 224 +## &DTPMOD(b) - . = 0x24e0 - 0x13a8 = 4096*1+312 +# GD64: 13a8: auipc a0, 1 +# GD64-NEXT: addi a0, a0, 312 # GD64-NEXT: auipc ra, 0 -# GD64-NEXT: jalr 40(ra) +# GD64-NEXT: jalr 48(ra) # NOREL: no relocations @@ -97,19 +97,19 @@ ## a is local - relaxed to LE - its DTPMOD/DTPREL slots are link-time constants. ## b is external - DTPMOD/DTPREL dynamic relocations are required. # IE32-REL: .rela.dyn { -# IE32-REL-NEXT: 0x12068 R_RISCV_TLS_DTPMOD32 b 0x0 -# IE32-REL-NEXT: 0x1206C R_RISCV_TLS_DTPREL32 b 0x0 +# IE32-REL-NEXT: 0x12230 R_RISCV_TLS_DTPMOD32 b 0x0 +# IE32-REL-NEXT: 0x12234 R_RISCV_TLS_DTPREL32 b 0x0 # IE32-REL-NEXT: } # IE32-GOT: section '.got': -# IE32-GOT-NEXT: 0x00012060 01000000 08f8ffff 00000000 00000000 +# IE32-GOT-NEXT: 0x00012228 01000000 08f8ffff 00000000 00000000 # IE64-REL: .rela.dyn { -# IE64-REL-NEXT: 0x120D0 R_RISCV_TLS_DTPMOD64 b 0x0 -# IE64-REL-NEXT: 0x120D8 R_RISCV_TLS_DTPREL64 b 0x0 +# IE64-REL-NEXT: 0x12390 R_RISCV_TLS_DTPMOD64 b 0x0 +# IE64-REL-NEXT: 0x12398 R_RISCV_TLS_DTPREL64 b 0x0 # IE64-REL-NEXT: } # IE64-GOT: section '.got': -# IE64-GOT-NEXT: 0x000120c0 01000000 00000000 08f8ffff ffffffff -# IE64-GOT-NEXT: 0x000120d0 00000000 00000000 00000000 00000000 +# IE64-GOT-NEXT: 0x00012380 01000000 00000000 08f8ffff ffffffff +# IE64-GOT-NEXT: 0x00012390 00000000 00000000 00000000 00000000 la.tls.gd a0,a call __tls_get_addr@plt diff --git a/lld/test/ELF/riscv-tls-ie.s b/lld/test/ELF/riscv-tls-ie.s index b7497c3093d..f88c3ed28a8 100644 --- a/lld/test/ELF/riscv-tls-ie.s +++ b/lld/test/ELF/riscv-tls-ie.s @@ -23,28 +23,28 @@ # RUN: llvm-objdump -d --no-show-raw-insn %t.64 | FileCheck --check-prefixes=LE,LE64 %s # IE32-REL: .rela.dyn { -# IE32-REL-NEXT: 0x205C R_RISCV_TLS_TPREL32 - 0xC -# IE32-REL-NEXT: 0x2058 R_RISCV_TLS_TPREL32 a 0x0 +# IE32-REL-NEXT: 0x2218 R_RISCV_TLS_TPREL32 - 0xC +# IE32-REL-NEXT: 0x2214 R_RISCV_TLS_TPREL32 a 0x0 # IE32-REL-NEXT: } # IE32-REL: FLAGS STATIC_TLS # IE64-REL: .rela.dyn { -# IE64-REL-NEXT: 0x20B8 R_RISCV_TLS_TPREL64 - 0xC -# IE64-REL-NEXT: 0x20B0 R_RISCV_TLS_TPREL64 a 0x0 +# IE64-REL-NEXT: 0x2370 R_RISCV_TLS_TPREL64 - 0xC +# IE64-REL-NEXT: 0x2368 R_RISCV_TLS_TPREL64 a 0x0 # IE64-REL-NEXT: } # IE64-REL: FLAGS STATIC_TLS -## rv32: &.got[1] - . = 0x2058 - . = 4096*1+88 -## rv64: &.got[1] - . = 0x20B0 - . = 4096*1+176 -# IE: 1000: auipc a4, 1 -# IE32-NEXT: lw a4, 88(a4) -# IE64-NEXT: ld a4, 176(a4) +## rv32: &.got[0] - . = 0x2214 - . = 4096*1+112 +## rv64: &.got[0] - . = 0x2368 - . = 4096*1+200 +# IE: auipc a4, 1 +# IE32-NEXT: lw a4, 112(a4) +# IE64-NEXT: ld a4, 200(a4) # IE-NEXT: add a4, a4, tp -## rv32: &.got[0] - . = 0x205C - . = 4096*1+80 -## rv64: &.got[0] - . = 0x20B8 - . = 4096*1+172 -# IE: 100c: auipc a5, 1 -# IE32-NEXT: lw a5, 80(a5) -# IE64-NEXT: ld a5, 172(a5) +## rv32: &.got[1] - . = 0x2218 - . = 4096*1+104 +## rv64: &.got[1] - . = 0x2370 - . = 4096*1+196 +# IE: auipc a5, 1 +# IE32-NEXT: lw a5, 104(a5) +# IE64-NEXT: ld a5, 196(a5) # IE-NEXT: add a5, a5, tp # NOREL: no relocations @@ -52,21 +52,23 @@ # a@tprel = st_value(a) = 0x8 # b@tprel = st_value(a) = 0xc # LE32-GOT: section '.got': -# LE32-GOT-NEXT: 0x00012000 08000000 0c000000 +# LE32-GOT-NEXT: 0x0001212c 08000000 0c000000 # LE64-GOT: section '.got': -# LE64-GOT-NEXT: 0x00012000 08000000 00000000 0c000000 00000000 +# LE64-GOT-NEXT: 0x000121e0 08000000 00000000 0c000000 00000000 -## rv32: &.got[0] - . = 0x12000 - 0x11000 = 4096*1+0 -## rv64: &.got[0] - . = 0x12000 - 0x11000 = 4096*1+0 -# LE: 11000: auipc a4, 1 -# LE32-NEXT: lw a4, 0(a4) -# LE64-NEXT: ld a4, 0(a4) +## rv32: &.got[0] - . = 0x1212c - 0x11114 = 4096*1+24 +## rv64: &.got[0] - . = 0x121e0 - 0x111c8 = 4096*1+24 +# LE32: 11114: auipc a4, 1 +# LE32-NEXT: lw a4, 24(a4) +# LE64: 111c8: auipc a4, 1 +# LE64-NEXT: ld a4, 24(a4) # LE-NEXT: add a4, a4, tp -## rv32: &.got[1] - . = 0x12004 - 0x1100c = 4096*1-8 -## rv64: &.got[1] - . = 0x12008 - 0x1100c = 4096*1-4 -# LE: 1100c: auipc a5, 1 -# LE32-NEXT: lw a5, -8(a5) -# LE64-NEXT: ld a5, -4(a5) +## rv32: &.got[1] - . = 0x12130 - 0x11120 = 4096*1+16 +## rv64: &.got[1] - . = 0x121e8 - 0x111d4 = 4096*1+20 +# LE32: 11120: auipc a5, 1 +# LE32-NEXT: lw a5, 16(a5) +# LE64: 111d4: auipc a5, 1 +# LE64-NEXT: ld a5, 20(a5) # LE-NEXT: add a5, a5, tp la.tls.ie a4,a diff --git a/lld/test/ELF/riscv-tls-ld.s b/lld/test/ELF/riscv-tls-ld.s index 6563cf87463..f47964ef3e2 100644 --- a/lld/test/ELF/riscv-tls-ld.s +++ b/lld/test/ELF/riscv-tls-ld.s @@ -35,44 +35,46 @@ ## a@dtprel = st_value(a)-0x800 = 0xfffff808 is a link-time constant. # LD32-REL: .rela.dyn { -# LD32-REL-NEXT: 0x2084 -# LD32-REL-NEXT: 0x207C R_RISCV_TLS_DTPMOD32 - 0x0 +# LD32-REL-NEXT: 0x22B4 +# LD32-REL-NEXT: 0x22AC R_RISCV_TLS_DTPMOD32 - 0x0 # LD32-REL-NEXT: } # LD32-GOT: section '.got': -# LD32-GOT-NEXT: 0x00002078 00200000 00000000 00f8ffff 00000000 +# LD32-GOT-NEXT: 0x000022a8 30220000 00000000 00f8ffff 00000000 # LD64-REL: .rela.dyn { -# LD64-REL-NEXT: 0x2108 -# LD64-REL-NEXT: 0x20F8 R_RISCV_TLS_DTPMOD64 - 0x0 +# LD64-REL-NEXT: 0x2458 +# LD64-REL-NEXT: 0x2448 R_RISCV_TLS_DTPMOD64 - 0x0 # LD64-REL-NEXT: } # LD64-GOT: section '.got': -# LD64-GOT-NEXT: 0x000020f0 00200000 00000000 00000000 00000000 -# LD64-GOT-NEXT: 0x00002100 00f8ffff ffffffff 00000000 00000000 +# LD64-GOT-NEXT: 0x00002440 50230000 00000000 00000000 00000000 +# LD64-GOT-NEXT: 0x00002450 00f8ffff ffffffff 00000000 00000000 -## rv32: &DTPMOD(a) - . = 0x207c - 0x1000 = 4096*1+124 -## rv64: &DTPMOD(a) - . = 0x20e0 - 0x1000 = 4096*1+248 -# LD: 1000: auipc a0, 1 -# LD32-NEXT: addi a0, a0, 124 -# LD64-NEXT: addi a0, a0, 248 +## rv32: &DTPMOD(a) - . = 0x22ac - 0x11d8 = 4096*1+212 +## rv64: &DTPMOD(a) - . = 0x2448 - 0x12f8 = 4096*1+336 +# LD32: 11d8: auipc a0, 1 +# LD32-NEXT: addi a0, a0, 212 +# LD64: 12f8: auipc a0, 1 +# LD64-NEXT: addi a0, a0, 336 # LD-NEXT: auipc ra, 0 -# LD-NEXT: jalr 56(ra) +# LD-NEXT: jalr 64(ra) # NOREL: no relocations ## a is local - its DTPMOD/DTPREL slots are link-time constants. ## a@dtpmod = 1 (main module) # LE32-GOT: section '.got': -# LE32-GOT-NEXT: 0x00012000 00000000 01000000 00f8ffff 00200100 +# LE32-GOT-NEXT: 0x00012134 00000000 01000000 00f8ffff 34210100 # LE64-GOT: section '.got': -# LE64-GOT-NEXT: 0x00012000 00000000 00000000 01000000 00000000 -# LE64-GOT-NEXT: 0x00012010 00f8ffff ffffffff 00200100 00000000 +# LE64-GOT-NEXT: 0x000121e8 00000000 00000000 01000000 00000000 +# LE64-GOT-NEXT: 0x000121f8 00f8ffff ffffffff e8210100 00000000 -## rv32: DTPMOD(.LANCHOR0) - . = 0x12004 - 0x11000 = 4096*1+4 -## rv64: DTPMOD(.LANCHOR0) - . = 0x12008 - 0x11000 = 4096*1+8 -# LE: 11000: auipc a0, 1 -# LE32-NEXT: addi a0, a0, 4 -# LE64-NEXT: addi a0, a0, 8 +## rv32: DTPMOD(.LANCHOR0) - . = 0x12138 - 0x11114 = 4096*1+36 +## rv64: DTPMOD(.LANCHOR0) - . = 0x121f0 - 0x111c8 = 4096*1+40 +# LE32: 11114: auipc a0, 1 +# LE32-NEXT: addi a0, a0, 36 +# LE64: 111c8: auipc a0, 1 +# LE64-NEXT: addi a0, a0, 40 # LE-NEXT: auipc ra, 0 # LE-NEXT: jalr 24(ra) diff --git a/lld/test/ELF/riscv32-reloc-32-pic.s b/lld/test/ELF/riscv32-reloc-32-pic.s index 7583c1e937e..72bb16f12b0 100644 --- a/lld/test/ELF/riscv32-reloc-32-pic.s +++ b/lld/test/ELF/riscv32-reloc-32-pic.s @@ -7,11 +7,11 @@ ## R_RISCV_32 is an absolute relocation type. ## In PIC mode, it creates a relative relocation if the symbol is non-preemptable. -# NM: 00002004 d b +# NM: 000031fc d b # RELOC: .rela.dyn { -# RELOC-NEXT: 0x2004 R_RISCV_RELATIVE - 0x2004 -# RELOC-NEXT: 0x2000 R_RISCV_32 a 0 +# RELOC-NEXT: 0x31FC R_RISCV_RELATIVE - 0x31FC +# RELOC-NEXT: 0x31F8 R_RISCV_32 a 0 # RELOC-NEXT: } .globl a, b diff --git a/lld/test/ELF/riscv64-reloc-64-pic.s b/lld/test/ELF/riscv64-reloc-64-pic.s index 5bf504c5b6e..793d17f056b 100644 --- a/lld/test/ELF/riscv64-reloc-64-pic.s +++ b/lld/test/ELF/riscv64-reloc-64-pic.s @@ -7,11 +7,11 @@ ## R_RISCV_64 is an absolute relocation type. ## In PIC mode, it creates a relative relocation if the symbol is non-preemptable. -# NM: 0000000000002008 d b +# NM: 0000000000003350 d b # RELOC: .rela.dyn { -# RELOC-NEXT: 0x2008 R_RISCV_RELATIVE - 0x2008 -# RELOC-NEXT: 0x2000 R_RISCV_64 a 0 +# RELOC-NEXT: 0x3350 R_RISCV_RELATIVE - 0x3350 +# RELOC-NEXT: 0x3348 R_RISCV_64 a 0 # RELOC-NEXT: } .globl a, b |