From db06d3213eb30934f3ebd6fe7a43c10353f52a59 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 21 Mar 2024 20:24:29 +0800 Subject: [PATCH 1/4] Disable adlt activation print. Change-Id: I6744fd00cf5da84076bdfada8df28d76170f8533 Signed-off-by: Anton Volkov --- lld/ELF/DriverUtils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lld/ELF/DriverUtils.cpp b/lld/ELF/DriverUtils.cpp index db42b6a36028..0145d9b9ba0c 100644 --- a/lld/ELF/DriverUtils.cpp +++ b/lld/ELF/DriverUtils.cpp @@ -68,7 +68,7 @@ static void handleAdltOption(opt::InputArgList &args) { auto *arg = args.getLastArg(OPT_adlt); if (!arg) return; - lld::outs() << "adlt is active\n"; + // slld::outs() << "adlt is active\n"; } static cl::TokenizerCallback getQuotingStyle(opt::InputArgList &args) { -- Gitee From 15e1b621c71de5bcf3ae5e23fcd5be903eb63cb9 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 21 Mar 2024 21:59:46 +0800 Subject: [PATCH 2/4] [ADLT] Fix duplicated DT_NEEDED. Change-Id: I6c415d656a34220501ba3eff1413bcd390d3e8a5 Signed-off-by: Anton Volkov --- lld/ELF/SyntheticSections.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 29135ddb16d7..8bbfb06d0fe2 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -1398,15 +1398,14 @@ DynamicSection::computeContents() { part.dynStrTab->addString(config->rpath)); if (config->adlt) { - StringRef prevNeeded; for (InputFile *file : ctx->sharedFilesExtended) { auto *f = cast>(file); for (size_t i = 0; i < f->dtNeeded.size(); i++) { - StringRef needed = f->dtNeeded[i]; - if (prevNeeded == needed) - continue; - addInt(DT_NEEDED, part.dynStrTab->addString(needed)); - prevNeeded = needed; + auto tag = DT_NEEDED; + auto val = part.dynStrTab->addString(f->dtNeeded[i]); + if (llvm::find(entries, std::pair{tag, val}) == + entries.end()) + addInt(tag, val); } } addInt(DT_SONAME, part.dynStrTab->addString(config->outputFile)); -- Gitee From 5587bb007a7e08bf18646376852ead291e620ba2 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 21 Mar 2024 22:02:36 +0800 Subject: [PATCH 3/4] [ADLT] Fix set export dynamic. Change-Id: Ib50f2c8bdb7a41fe091b7507ab918a494b5d1bd9 Signed-off-by: Anton Volkov --- lld/ELF/InputFiles.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 25d5fe886bd5..82b685c86a2f 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -1083,6 +1083,8 @@ void ObjFile::initializeSymbols(const object::ELFFile &obj) { Symbol *sym = symbols[i]; sym->isUsedInRegularObj = true; + if (config->adlt) + sym->exportDynamic = true; if (LLVM_UNLIKELY(eSym.st_shndx == SHN_COMMON)) { if (value == 0 || value >= UINT32_MAX) fatal(toString(this) + ": common symbol '" + sym->getName() + @@ -1111,6 +1113,8 @@ void ObjFile::initializeSymbols(const object::ELFFile &obj) { eSym.getType()}); sym->isUsedInRegularObj = true; sym->referenced = true; + if (config->adlt) + sym->exportDynamic = true; } } -- Gitee From fd56c1d37c4db358e63e26b3af964d2557ba8970 Mon Sep 17 00:00:00 2001 From: Anton Volkov Date: Thu, 21 Mar 2024 23:03:22 +0800 Subject: [PATCH 4/4] [ADLT] Fix push reloc after PLT opt Change-Id: I2b7c07be3b11089f4d030b97a169c306e23f4fc7 Signed-off-by: Anton Volkov --- lld/ELF/Relocations.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index ead89a3f74bc..ec3228a986cf 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -1415,6 +1415,9 @@ void RelocationScanner::processForADLT(const RelTy &rel, Relocation *r, lld::outs() << "[ADLT] R_AARCH64_ADR_GOT_PAGE: sym not in GOT! "; r->expr = R_PC; // prev: R_AARCH64_GOT_PAGE_PC || R_AARCH64_GOT_PAGE || // R_GOT || R_GOT_PC + // TODO: replace reloc R_AARCH64_ADR_GOT_PAGE + sec.relocations.push_back(*r); + return; } LLVM_FALLTHROUGH; case R_AARCH64_LD64_GOT_LO12_NC: -- Gitee