https://github.com/kovdan01 updated https://github.com/llvm/llvm-project/pull/113816
>From de7feb154caec76b1ddf705689d1e7e8b4b2c491 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Fri, 25 Oct 2024 21:28:18 +0300 Subject: [PATCH 1/9] [PAC][lld][AArch64][ELF] Support signed GOT with tiny code model Support `R_AARCH64_AUTH_GOT_ADR_PREL_LO21` and `R_AARCH64_AUTH_GOT_LD_PREL19` GOT-generating relocations. --- lld/ELF/Arch/AArch64.cpp | 5 ++ lld/ELF/InputSection.cpp | 1 + lld/ELF/Relocations.cpp | 11 +-- lld/ELF/Relocations.h | 1 + lld/test/ELF/aarch64-got-relocations-pauth.s | 73 ++++++++++++++++++++ 5 files changed, 87 insertions(+), 4 deletions(-) diff --git a/lld/ELF/Arch/AArch64.cpp b/lld/ELF/Arch/AArch64.cpp index 9571e0e9566fc3..b63551d0f682e5 100644 --- a/lld/ELF/Arch/AArch64.cpp +++ b/lld/ELF/Arch/AArch64.cpp @@ -205,6 +205,9 @@ RelExpr AArch64::getRelExpr(RelType type, const Symbol &s, case R_AARCH64_AUTH_LD64_GOT_LO12_NC: case R_AARCH64_AUTH_GOT_ADD_LO12_NC: return RE_AARCH64_AUTH_GOT; + case R_AARCH64_AUTH_GOT_LD_PREL19: + case R_AARCH64_AUTH_GOT_ADR_PREL_LO21: + return RE_AARCH64_AUTH_GOT_PC; case R_AARCH64_LD64_GOTPAGE_LO15: return RE_AARCH64_GOT_PAGE; case R_AARCH64_ADR_GOT_PAGE: @@ -548,6 +551,7 @@ void AArch64::relocate(uint8_t *loc, const Relocation &rel, write32AArch64Addr(loc, val >> 12); break; case R_AARCH64_ADR_PREL_LO21: + case R_AARCH64_AUTH_GOT_ADR_PREL_LO21: checkInt(ctx, loc, val, 21, rel); write32AArch64Addr(loc, val); break; @@ -568,6 +572,7 @@ void AArch64::relocate(uint8_t *loc, const Relocation &rel, case R_AARCH64_CONDBR19: case R_AARCH64_LD_PREL_LO19: case R_AARCH64_GOT_LD_PREL19: + case R_AARCH64_AUTH_GOT_LD_PREL19: checkAlignment(ctx, loc, val, 4, rel); checkInt(ctx, loc, val, 21, rel); writeMaskedBits32le(loc, (val & 0x1FFFFC) << 3, 0x1FFFFC << 3); diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 26dc5c606f57f9..76af4ec4193a4f 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -817,6 +817,7 @@ uint64_t InputSectionBase::getRelocTargetVA(Ctx &ctx, const Relocation &r, case RE_AARCH64_GOT_PAGE: return r.sym->getGotVA(ctx) + a - getAArch64Page(ctx.in.got->getVA()); case R_GOT_PC: + case R_AARCH64_AUTH_GOT_PC: case R_RELAX_TLS_GD_TO_IE: return r.sym->getGotVA(ctx) + a - p; case R_GOTPLT_GOTREL: diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index 07cbdb7806fde1..690b4933bb809e 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -197,8 +197,9 @@ static bool needsPlt(RelExpr expr) { } bool lld::elf::needsGot(RelExpr expr) { - return oneof<R_GOT, RE_AARCH64_AUTH_GOT, R_GOT_OFF, RE_MIPS_GOT_LOCAL_PAGE, - RE_MIPS_GOT_OFF, RE_MIPS_GOT_OFF32, RE_AARCH64_GOT_PAGE_PC, + return oneof<R_GOT, RE_AARCH64_AUTH_GOT, RE_AARCH64_AUTH_GOT_PC, R_GOT_OFF, + RE_MIPS_GOT_LOCAL_PAGE, RE_MIPS_GOT_OFF, RE_MIPS_GOT_OFF32, + RE_AARCH64_GOT_PAGE_PC, RE_AARCH64_AUTH_GOT_PAGE_PC, RE_AARCH64_AUTH_GOT_PAGE_PC, R_GOT_PC, R_GOTPLT, RE_AARCH64_GOT_PAGE, RE_LOONGARCH_GOT, RE_LOONGARCH_GOT_PAGE_PC>( expr); @@ -981,7 +982,8 @@ bool RelocationScanner::isStaticLinkTimeConstant(RelExpr e, RelType type, R_GOTPLTONLY_PC, R_PLT_PC, R_PLT_GOTREL, R_PLT_GOTPLT, R_GOTPLT_GOTREL, R_GOTPLT_PC, RE_PPC32_PLTREL, RE_PPC64_CALL_PLT, RE_PPC64_RELAX_TOC, RE_RISCV_ADD, RE_AARCH64_GOT_PAGE, - RE_AARCH64_AUTH_GOT, RE_LOONGARCH_PLT_PAGE_PC, RE_LOONGARCH_GOT, + RE_AARCH64_AUTH_GOT, RE_AARCH64_AUTH_GOT_PC, + RE_LOONGARCH_PLT_PAGE_PC, RE_LOONGARCH_GOT, RE_LOONGARCH_GOT_PAGE_PC>(e)) return true; @@ -1096,7 +1098,8 @@ void RelocationScanner::processAux(RelExpr expr, RelType type, uint64_t offset, } else if (!sym.isTls() || ctx.arg.emachine != EM_LOONGARCH) { // Many LoongArch TLS relocs reuse the RE_LOONGARCH_GOT type, in which // case the NEEDS_GOT flag shouldn't get set. - if (expr == RE_AARCH64_AUTH_GOT || expr == RE_AARCH64_AUTH_GOT_PAGE_PC) + if (expr == RE_AARCH64_AUTH_GOT || expr == RE_AARCH64_AUTH_GOT_PAGE_PC || + expr == RE_AARCH64_AUTH_GOT_PAGE_PC) sym.setFlags(NEEDS_GOT | NEEDS_GOT_AUTH); else sym.setFlags(NEEDS_GOT | NEEDS_GOT_NONAUTH); diff --git a/lld/ELF/Relocations.h b/lld/ELF/Relocations.h index d993ab77adc3cc..fde25a230b72e6 100644 --- a/lld/ELF/Relocations.h +++ b/lld/ELF/Relocations.h @@ -95,6 +95,7 @@ enum RelExpr { RE_AARCH64_AUTH_GOT_PAGE_PC, RE_AARCH64_GOT_PAGE, RE_AARCH64_AUTH_GOT, + RE_AARCH64_AUTH_GOT_PC, RE_AARCH64_PAGE_PC, RE_AARCH64_RELAX_TLS_GD_TO_IE_PAGE_PC, RE_AARCH64_TLSDESC_PAGE, diff --git a/lld/test/ELF/aarch64-got-relocations-pauth.s b/lld/test/ELF/aarch64-got-relocations-pauth.s index a577e81ad0d035..f4db44e0bfb24e 100644 --- a/lld/test/ELF/aarch64-got-relocations-pauth.s +++ b/lld/test/ELF/aarch64-got-relocations-pauth.s @@ -77,6 +77,79 @@ _start: adrp x1, :got_auth:zed add x1, x1, :got_auth_lo12:zed +#--- ok-tiny.s + +# RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux ok-tiny.s -o ok-tiny.o + +# RUN: ld.lld ok-tiny.o a.so -pie -o external-tiny +# RUN: llvm-readelf -r -S -x .got external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY + +# RUN: ld.lld ok-tiny.o a.o -pie -o local-tiny +# RUN: llvm-readelf -r -S -x .got -s local-tiny | FileCheck %s --check-prefix=LOCAL-TINY + +# EXTERNAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend +# EXTERNAL-TINY-NEXT: 0000000000020380 000000010000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 +# EXTERNAL-TINY-NEXT: 0000000000020388 000000020000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 + +## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s) +# LOCAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend +# LOCAL-TINY-NEXT: 0000000000020320 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260 +# LOCAL-TINY-NEXT: 0000000000020328 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260 + +# EXTERNAL-TINY: Hex dump of section '.got': +# EXTERNAL-TINY-NEXT: 0x00020380 00000000 00000080 00000000 000000a0 +# ^^ +# 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA +# ^^ +# 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA + +# LOCAL-TINY: Symbol table '.symtab' contains {{.*}} entries: +# LOCAL-TINY: Num: Value Size Type Bind Vis Ndx Name +# LOCAL-TINY: 0000000000010260 0 FUNC GLOBAL DEFAULT 6 bar +# LOCAL-TINY: 0000000000010260 0 NOTYPE GLOBAL DEFAULT 6 zed + +# LOCAL-TINY: Hex dump of section '.got': +# LOCAL-TINY-NEXT: 0x00020320 00000000 00000080 00000000 000000a0 +# ^^ +# 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA +# ^^ +# 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA + +# RUN: llvm-objdump -d external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY-ASM + +# EXTERNAL-TINY-ASM: <_start>: +# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20380 +# EXTERNAL-TINY-ASM-NEXT: ldr x1, [x0] +# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20380 +# EXTERNAL-TINY-ASM-NEXT: ldr x1, 0x20380 +# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20388 +# EXTERNAL-TINY-ASM-NEXT: ldr x1, [x0] +# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20388 +# EXTERNAL-TINY-ASM-NEXT: ldr x1, 0x20388 + +# RUN: llvm-objdump -d local-tiny | FileCheck %s --check-prefix=LOCAL-TINY-ASM + +# LOCAL-TINY-ASM: <_start>: +# LOCAL-TINY-ASM-NEXT: adr x0, 0x20320 +# LOCAL-TINY-ASM-NEXT: ldr x1, [x0] +# LOCAL-TINY-ASM-NEXT: adr x0, 0x20320 +# LOCAL-TINY-ASM-NEXT: ldr x1, 0x20320 +# LOCAL-TINY-ASM-NEXT: adr x0, 0x20328 +# LOCAL-TINY-ASM-NEXT: ldr x1, [x0] +# LOCAL-TINY-ASM-NEXT: adr x0, 0x20328 +# LOCAL-TINY-ASM-NEXT: ldr x1, 0x20328 + +.globl _start +_start: + adr x0, :got_auth:bar + ldr x1, [x0] + adr x0, :got_auth:bar + ldr x1, :got_auth:bar + adr x0, :got_auth:zed + ldr x1, [x0] + adr x0, :got_auth:zed + ldr x1, :got_auth:zed + #--- err.s # RUN: llvm-mc -filetype=obj -triple=aarch64 err.s -o err.o # RUN: not ld.lld err.o a.so -pie -o /dev/null 2>&1 | FileCheck %s --check-prefix=ERR --implicit-check-not=error: >From e373e607d1ea3b5803dd553767a7d8c91ad4cf58 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Fri, 1 Nov 2024 13:18:43 +0300 Subject: [PATCH 2/9] Use `##` for comments in tests --- lld/test/ELF/aarch64-got-relocations-pauth.s | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lld/test/ELF/aarch64-got-relocations-pauth.s b/lld/test/ELF/aarch64-got-relocations-pauth.s index f4db44e0bfb24e..8914a1fdb7669e 100644 --- a/lld/test/ELF/aarch64-got-relocations-pauth.s +++ b/lld/test/ELF/aarch64-got-relocations-pauth.s @@ -98,10 +98,10 @@ _start: # EXTERNAL-TINY: Hex dump of section '.got': # EXTERNAL-TINY-NEXT: 0x00020380 00000000 00000080 00000000 000000a0 -# ^^ -# 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA -# ^^ -# 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA +## ^^ +## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA +## ^^ +## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA # LOCAL-TINY: Symbol table '.symtab' contains {{.*}} entries: # LOCAL-TINY: Num: Value Size Type Bind Vis Ndx Name @@ -110,10 +110,10 @@ _start: # LOCAL-TINY: Hex dump of section '.got': # LOCAL-TINY-NEXT: 0x00020320 00000000 00000080 00000000 000000a0 -# ^^ -# 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA -# ^^ -# 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA +## ^^ +## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA +## ^^ +## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA # RUN: llvm-objdump -d external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY-ASM >From 8b7edb493369440ed5b899618f079b66645fabf0 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Mon, 18 Nov 2024 08:33:11 +0300 Subject: [PATCH 3/9] Address review comments --- lld/test/ELF/aarch64-got-relocations-pauth.s | 44 ++++++-------------- 1 file changed, 13 insertions(+), 31 deletions(-) diff --git a/lld/test/ELF/aarch64-got-relocations-pauth.s b/lld/test/ELF/aarch64-got-relocations-pauth.s index 8914a1fdb7669e..bca7619ffcda23 100644 --- a/lld/test/ELF/aarch64-got-relocations-pauth.s +++ b/lld/test/ELF/aarch64-got-relocations-pauth.s @@ -79,7 +79,7 @@ _start: #--- ok-tiny.s -# RUN: llvm-mc -filetype=obj -triple=aarch64-none-linux ok-tiny.s -o ok-tiny.o +# RUN: llvm-mc -filetype=obj -triple=aarch64 ok-tiny.s -o ok-tiny.o # RUN: ld.lld ok-tiny.o a.so -pie -o external-tiny # RUN: llvm-readelf -r -S -x .got external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY @@ -88,16 +88,16 @@ _start: # RUN: llvm-readelf -r -S -x .got -s local-tiny | FileCheck %s --check-prefix=LOCAL-TINY # EXTERNAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend -# EXTERNAL-TINY-NEXT: 0000000000020380 000000010000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 -# EXTERNAL-TINY-NEXT: 0000000000020388 000000020000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 +# EXTERNAL-TINY-NEXT: 0000000000020368 000000010000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 +# EXTERNAL-TINY-NEXT: 0000000000020370 000000020000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 ## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s) # LOCAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend -# LOCAL-TINY-NEXT: 0000000000020320 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260 -# LOCAL-TINY-NEXT: 0000000000020328 0000000000000411 R_AARCH64_AUTH_RELATIVE 10260 +# LOCAL-TINY-NEXT: 0000000000020308 0000000000000411 R_AARCH64_AUTH_RELATIVE 10248 +# LOCAL-TINY-NEXT: 0000000000020310 0000000000000411 R_AARCH64_AUTH_RELATIVE 10248 # EXTERNAL-TINY: Hex dump of section '.got': -# EXTERNAL-TINY-NEXT: 0x00020380 00000000 00000080 00000000 000000a0 +# EXTERNAL-TINY-NEXT: 0x00020368 00000000 00000080 00000000 000000a0 ## ^^ ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA ## ^^ @@ -105,11 +105,11 @@ _start: # LOCAL-TINY: Symbol table '.symtab' contains {{.*}} entries: # LOCAL-TINY: Num: Value Size Type Bind Vis Ndx Name -# LOCAL-TINY: 0000000000010260 0 FUNC GLOBAL DEFAULT 6 bar -# LOCAL-TINY: 0000000000010260 0 NOTYPE GLOBAL DEFAULT 6 zed +# LOCAL-TINY: 0000000000010248 0 FUNC GLOBAL DEFAULT 6 bar +# LOCAL-TINY: 0000000000010248 0 NOTYPE GLOBAL DEFAULT 6 zed # LOCAL-TINY: Hex dump of section '.got': -# LOCAL-TINY-NEXT: 0x00020320 00000000 00000080 00000000 000000a0 +# LOCAL-TINY-NEXT: 0x00020308 00000000 00000080 00000000 000000a0 ## ^^ ## 0b10000000 bit 63 address diversity = true, bits 61..60 key = IA ## ^^ @@ -118,36 +118,18 @@ _start: # RUN: llvm-objdump -d external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY-ASM # EXTERNAL-TINY-ASM: <_start>: -# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20380 -# EXTERNAL-TINY-ASM-NEXT: ldr x1, [x0] -# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20380 -# EXTERNAL-TINY-ASM-NEXT: ldr x1, 0x20380 -# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20388 -# EXTERNAL-TINY-ASM-NEXT: ldr x1, [x0] -# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20388 -# EXTERNAL-TINY-ASM-NEXT: ldr x1, 0x20388 +# EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20368 +# EXTERNAL-TINY-ASM-NEXT: ldr x1, 0x20370 # RUN: llvm-objdump -d local-tiny | FileCheck %s --check-prefix=LOCAL-TINY-ASM # LOCAL-TINY-ASM: <_start>: -# LOCAL-TINY-ASM-NEXT: adr x0, 0x20320 -# LOCAL-TINY-ASM-NEXT: ldr x1, [x0] -# LOCAL-TINY-ASM-NEXT: adr x0, 0x20320 -# LOCAL-TINY-ASM-NEXT: ldr x1, 0x20320 -# LOCAL-TINY-ASM-NEXT: adr x0, 0x20328 -# LOCAL-TINY-ASM-NEXT: ldr x1, [x0] -# LOCAL-TINY-ASM-NEXT: adr x0, 0x20328 -# LOCAL-TINY-ASM-NEXT: ldr x1, 0x20328 +# LOCAL-TINY-ASM-NEXT: adr x0, 0x20308 +# LOCAL-TINY-ASM-NEXT: ldr x1, 0x20310 .globl _start _start: adr x0, :got_auth:bar - ldr x1, [x0] - adr x0, :got_auth:bar - ldr x1, :got_auth:bar - adr x0, :got_auth:zed - ldr x1, [x0] - adr x0, :got_auth:zed ldr x1, :got_auth:zed #--- err.s >From c6803d676fc6c51e1fd4658f10e046ea4ded8679 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Mon, 2 Dec 2024 01:26:30 +0300 Subject: [PATCH 4/9] Remove unneeded blank line in test --- lld/test/ELF/aarch64-got-relocations-pauth.s | 1 - 1 file changed, 1 deletion(-) diff --git a/lld/test/ELF/aarch64-got-relocations-pauth.s b/lld/test/ELF/aarch64-got-relocations-pauth.s index bca7619ffcda23..9d2b4f26d2b3b6 100644 --- a/lld/test/ELF/aarch64-got-relocations-pauth.s +++ b/lld/test/ELF/aarch64-got-relocations-pauth.s @@ -78,7 +78,6 @@ _start: add x1, x1, :got_auth_lo12:zed #--- ok-tiny.s - # RUN: llvm-mc -filetype=obj -triple=aarch64 ok-tiny.s -o ok-tiny.o # RUN: ld.lld ok-tiny.o a.so -pie -o external-tiny >From 58e4c495503170df8fedb5cc0904fb28c2ff6717 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Wed, 4 Dec 2024 14:50:34 +0300 Subject: [PATCH 5/9] Fix build after #118424 --- lld/ELF/InputSection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 76af4ec4193a4f..efa7ba3e7cb063 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -817,7 +817,7 @@ uint64_t InputSectionBase::getRelocTargetVA(Ctx &ctx, const Relocation &r, case RE_AARCH64_GOT_PAGE: return r.sym->getGotVA(ctx) + a - getAArch64Page(ctx.in.got->getVA()); case R_GOT_PC: - case R_AARCH64_AUTH_GOT_PC: + case RE_AARCH64_AUTH_GOT_PC: case R_RELAX_TLS_GD_TO_IE: return r.sym->getGotVA(ctx) + a - p; case R_GOTPLT_GOTREL: >From d471a0779c9c700c24277cfd28671dd45d12112e Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Wed, 4 Dec 2024 14:50:52 +0300 Subject: [PATCH 6/9] Change reloc codes in tests (see also #118214) --- lld/test/ELF/aarch64-got-relocations-pauth.s | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lld/test/ELF/aarch64-got-relocations-pauth.s b/lld/test/ELF/aarch64-got-relocations-pauth.s index 9d2b4f26d2b3b6..ddeac471ca7a48 100644 --- a/lld/test/ELF/aarch64-got-relocations-pauth.s +++ b/lld/test/ELF/aarch64-got-relocations-pauth.s @@ -87,8 +87,8 @@ _start: # RUN: llvm-readelf -r -S -x .got -s local-tiny | FileCheck %s --check-prefix=LOCAL-TINY # EXTERNAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend -# EXTERNAL-TINY-NEXT: 0000000000020368 000000010000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 -# EXTERNAL-TINY-NEXT: 0000000000020370 000000020000e201 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 +# EXTERNAL-TINY-NEXT: 0000000000020368 0000000100000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 +# EXTERNAL-TINY-NEXT: 0000000000020370 0000000200000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 zed + 0 ## Symbol's values for bar and zed are equal since they contain no content (see Inputs/shared.s) # LOCAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend >From de5e2ae2f4bf15870c391cd8e3300c956d649d8b Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Wed, 4 Dec 2024 15:02:51 +0300 Subject: [PATCH 7/9] Fix formatting --- lld/ELF/Relocations.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index 690b4933bb809e..7ed80b39a75a88 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -975,16 +975,15 @@ bool RelocationScanner::isStaticLinkTimeConstant(RelExpr e, RelType type, const Symbol &sym, uint64_t relOff) const { // These expressions always compute a constant - if (oneof<R_GOTPLT, R_GOT_OFF, R_RELAX_HINT, RE_MIPS_GOT_LOCAL_PAGE, - RE_MIPS_GOTREL, RE_MIPS_GOT_OFF, RE_MIPS_GOT_OFF32, - RE_MIPS_GOT_GP_PC, RE_AARCH64_GOT_PAGE_PC, - RE_AARCH64_AUTH_GOT_PAGE_PC, R_GOT_PC, R_GOTONLY_PC, - R_GOTPLTONLY_PC, R_PLT_PC, R_PLT_GOTREL, R_PLT_GOTPLT, - R_GOTPLT_GOTREL, R_GOTPLT_PC, RE_PPC32_PLTREL, RE_PPC64_CALL_PLT, - RE_PPC64_RELAX_TOC, RE_RISCV_ADD, RE_AARCH64_GOT_PAGE, - RE_AARCH64_AUTH_GOT, RE_AARCH64_AUTH_GOT_PC, - RE_LOONGARCH_PLT_PAGE_PC, RE_LOONGARCH_GOT, - RE_LOONGARCH_GOT_PAGE_PC>(e)) + if (oneof< + R_GOTPLT, R_GOT_OFF, R_RELAX_HINT, RE_MIPS_GOT_LOCAL_PAGE, + RE_MIPS_GOTREL, RE_MIPS_GOT_OFF, RE_MIPS_GOT_OFF32, RE_MIPS_GOT_GP_PC, + RE_AARCH64_GOT_PAGE_PC, RE_AARCH64_AUTH_GOT_PAGE_PC, R_GOT_PC, + R_GOTONLY_PC, R_GOTPLTONLY_PC, R_PLT_PC, R_PLT_GOTREL, R_PLT_GOTPLT, + R_GOTPLT_GOTREL, R_GOTPLT_PC, RE_PPC32_PLTREL, RE_PPC64_CALL_PLT, + RE_PPC64_RELAX_TOC, RE_RISCV_ADD, RE_AARCH64_GOT_PAGE, + RE_AARCH64_AUTH_GOT, RE_AARCH64_AUTH_GOT_PC, RE_LOONGARCH_PLT_PAGE_PC, + RE_LOONGARCH_GOT, RE_LOONGARCH_GOT_PAGE_PC>(e)) return true; // These never do, except if the entire file is position dependent or if >From 1a4f677e670d569e63f8bcb9ae9dfc39c67024d0 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Sun, 8 Dec 2024 16:50:07 +0300 Subject: [PATCH 8/9] Fix typo error --- lld/ELF/Relocations.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index 7ed80b39a75a88..77b90172bc1c27 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -1098,7 +1098,7 @@ void RelocationScanner::processAux(RelExpr expr, RelType type, uint64_t offset, // Many LoongArch TLS relocs reuse the RE_LOONGARCH_GOT type, in which // case the NEEDS_GOT flag shouldn't get set. if (expr == RE_AARCH64_AUTH_GOT || expr == RE_AARCH64_AUTH_GOT_PAGE_PC || - expr == RE_AARCH64_AUTH_GOT_PAGE_PC) + expr == RE_AARCH64_AUTH_GOT_PC) sym.setFlags(NEEDS_GOT | NEEDS_GOT_AUTH); else sym.setFlags(NEEDS_GOT | NEEDS_GOT_NONAUTH); >From 7d949458a8c0ce85e52f558159298090fa3bf529 Mon Sep 17 00:00:00 2001 From: Daniil Kovalev <dkova...@accesssoftek.com> Date: Sun, 15 Dec 2024 18:50:50 +0300 Subject: [PATCH 9/9] Do not use terms 'external' and 'local' --- lld/test/ELF/aarch64-got-relocations-pauth.s | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lld/test/ELF/aarch64-got-relocations-pauth.s b/lld/test/ELF/aarch64-got-relocations-pauth.s index ddeac471ca7a48..5c03a226dd9021 100644 --- a/lld/test/ELF/aarch64-got-relocations-pauth.s +++ b/lld/test/ELF/aarch64-got-relocations-pauth.s @@ -80,11 +80,11 @@ _start: #--- ok-tiny.s # RUN: llvm-mc -filetype=obj -triple=aarch64 ok-tiny.s -o ok-tiny.o -# RUN: ld.lld ok-tiny.o a.so -pie -o external-tiny -# RUN: llvm-readelf -r -S -x .got external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY +# RUN: ld.lld ok-tiny.o a.so -pie -o tiny1 +# RUN: llvm-readelf -r -S -x .got tiny1 | FileCheck %s --check-prefix=EXTERNAL-TINY -# RUN: ld.lld ok-tiny.o a.o -pie -o local-tiny -# RUN: llvm-readelf -r -S -x .got -s local-tiny | FileCheck %s --check-prefix=LOCAL-TINY +# RUN: ld.lld ok-tiny.o a.o -pie -o tiny2 +# RUN: llvm-readelf -r -S -x .got -s tiny2 | FileCheck %s --check-prefix=LOCAL-TINY # EXTERNAL-TINY: Offset Info Type Symbol's Value Symbol's Name + Addend # EXTERNAL-TINY-NEXT: 0000000000020368 0000000100000412 R_AARCH64_AUTH_GLOB_DAT 0000000000000000 bar + 0 @@ -114,13 +114,13 @@ _start: ## ^^ ## 0b10100000 bit 63 address diversity = true, bits 61..60 key = DA -# RUN: llvm-objdump -d external-tiny | FileCheck %s --check-prefix=EXTERNAL-TINY-ASM +# RUN: llvm-objdump -d tiny1 | FileCheck %s --check-prefix=EXTERNAL-TINY-ASM # EXTERNAL-TINY-ASM: <_start>: # EXTERNAL-TINY-ASM-NEXT: adr x0, 0x20368 # EXTERNAL-TINY-ASM-NEXT: ldr x1, 0x20370 -# RUN: llvm-objdump -d local-tiny | FileCheck %s --check-prefix=LOCAL-TINY-ASM +# RUN: llvm-objdump -d tiny2 | FileCheck %s --check-prefix=LOCAL-TINY-ASM # LOCAL-TINY-ASM: <_start>: # LOCAL-TINY-ASM-NEXT: adr x0, 0x20308 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits