-
Notifications
You must be signed in to change notification settings - Fork 13.5k
[ELF] Change Ctx::target to unique_ptr #111260
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
also rename `TargetInfo *getXXXTargetInfo` to `void setXXXTargetInfo` and change it to set `ctx.target`. This ensures that when `ctx` becomes a local variable, two lld invocations will not reuse the function-local static variable.
@llvm/pr-subscribers-lld @llvm/pr-subscribers-backend-hexagon Author: Fangrui Song (MaskRay) Changesalso rename Full diff: https://github.com/llvm/llvm-project/pull/111260.diff 19 Files Affected:
diff --git a/lld/ELF/Arch/AArch64.cpp b/lld/ELF/Arch/AArch64.cpp
index 45d429c915a6ee..2bf9d499b44ffe 100644
--- a/lld/ELF/Arch/AArch64.cpp
+++ b/lld/ELF/Arch/AArch64.cpp
@@ -1208,12 +1208,10 @@ void lld::elf::createTaggedSymbols(const SmallVector<ELFFileBase *, 0> &files) {
}
}
-TargetInfo *elf::getAArch64TargetInfo(Ctx &ctx) {
+void elf::setAArch64TargetInfo(Ctx &ctx) {
if ((ctx.arg.andFeatures & GNU_PROPERTY_AARCH64_FEATURE_1_BTI) ||
- ctx.arg.zPacPlt) {
- static AArch64BtiPac t(ctx);
- return &t;
- }
- static AArch64 t(ctx);
- return &t;
+ ctx.arg.zPacPlt)
+ ctx.target.reset(new AArch64BtiPac(ctx));
+ else
+ ctx.target.reset(new AArch64(ctx));
}
diff --git a/lld/ELF/Arch/AMDGPU.cpp b/lld/ELF/Arch/AMDGPU.cpp
index 29b21f1b953989..99e7cfe6e76ba9 100644
--- a/lld/ELF/Arch/AMDGPU.cpp
+++ b/lld/ELF/Arch/AMDGPU.cpp
@@ -219,7 +219,4 @@ int64_t AMDGPU::getImplicitAddend(const uint8_t *buf, RelType type) const {
}
}
-TargetInfo *elf::getAMDGPUTargetInfo(Ctx &ctx) {
- static AMDGPU target(ctx);
- return ⌖
-}
+void elf::setAMDGPUTargetInfo(Ctx &ctx) { ctx.target.reset(new AMDGPU(ctx)); }
diff --git a/lld/ELF/Arch/ARM.cpp b/lld/ELF/Arch/ARM.cpp
index d22ac540c92a1e..267eeec410ec2c 100644
--- a/lld/ELF/Arch/ARM.cpp
+++ b/lld/ELF/Arch/ARM.cpp
@@ -1533,10 +1533,7 @@ template <typename ELFT> void elf::writeARMCmseImportLib() {
"': " + toString(std::move(e)));
}
-TargetInfo *elf::getARMTargetInfo(Ctx &ctx) {
- static ARM target(ctx);
- return ⌖
-}
+void elf::setARMTargetInfo(Ctx &ctx) { ctx.target.reset(new ARM(ctx)); }
template void elf::writeARMCmseImportLib<ELF32LE>();
template void elf::writeARMCmseImportLib<ELF32BE>();
diff --git a/lld/ELF/Arch/AVR.cpp b/lld/ELF/Arch/AVR.cpp
index cc2d9fa3daf798..bb88dfe7c7a4c6 100644
--- a/lld/ELF/Arch/AVR.cpp
+++ b/lld/ELF/Arch/AVR.cpp
@@ -267,10 +267,7 @@ void AVR::relocate(uint8_t *loc, const Relocation &rel, uint64_t val) const {
}
}
-TargetInfo *elf::getAVRTargetInfo(Ctx &ctx) {
- static AVR target(ctx);
- return ⌖
-}
+void elf::setAVRTargetInfo(Ctx &ctx) { ctx.target.reset(new AVR(ctx)); }
static uint32_t getEFlags(InputFile *file) {
return cast<ObjFile<ELF32LE>>(file)->getObj().getHeader().e_flags;
diff --git a/lld/ELF/Arch/Hexagon.cpp b/lld/ELF/Arch/Hexagon.cpp
index d689fc2a152101..ad5a3cd646e65b 100644
--- a/lld/ELF/Arch/Hexagon.cpp
+++ b/lld/ELF/Arch/Hexagon.cpp
@@ -404,7 +404,4 @@ int64_t Hexagon::getImplicitAddend(const uint8_t *buf, RelType type) const {
}
}
-TargetInfo *elf::getHexagonTargetInfo(Ctx &ctx) {
- static Hexagon target(ctx);
- return ⌖
-}
+void elf::setHexagonTargetInfo(Ctx &ctx) { ctx.target.reset(new Hexagon(ctx)); }
diff --git a/lld/ELF/Arch/LoongArch.cpp b/lld/ELF/Arch/LoongArch.cpp
index 3e86488063f0e4..8c4eaf5d75342a 100644
--- a/lld/ELF/Arch/LoongArch.cpp
+++ b/lld/ELF/Arch/LoongArch.cpp
@@ -893,7 +893,6 @@ void LoongArch::finalizeRelax(int passes) const {
}
}
-TargetInfo *elf::getLoongArchTargetInfo(Ctx &ctx) {
- static LoongArch target(ctx);
- return ⌖
+void elf::setLoongArchTargetInfo(Ctx &ctx) {
+ ctx.target.reset(new LoongArch(ctx));
}
diff --git a/lld/ELF/Arch/MSP430.cpp b/lld/ELF/Arch/MSP430.cpp
index 7563f7cfaa02c6..7eb281bec8d965 100644
--- a/lld/ELF/Arch/MSP430.cpp
+++ b/lld/ELF/Arch/MSP430.cpp
@@ -88,7 +88,4 @@ void MSP430::relocate(uint8_t *loc, const Relocation &rel, uint64_t val) const {
}
}
-TargetInfo *elf::getMSP430TargetInfo(Ctx &ctx) {
- static MSP430 target(ctx);
- return ⌖
-}
+void elf::setMSP430TargetInfo(Ctx &ctx) { ctx.target.reset(new MSP430(ctx)); }
diff --git a/lld/ELF/Arch/Mips.cpp b/lld/ELF/Arch/Mips.cpp
index 0e65df347031ef..a584d2ccc7cdaa 100644
--- a/lld/ELF/Arch/Mips.cpp
+++ b/lld/ELF/Arch/Mips.cpp
@@ -778,23 +778,23 @@ template <class ELFT> bool elf::isMipsPIC(const Defined *sym) {
return cast<ObjFile<ELFT>>(file)->getObj().getHeader().e_flags & EF_MIPS_PIC;
}
-TargetInfo *elf::getMipsTargetInfo(Ctx &ctx) {
+void elf::setMipsTargetInfo(Ctx &ctx) {
switch (ctx.arg.ekind) {
case ELF32LEKind: {
- static MIPS<ELF32LE> t(ctx);
- return &t;
+ ctx.target.reset(new MIPS<ELF32LE>(ctx));
+ return;
}
case ELF32BEKind: {
- static MIPS<ELF32BE> t(ctx);
- return &t;
+ ctx.target.reset(new MIPS<ELF32BE>(ctx));
+ return;
}
case ELF64LEKind: {
- static MIPS<ELF64LE> t(ctx);
- return &t;
+ ctx.target.reset(new MIPS<ELF64LE>(ctx));
+ return;
}
case ELF64BEKind: {
- static MIPS<ELF64BE> t(ctx);
- return &t;
+ ctx.target.reset(new MIPS<ELF64BE>(ctx));
+ return;
}
default:
llvm_unreachable("unsupported target");
diff --git a/lld/ELF/Arch/PPC.cpp b/lld/ELF/Arch/PPC.cpp
index 2d6355fac13e63..4a2863f862c5fe 100644
--- a/lld/ELF/Arch/PPC.cpp
+++ b/lld/ELF/Arch/PPC.cpp
@@ -525,7 +525,4 @@ void PPC::relocateAlloc(InputSectionBase &sec, uint8_t *buf) const {
}
}
-TargetInfo *elf::getPPCTargetInfo(Ctx &ctx) {
- static PPC target(ctx);
- return ⌖
-}
+void elf::setPPCTargetInfo(Ctx &ctx) { ctx.target.reset(new PPC(ctx)); }
diff --git a/lld/ELF/Arch/PPC64.cpp b/lld/ELF/Arch/PPC64.cpp
index da2a5aeed43b06..c284ece9ae1360 100644
--- a/lld/ELF/Arch/PPC64.cpp
+++ b/lld/ELF/Arch/PPC64.cpp
@@ -1750,7 +1750,4 @@ bool PPC64::adjustPrologueForCrossSplitStack(uint8_t *loc, uint8_t *end,
return true;
}
-TargetInfo *elf::getPPC64TargetInfo(Ctx &ctx) {
- static PPC64 target(ctx);
- return ⌖
-}
+void elf::setPPC64TargetInfo(Ctx &ctx) { ctx.target.reset(new PPC64(ctx)); }
diff --git a/lld/ELF/Arch/RISCV.cpp b/lld/ELF/Arch/RISCV.cpp
index f13000fcadec2b..0f09159d8c4f69 100644
--- a/lld/ELF/Arch/RISCV.cpp
+++ b/lld/ELF/Arch/RISCV.cpp
@@ -1328,7 +1328,4 @@ void elf::mergeRISCVAttributesSections(Ctx &) {
mergeAttributesSection(sections));
}
-TargetInfo *elf::getRISCVTargetInfo(Ctx &ctx) {
- static RISCV target(ctx);
- return ⌖
-}
+void elf::setRISCVTargetInfo(Ctx &ctx) { ctx.target.reset(new RISCV(ctx)); }
diff --git a/lld/ELF/Arch/SPARCV9.cpp b/lld/ELF/Arch/SPARCV9.cpp
index 15c7c9c28b2ed8..aa56ac62402e29 100644
--- a/lld/ELF/Arch/SPARCV9.cpp
+++ b/lld/ELF/Arch/SPARCV9.cpp
@@ -193,7 +193,4 @@ void SPARCV9::writePlt(uint8_t *buf, const Symbol & /*sym*/,
relocateNoSym(buf + 4, R_SPARC_WDISP19, -(off + 4 - pltEntrySize));
}
-TargetInfo *elf::getSPARCV9TargetInfo(Ctx &ctx) {
- static SPARCV9 target(ctx);
- return ⌖
-}
+void elf::setSPARCV9TargetInfo(Ctx &ctx) { ctx.target.reset(new SPARCV9(ctx)); }
diff --git a/lld/ELF/Arch/SystemZ.cpp b/lld/ELF/Arch/SystemZ.cpp
index fc87103165fd4d..02091fbd71d4df 100644
--- a/lld/ELF/Arch/SystemZ.cpp
+++ b/lld/ELF/Arch/SystemZ.cpp
@@ -601,7 +601,4 @@ void SystemZ::relocate(uint8_t *loc, const Relocation &rel,
}
}
-TargetInfo *elf::getSystemZTargetInfo(Ctx &ctx) {
- static SystemZ t(ctx);
- return &t;
-}
+void elf::setSystemZTargetInfo(Ctx &ctx) { ctx.target.reset(new SystemZ(ctx)); }
diff --git a/lld/ELF/Arch/X86.cpp b/lld/ELF/Arch/X86.cpp
index 0a16ca24fcb318..cfbebb0096abbf 100644
--- a/lld/ELF/Arch/X86.cpp
+++ b/lld/ELF/Arch/X86.cpp
@@ -708,21 +708,17 @@ void RetpolineNoPic::writePlt(uint8_t *buf, const Symbol &sym,
write32le(buf + 22, -off - 26);
}
-TargetInfo *elf::getX86TargetInfo(Ctx &ctx) {
+void elf::setX86TargetInfo(Ctx &ctx) {
if (ctx.arg.zRetpolineplt) {
- if (ctx.arg.isPic) {
- static RetpolinePic t(ctx);
- return &t;
- }
- static RetpolineNoPic t(ctx);
- return &t;
- }
-
- if (ctx.arg.andFeatures & GNU_PROPERTY_X86_FEATURE_1_IBT) {
- static IntelIBT t(ctx);
- return &t;
+ if (ctx.arg.isPic)
+ ctx.target.reset(new RetpolinePic(ctx));
+ else
+ ctx.target.reset(new RetpolineNoPic(ctx));
+ return;
}
- static X86 t(ctx);
- return &t;
+ if (ctx.arg.andFeatures & GNU_PROPERTY_X86_FEATURE_1_IBT)
+ ctx.target.reset(new IntelIBT(ctx));
+ else
+ ctx.target.reset(new X86(ctx));
}
diff --git a/lld/ELF/Arch/X86_64.cpp b/lld/ELF/Arch/X86_64.cpp
index d58d0a2961d617..8e491eb85676a1 100644
--- a/lld/ELF/Arch/X86_64.cpp
+++ b/lld/ELF/Arch/X86_64.cpp
@@ -1239,21 +1239,17 @@ void RetpolineZNow::writePlt(uint8_t *buf, const Symbol &sym,
write32le(buf + 8, ctx.in.plt->getVA() - pltEntryAddr - 12);
}
-TargetInfo *elf::getX86_64TargetInfo(Ctx &ctx) {
+void elf::setX86_64TargetInfo(Ctx &ctx) {
if (ctx.arg.zRetpolineplt) {
- if (ctx.arg.zNow) {
- static RetpolineZNow t(ctx);
- return &t;
- }
- static Retpoline t(ctx);
- return &t;
- }
-
- if (ctx.arg.andFeatures & GNU_PROPERTY_X86_FEATURE_1_IBT) {
- static IntelIBT t(ctx);
- return &t;
+ if (ctx.arg.zNow)
+ ctx.target.reset(new RetpolineZNow(ctx));
+ else
+ ctx.target.reset(new Retpoline(ctx));
+ return;
}
- static X86_64 t(ctx);
- return &t;
+ if (ctx.arg.andFeatures & GNU_PROPERTY_X86_FEATURE_1_IBT)
+ ctx.target.reset(new IntelIBT(ctx));
+ else
+ ctx.target.reset(new X86_64(ctx));
}
diff --git a/lld/ELF/Config.h b/lld/ELF/Config.h
index 1d113375143a51..ac6cdf0b07126b 100644
--- a/lld/ELF/Config.h
+++ b/lld/ELF/Config.h
@@ -542,7 +542,7 @@ struct Ctx {
Config arg;
LinkerDriver driver;
LinkerScript *script;
- TargetInfo *target;
+ std::unique_ptr<TargetInfo> target;
// These variables are initialized by Writer and should not be used before
// Writer is initialized.
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 373505a9e965b7..4337be17fe2fca 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -98,7 +98,7 @@ void Ctx::reset() {
driver.~LinkerDriver();
new (&driver) LinkerDriver(*this);
script = nullptr;
- target = nullptr;
+ target.reset();
bufferStart = nullptr;
mainPart = nullptr;
@@ -3122,7 +3122,7 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &args) {
// The Target instance handles target-specific stuff, such as applying
// relocations or writing a PLT section. It also contains target-dependent
// values such as a default image base address.
- ctx.target = getTarget(ctx);
+ setTarget(ctx);
ctx.arg.eflags = ctx.target->calcEFlags();
// maxPageSize (sometimes called abi page size) is the maximum page size that
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp
index d5d11b9549e03f..aae8b545d14fc3 100644
--- a/lld/ELF/Target.cpp
+++ b/lld/ELF/Target.cpp
@@ -45,39 +45,39 @@ std::string lld::toString(RelType type) {
return std::string(s);
}
-TargetInfo *elf::getTarget(Ctx &ctx) {
+void elf::setTarget(Ctx &ctx) {
switch (ctx.arg.emachine) {
case EM_386:
case EM_IAMCU:
- return getX86TargetInfo(ctx);
+ return setX86TargetInfo(ctx);
case EM_AARCH64:
- return getAArch64TargetInfo(ctx);
+ return setAArch64TargetInfo(ctx);
case EM_AMDGPU:
- return getAMDGPUTargetInfo(ctx);
+ return setAMDGPUTargetInfo(ctx);
case EM_ARM:
- return getARMTargetInfo(ctx);
+ return setARMTargetInfo(ctx);
case EM_AVR:
- return getAVRTargetInfo(ctx);
+ return setAVRTargetInfo(ctx);
case EM_HEXAGON:
- return getHexagonTargetInfo(ctx);
+ return setHexagonTargetInfo(ctx);
case EM_LOONGARCH:
- return getLoongArchTargetInfo(ctx);
+ return setLoongArchTargetInfo(ctx);
case EM_MIPS:
- return getMipsTargetInfo(ctx);
+ return setMipsTargetInfo(ctx);
case EM_MSP430:
- return getMSP430TargetInfo(ctx);
+ return setMSP430TargetInfo(ctx);
case EM_PPC:
- return getPPCTargetInfo(ctx);
+ return setPPCTargetInfo(ctx);
case EM_PPC64:
- return getPPC64TargetInfo(ctx);
+ return setPPC64TargetInfo(ctx);
case EM_RISCV:
- return getRISCVTargetInfo(ctx);
+ return setRISCVTargetInfo(ctx);
case EM_SPARCV9:
- return getSPARCV9TargetInfo(ctx);
+ return setSPARCV9TargetInfo(ctx);
case EM_S390:
- return getSystemZTargetInfo(ctx);
+ return setSystemZTargetInfo(ctx);
case EM_X86_64:
- return getX86_64TargetInfo(ctx);
+ return setX86_64TargetInfo(ctx);
default:
fatal("unsupported e_machine value: " + Twine(ctx.arg.emachine));
}
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h
index f18770dfc424de..74ecd8bf34ded0 100644
--- a/lld/ELF/Target.h
+++ b/lld/ELF/Target.h
@@ -179,21 +179,21 @@ class TargetInfo {
uint64_t defaultImageBase = 0x10000;
};
-TargetInfo *getAArch64TargetInfo(Ctx &);
-TargetInfo *getAMDGPUTargetInfo(Ctx &);
-TargetInfo *getARMTargetInfo(Ctx &);
-TargetInfo *getAVRTargetInfo(Ctx &);
-TargetInfo *getHexagonTargetInfo(Ctx &);
-TargetInfo *getLoongArchTargetInfo(Ctx &);
-TargetInfo *getMSP430TargetInfo(Ctx &);
-TargetInfo *getMipsTargetInfo(Ctx &);
-TargetInfo *getPPC64TargetInfo(Ctx &);
-TargetInfo *getPPCTargetInfo(Ctx &);
-TargetInfo *getRISCVTargetInfo(Ctx &);
-TargetInfo *getSPARCV9TargetInfo(Ctx &);
-TargetInfo *getSystemZTargetInfo(Ctx &);
-TargetInfo *getX86TargetInfo(Ctx &);
-TargetInfo *getX86_64TargetInfo(Ctx &);
+void setAArch64TargetInfo(Ctx &);
+void setAMDGPUTargetInfo(Ctx &);
+void setARMTargetInfo(Ctx &);
+void setAVRTargetInfo(Ctx &);
+void setHexagonTargetInfo(Ctx &);
+void setLoongArchTargetInfo(Ctx &);
+void setMSP430TargetInfo(Ctx &);
+void setMipsTargetInfo(Ctx &);
+void setPPC64TargetInfo(Ctx &);
+void setPPCTargetInfo(Ctx &);
+void setRISCVTargetInfo(Ctx &);
+void setSPARCV9TargetInfo(Ctx &);
+void setSystemZTargetInfo(Ctx &);
+void setX86TargetInfo(Ctx &);
+void setX86_64TargetInfo(Ctx &);
struct ErrorPlace {
InputSectionBase *isec;
@@ -244,7 +244,7 @@ void convertArmInstructionstoBE8(InputSection *sec, uint8_t *buf);
void createTaggedSymbols(const SmallVector<ELFFileBase *, 0> &files);
void initSymbolAnchors();
-TargetInfo *getTarget(Ctx &);
+void setTarget(Ctx &);
template <class ELFT> bool isMipsPIC(const Defined *sym);
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. LGTM!
I have closed #111139 as this makes it unnecessary.
A previous patch (BTI Thunk) might introduce flakiness to the test on Windows: but it is unrelated to this patch |
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/63/builds/1953 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/169/builds/4021 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/161/builds/2583 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/52/builds/2737 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/164/builds/3359 Here is the relevant piece of the build log for the reference
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/24/builds/1957 Here is the relevant piece of the build log for the reference
|
* commit 'FETCH_HEAD': [X86] getIntImmCostInst - pull out repeated Imm.getBitWidth() calls. NFC. [X86] Add test coverage for llvm#111323 [Driver] Use empty multilib file in another test (llvm#111352) [clang][OpenMP][test] Use x86_64-linux-gnu triple for test referencing avx512f feature (llvm#111337) [doc] Fix Kaleidoscope tutorial chapter 3 code snippet and full listing discrepancies (llvm#111289) [Flang][OpenMP] Improve entry block argument creation and binding (llvm#110267) [x86] combineMul - handle 0/-1 KnownBits cases before MUL_IMM logic (REAPPLIED) [llvm-dis] Fix non-deterministic disassembly across multiple inputs (llvm#110988) [lldb][test] TestDataFormatterLibcxxOptionalSimulator.py: change order of ifdefs [lldb][test] Add libcxx-simulators test for std::optional (llvm#111133) [x86] combineMul - use computeKnownBits directly to find MUL_IMM constant splat. (REAPPLIED) Reland "[lldb][test] TestDataFormatterLibcxxStringSimulator.py: add new padding layout" (llvm#111123) Revert "[x86] combineMul - use computeKnownBits directly to find MUL_IMM constant splat." update_test_checks: fix a simple regression (llvm#111347) [LegalizeVectorTypes] Always widen fabs (llvm#111298) [lsan] Make ReportUnsuspendedThreads return bool also for Fuchsia [mlir][vector] Add more tests for ConvertVectorToLLVM (6/n) (llvm#111121) [bazel] port 9144fed [SystemZ] Remove inlining threshold multiplier. (llvm#106058) [LegalizeVectorTypes] When widening don't check for libcalls if promoted (llvm#111297) [clang][Driver] Improve multilib custom error reporting (llvm#110804) [clang][Driver] Rename "FatalError" key to "Error" in multilib.yaml (llvm#110804) [LLVM][Maintainers] Update release managers (llvm#111164) [Clang][Driver] Add option to provide path for multilib's YAML config file (llvm#109640) [LoopVectorize] Remove redundant code in emitSCEVChecks (llvm#111132) [AMDGPU] Only emit SCOPE_SYS global_wb (llvm#110636) [ELF] Change Ctx::target to unique_ptr (llvm#111260) [ELF] Pass Ctx & to some free functions [RISCV] Only disassemble fcvtmod.w.d if the rounding mode is rtz. (llvm#111308) [Clang] Remove the special-casing for RequiresExprBodyDecl in BuildResolvedCallExpr() after fd87d76 (llvm#111277) [ELF] Pass Ctx & to InputFile [clang-format] Add AlignFunctionDeclarations to AlignConsecutiveDeclarations (llvm#108241) [AMDGPU] Support preloading hidden kernel arguments (llvm#98861) [ELF] Move static nextGroupId isInGroup to LinkerDriver [clangd] Add ArgumentLists config option under Completion (llvm#111322) [ELF] Pass Ctx & to SyntheticSections [ELF] Pass Ctx & to Symbols [ELF] Pass Ctx & to Symbols [ELF] getRelocTargetVA: pass Ctx and Relocation. NFC [clang-tidy] Avoid capturing a local variable in a static lambda in UseRangesCheck (llvm#111282) [VPlan] Use pointer to member 0 as VPInterleaveRecipe's pointer arg. (llvm#106431) [clangd] Simplify ternary expressions with std::optional::value_or (NFC) (llvm#111309) [libc++][format][2/3] Optimizes c-string arguments. (llvm#101805) [RISCV] Combine RVBUnary and RVKUnary into classes that are more similar to ALU(W)_r(r/i). NFC (llvm#111279) [ELF] Pass Ctx & to InputFiles [libc] GPU RPC interface: add return value to `rpc_host_call` (llvm#111288) Signed-off-by: kyvangka1610 <[email protected]>
Is there anything I can do to help? It seems like this has started to fail on the address and memory sanitizer bot too. Looks like a different output from llvm-objdump which is a bit concerning. |
We also see a weird issue on Windows is that during clang test step, lld timed out: |
The specific change to the LLD output in the sanitizer build which I've reproduced locally is that the asan built lld uses 0xbebebebe for the alignment padding between the bti c b target which is disassembled to whereas on a normal release build 0x0 gets used which is disassembled to . If it is intentional that the padding value might change (undefined perhaps) then I can submit a patch to remove the part of the test. It isn't important what value the padding has. |
Upstream llvm windows bot https://lab.llvm.org/buildbot/#/builders/63/builds/1953 is also failing after your patch. Though not due to timeout like us. |
I think I've worked out what could be causing the sanitizer build failure. With a static TargetInfo all fields are initialised to 0 so |
FWIW the sanitizer test failure can be fixed by initialising trapInstr
|
This reverts commit 4ec06b1. It broke lld test on Windows.
@zeroomega is this repeatable? We haven't seen this on our windows builds. EDIT - we're not seeing any timeouts.. but I will check for excessive test times. |
I am still digging into the timeout. |
I just posted a revert in: #111449, since this seems to be breaking the windows build bots. We can always reland later with a fixed up version of the patch. |
This patch seems to be breaking the windows build bots. https://lab.llvm.org/buildbot/#/builders/63/builds/1953 We also see this in Fuchsia's Linux CI: https://fxbug.dev/372010530 This reverts commit 4ec06b1.
So I did a few test runs locally. The test timeout (I should say lit probably hanged) on test |
Thanks for the investigation. The output file The test currently relies on |
Prevent use of uninitialized memory when ctx.target no longer uses points to static storage duration. Specifically, uninitialized `trapInstr` caused llvm-objdump output differences. (#111260 (comment))
also rename `TargetInfo *getXXXTargetInfo` to `void setXXXTargetInfo` and change it to set `ctx.target`. This ensures that when `ctx` becomes a local variable, two lld invocations will not reuse the function-local static variable. --- Reland after commit c35214c ([ELF] Initialize TargetInfo members).
also rename
TargetInfo *getXXXTargetInfo
tovoid setXXXTargetInfo
and change it to setctx.target
. This ensures that whenctx
becomes a local variable, two lld invocations will not reuse the function-local static variable.