From f8bae3af74e7c60d996f0d331cad04f2eace7f8f Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 6 Nov 2024 22:19:31 -0800 Subject: [PATCH] [ELF] Replace warn(...) with Warn --- lld/ELF/ARMErrataFix.cpp | 6 ++--- lld/ELF/Arch/ARM.cpp | 36 +++++++++++++------------ lld/ELF/Arch/Mips.cpp | 6 ++--- lld/ELF/Arch/MipsArchTree.cpp | 10 +++---- lld/ELF/Arch/RISCV.cpp | 2 +- lld/ELF/Driver.cpp | 51 ++++++++++++++++++++--------------- lld/ELF/InputFiles.cpp | 16 +++++------ lld/ELF/InputSection.cpp | 14 +++++----- lld/ELF/LTO.cpp | 5 ++-- lld/ELF/LinkerScript.cpp | 9 ++++--- lld/ELF/Relocations.cpp | 12 ++++----- lld/ELF/ScriptParser.cpp | 3 ++- lld/ELF/SymbolTable.cpp | 14 +++++----- lld/ELF/Symbols.cpp | 6 ++--- lld/ELF/SyntheticSections.cpp | 10 +++---- lld/ELF/Writer.cpp | 14 +++++----- 16 files changed, 114 insertions(+), 100 deletions(-) diff --git a/lld/ELF/ARMErrataFix.cpp b/lld/ELF/ARMErrataFix.cpp index 6d759d7dec1d..662173038124 100644 --- a/lld/ELF/ARMErrataFix.cpp +++ b/lld/ELF/ARMErrataFix.cpp @@ -300,9 +300,9 @@ static ScanResult scanCortexA8Errata657417(InputSection *isec, uint64_t &off, scanRes.off = branchOff; scanRes.instr = instr2; } else { - warn(toString(isec->file) + - ": skipping cortex-a8 657417 erratum sequence, section " + - isec->name + " is too large to patch"); + Warn(ctx) << isec->file + << ": skipping cortex-a8 657417 erratum sequence, section " + << isec->name << " is too large to patch"; } } } diff --git a/lld/ELF/Arch/ARM.cpp b/lld/ELF/Arch/ARM.cpp index 4c50f7397ad9..a6da1f3365a4 100644 --- a/lld/ELF/Arch/ARM.cpp +++ b/lld/ELF/Arch/ARM.cpp @@ -504,18 +504,19 @@ static void stateChangeWarning(Ctx &ctx, uint8_t *loc, RelType relt, if (s.isSection()) { // Section symbols must be defined and in a section. Users cannot change // the type. Use the section name as getName() returns an empty string. - warn(place.loc + "branch and link relocation: " + toString(relt) + - " to STT_SECTION symbol " + cast(s).section->name + - " ; interworking not performed" + hint); + Warn(ctx) << place.loc << "branch and link relocation: " << relt + << " to STT_SECTION symbol " << cast(s).section->name + << " ; interworking not performed" << hint; } else { // Warn with hint on how to alter the symbol type. - warn(getErrorLoc(ctx, loc) + "branch and link relocation: " + - toString(relt) + " to non STT_FUNC symbol: " + s.getName() + - " interworking not performed; consider using directive '.type " + - s.getName() + - ", %function' to give symbol type STT_FUNC if interworking between " - "ARM and Thumb is required" + - hint); + Warn(ctx) + << getErrorLoc(ctx, loc) << "branch and link relocation: " << relt + << " to non STT_FUNC symbol: " << s.getName() + << " interworking not performed; consider using directive '.type " + << s.getName() + << ", %function' to give symbol type STT_FUNC if interworking between " + "ARM and Thumb is required" + << hint; } } @@ -1236,9 +1237,9 @@ template void ObjFile::importCmseSymbols() { } if (eSym.st_size != ACLESESYM_SIZE) { - warn("CMSE symbol '" + sym->getName() + "' in import library '" + - toString(this) + "' does not have correct size of " + - Twine(ACLESESYM_SIZE) + " bytes"); + Warn(ctx) << "CMSE symbol '" << sym->getName() << "' in import library '" + << this << "' does not have correct size of " + << Twine(ACLESESYM_SIZE) << " bytes"; } ctx.symtab->cmseImportLib[sym->getName()] = sym; @@ -1360,16 +1361,17 @@ ArmCmseSGSection::ArmCmseSGSection(Ctx &ctx) cast(entryFunc.sym)); for (auto &[_, sym] : ctx.symtab->cmseImportLib) { if (!ctx.symtab->inCMSEOutImpLib.count(sym->getName())) - warn("entry function '" + sym->getName() + - "' from CMSE import library is not present in secure application"); + Warn(ctx) + << "entry function '" << sym->getName() + << "' from CMSE import library is not present in secure application"; } if (!ctx.symtab->cmseImportLib.empty() && ctx.arg.cmseOutputLib.empty()) { for (auto &[_, entryFunc] : ctx.symtab->cmseSymMap) { Symbol *sym = entryFunc.sym; if (!ctx.symtab->inCMSEOutImpLib.count(sym->getName())) - warn("new entry function '" + sym->getName() + - "' introduced but no output import library specified"); + Warn(ctx) << "new entry function '" << sym->getName() + << "' introduced but no output import library specified"; } } } diff --git a/lld/ELF/Arch/Mips.cpp b/lld/ELF/Arch/Mips.cpp index 7f6bebb145a0..fb6355cd19b6 100644 --- a/lld/ELF/Arch/Mips.cpp +++ b/lld/ELF/Arch/Mips.cpp @@ -87,9 +87,9 @@ RelExpr MIPS::getRelExpr(RelType type, const Symbol &s, // (e.g. a table of function pointers). When we encounter this, ignore the // relocation and emit a warning instead. if (!s.isFunc() && s.type != STT_NOTYPE) { - warn(getErrorLoc(ctx, loc) + - "found R_MIPS_JALR relocation against non-function symbol " + - toString(s) + ". This is invalid and most likely a compiler bug."); + Warn(ctx) << getErrorLoc(ctx, loc) + << "found R_MIPS_JALR relocation against non-function symbol " + << &s << ". This is invalid and most likely a compiler bug."; return R_NONE; } diff --git a/lld/ELF/Arch/MipsArchTree.cpp b/lld/ELF/Arch/MipsArchTree.cpp index 80af3a3edbd4..239fdd100e2c 100644 --- a/lld/ELF/Arch/MipsArchTree.cpp +++ b/lld/ELF/Arch/MipsArchTree.cpp @@ -108,13 +108,11 @@ static uint32_t getPicFlags(ArrayRef files) { for (const FileFlags &f : files.slice(1)) { bool isPic2 = f.flags & (EF_MIPS_PIC | EF_MIPS_CPIC); if (isPic && !isPic2) - warn(toString(f.file) + - ": linking non-abicalls code with abicalls code " + - toString(files[0].file)); + Warn(ctx) << f.file << ": linking non-abicalls code with abicalls code " + << files[0].file; if (!isPic && isPic2) - warn(toString(f.file) + - ": linking abicalls code with non-abicalls code " + - toString(files[0].file)); + Warn(ctx) << f.file << ": linking abicalls code with non-abicalls code " + << files[0].file; } // Compute the result PIC/non-PIC flag. diff --git a/lld/ELF/Arch/RISCV.cpp b/lld/ELF/Arch/RISCV.cpp index 4a8e8fcefe41..e01725b96cbb 100644 --- a/lld/ELF/Arch/RISCV.cpp +++ b/lld/ELF/Arch/RISCV.cpp @@ -1189,7 +1189,7 @@ mergeAttributesSection(Ctx &ctx, for (const InputSectionBase *sec : sections) { RISCVAttributeParser parser; if (Error e = parser.parse(sec->content(), llvm::endianness::little)) - warn(toString(sec) + ": " + llvm::toString(std::move(e))); + Warn(ctx) << sec << ": " << llvm::toString(std::move(e)); for (const auto &tag : attributesTags) { switch (RISCVAttrs::AttrType(tag.attr)) { // Integer attributes. diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index c1832325b22b..157e6289df78 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -86,7 +86,7 @@ static void readConfigs(Ctx &ctx, opt::InputArgList &args); void elf::errorOrWarn(const Twine &msg) { if (ctx.arg.noinhibitExec) - warn(msg); + Warn(ctx) << msg; else ErrAlways(ctx) << msg; } @@ -346,8 +346,9 @@ void LinkerDriver::addFile(StringRef path, bool withLOption) { } else if (magic == file_magic::bitcode) files.push_back(make(ctx, p.first, path, p.second, true)); else - warn(path + ": archive member '" + p.first.getBufferIdentifier() + - "' is neither ET_REL nor LLVM bitcode"); + Warn(ctx) << path << ": archive member '" + << p.first.getBufferIdentifier() + << "' is neither ET_REL nor LLVM bitcode"; } if (!saved.get()) ++nextGroupId; @@ -627,7 +628,7 @@ static void checkZOptions(opt::InputArgList &args) { getZFlag(args, "rel", "rela", false); for (auto *arg : args.filtered(OPT_z)) if (!arg->isClaimed()) - warn("unknown -z value: " + StringRef(arg->getValue())); + Warn(ctx) << "unknown -z value: " << StringRef(arg->getValue()); } constexpr const char *saveTempsValues[] = { @@ -838,11 +839,11 @@ static int getMemtagMode(Ctx &ctx, opt::InputArgList &args) { StringRef memtagModeArg = args.getLastArgValue(OPT_android_memtag_mode); if (memtagModeArg.empty()) { if (ctx.arg.androidMemtagStack) - warn("--android-memtag-mode is unspecified, leaving " - "--android-memtag-stack a no-op"); + Warn(ctx) << "--android-memtag-mode is unspecified, leaving " + "--android-memtag-stack a no-op"; else if (ctx.arg.androidMemtagHeap) - warn("--android-memtag-mode is unspecified, leaving " - "--android-memtag-heap a no-op"); + Warn(ctx) << "--android-memtag-mode is unspecified, leaving " + "--android-memtag-heap a no-op"; return ELF::NT_MEMTAG_LEVEL_NONE; } @@ -981,7 +982,7 @@ static void readCallGraph(Ctx &ctx, MemoryBufferRef mb) { Symbol *sym = map.lookup(name); if (!sym) { if (ctx.arg.warnSymbolOrdering) - warn(mb.getBufferIdentifier() + ": no such symbol: " + name); + Warn(ctx) << mb.getBufferIdentifier() << ": no such symbol: " << name; return nullptr; } maybeWarnUnorderableSymbol(ctx, sym); @@ -1054,7 +1055,8 @@ processCallGraphRelocations(Ctx &ctx, SmallVector &symbolIndices, } } if (symbolIndices.empty()) - warn("SHT_LLVM_CALL_GRAPH_PROFILE exists, but relocation section doesn't"); + Warn(ctx) + << "SHT_LLVM_CALL_GRAPH_PROFILE exists, but relocation section doesn't"; return !symbolIndices.empty(); } @@ -1210,7 +1212,8 @@ static SmallVector getSymbolOrderingFile(Ctx &ctx, SetVector> names; for (StringRef s : args::getLines(mb)) if (!names.insert(s) && ctx.arg.warnSymbolOrdering) - warn(mb.getBufferIdentifier() + ": duplicate ordered symbol: " + s); + Warn(ctx) << mb.getBufferIdentifier() + << ": duplicate ordered symbol: " << s; return names.takeVector(); } @@ -2118,7 +2121,8 @@ static uint64_t getMaxPageSize(Ctx &ctx, opt::InputArgList &args) { } if (ctx.arg.nmagic || ctx.arg.omagic) { if (val != ctx.target->defaultMaxPageSize) - warn("-z max-page-size set, but paging disabled by omagic or nmagic"); + Warn(ctx) + << "-z max-page-size set, but paging disabled by omagic or nmagic"; return 1; } return val; @@ -2135,7 +2139,8 @@ static uint64_t getCommonPageSize(Ctx &ctx, opt::InputArgList &args) { } if (ctx.arg.nmagic || ctx.arg.omagic) { if (val != ctx.target->defaultCommonPageSize) - warn("-z common-page-size set, but paging disabled by omagic or nmagic"); + Warn(ctx) + << "-z common-page-size set, but paging disabled by omagic or nmagic"; return 1; } // commonPageSize can't be larger than maxPageSize. @@ -2159,7 +2164,7 @@ static std::optional getImageBase(Ctx &ctx, opt::InputArgList &args) { return 0; } if ((v % ctx.arg.maxPageSize) != 0) - warn("--image-base: address isn't multiple of page size: " + s); + Warn(ctx) << "--image-base: address isn't multiple of page size: " << s; return v; } @@ -2316,8 +2321,8 @@ static void reportBackrefs(Ctx &ctx) { break; } if (!exclude) - warn("backward reference detected: " + sym.getName() + " in " + - toString(ref.second.first) + " refers to " + to); + Warn(ctx) << "backward reference detected: " << sym.getName() << " in " + << ref.second.first << " refers to " << to; } } @@ -2434,7 +2439,7 @@ static void findKeepUniqueSections(Ctx &ctx, opt::InputArgList &args) { StringRef name = arg->getValue(); auto *d = dyn_cast_or_null(ctx.symtab->find(name)); if (!d || !d->section) { - warn("could not find symbol " + name + " to keep unique"); + Warn(ctx) << "could not find symbol " << name << " to keep unique"; continue; } d->section->keepUnique = true; @@ -2749,7 +2754,7 @@ static void reportMissingFeature(StringRef config, const Twine &report) { if (config == "error") ErrAlways(ctx) << report; else if (config == "warning") - warn(report); + Warn(ctx) << report; } static void checkAndReportMissingFeature(StringRef config, uint32_t features, @@ -2820,13 +2825,15 @@ static void readSecurityNotes(Ctx &ctx) { } else if (ctx.arg.zForceIbt && !(features & GNU_PROPERTY_X86_FEATURE_1_IBT)) { if (ctx.arg.zCetReport == "none") - warn(toString(f) + ": -z force-ibt: file does not have " - "GNU_PROPERTY_X86_FEATURE_1_IBT property"); + Warn(ctx) << f + << ": -z force-ibt: file does not have " + "GNU_PROPERTY_X86_FEATURE_1_IBT property"; features |= GNU_PROPERTY_X86_FEATURE_1_IBT; } if (ctx.arg.zPacPlt && !(features & GNU_PROPERTY_AARCH64_FEATURE_1_PAC)) { - warn(toString(f) + ": -z pac-plt: file does not have " - "GNU_PROPERTY_AARCH64_FEATURE_1_PAC property"); + Warn(ctx) << f + << ": -z pac-plt: file does not have " + "GNU_PROPERTY_AARCH64_FEATURE_1_PAC property"; features |= GNU_PROPERTY_AARCH64_FEATURE_1_PAC; } ctx.arg.andFeatures &= features; diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 4c440cebc37f..6e6d7bfa5160 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -482,7 +482,7 @@ template DWARFCache *ObjFile::getDwarf() { std::make_unique>(this), "", [&](Error err) { warn(getName() + ": " + toString(std::move(err))); }, [&](Error warning) { - warn(getName() + ": " + toString(std::move(warning))); + Warn(ctx) << getName() << ": " << std::move(warning); })); }); @@ -634,7 +634,7 @@ template void ObjFile::parse(bool ignoreComdats) { ? llvm::endianness::little : llvm::endianness::big)) { InputSection isec(*this, sec, name); - warn(toString(&isec) + ": " + llvm::toString(std::move(e))); + Warn(ctx) << &isec << ": " << llvm::toString(std::move(e)); } else { updateSupportedARMFeatures(ctx, attributes); updateARMVFPArgs(ctx, attributes, this); @@ -802,12 +802,12 @@ void ObjFile::initializeSections(bool ignoreComdats, if (sec.sh_link != 0) this->addrsigSec = &sec; else if (ctx.arg.icf == ICFLevel::Safe) - warn(toString(this) + - ": --icf=safe conservatively ignores " - "SHT_LLVM_ADDRSIG [index " + - Twine(i) + - "] with sh_link=0 " - "(likely created using objcopy or ld -r)"); + Warn(ctx) << this + << ": --icf=safe conservatively ignores " + "SHT_LLVM_ADDRSIG [index " + << Twine(i) + << "] with sh_link=0 " + "(likely created using objcopy or ld -r)"; } this->sections[i] = &InputSection::discarded; continue; diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 92bbc977a20a..bbdce28d6413 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -485,9 +485,9 @@ void InputSection::copyRelocations(Ctx &ctx, uint8_t *buf, sec->name != ".toc") { uint32_t secIdx = cast(sym).discardedSecIdx; Elf_Shdr_Impl sec = file->template getELFShdrs()[secIdx]; - warn("relocation refers to a discarded section: " + - CHECK(file->getObj().getSectionName(sec), file) + - "\n>>> referenced by " + getObjMsg(p->r_offset)); + Warn(ctx) << "relocation refers to a discarded section: " + << CHECK(file->getObj().getSectionName(sec), file) + << "\n>>> referenced by " << getObjMsg(p->r_offset); } p->setSymbolAndType(0, 0, false); continue; @@ -661,9 +661,9 @@ static Relocation *getRISCVPCRelHi20(const InputSectionBase *loSec, "'"); if (addend != 0) - warn(loSec->getLocation(loReloc.offset) + - ": non-zero addend in R_RISCV_PCREL_LO12 relocation to " + - hiSec->getObjMsg(d->value) + " is ignored"); + Warn(ctx) << loSec->getLocation(loReloc.offset) + << ": non-zero addend in R_RISCV_PCREL_LO12 relocation to " + << hiSec->getObjMsg(d->value) << " is ignored"; // Relocations are sorted by offset, so we can use std::equal_range to do // binary search. @@ -1125,7 +1125,7 @@ void InputSection::relocateNonAlloc(Ctx &ctx, uint8_t *buf, // against _GLOBAL_OFFSET_TABLE_ for .debug_info. The bug has been fixed in // 2017 (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82630), but we need to // keep this bug-compatible code for a while. - warn(msg); + Warn(ctx) << msg; target.relocateNoSym( bufLoc, type, SignExtend64(sym.getVA(ctx, addend - offset - outSecOff))); diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index 7214b7f2ae49..e9363a163207 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -70,8 +70,9 @@ static lto::Config createConfig(Ctx &ctx) { c.Options.BBSections = BasicBlockSection::All; } else if (ctx.arg.ltoBasicBlockSections == "labels") { c.Options.BBAddrMap = true; - warn("'--lto-basic-block-sections=labels' is deprecated; Please use " - "'--lto-basic-block-address-map' instead"); + Warn(ctx) + << "'--lto-basic-block-sections=labels' is deprecated; Please use " + "'--lto-basic-block-address-map' instead"; } else if (ctx.arg.ltoBasicBlockSections == "none") { c.Options.BBSections = BasicBlockSection::None; } else { diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index 72c876fe7165..e415c998956b 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -746,7 +746,7 @@ void LinkerScript::processSectionCommands() { OutputSection *osec = &osd->osec; if (process(osec) && !map.try_emplace(CachedHashStringRef(osec->name), osd).second) - warn("OVERWRITE_SECTIONS specifies duplicate " + osec->name); + Warn(ctx) << "OVERWRITE_SECTIONS specifies duplicate " << osec->name; } for (SectionCommand *&base : sectionCommands) { if (auto *osd = dyn_cast(base)) { @@ -1055,7 +1055,7 @@ void LinkerScript::diagnoseOrphanHandling() const { if (ctx.arg.orphanHandling == OrphanHandlingPolicy::Error) ErrAlways(ctx) << sec << " is being placed in '" << name << "'"; else - warn(toString(sec) + " is being placed in '" + name + "'"); + Warn(ctx) << sec << " is being placed in '" << name << "'"; } } @@ -1084,8 +1084,9 @@ LinkerScript::findMemoryRegion(OutputSection *sec, MemoryRegion *hint) { return ByteCommand::classof(comm); }); if (!sec->memoryRegionName.empty() && hasInputOrByteCommand) - warn("ignoring memory region assignment for non-allocatable section '" + - sec->name + "'"); + Warn(ctx) + << "ignoring memory region assignment for non-allocatable section '" + << sec->name << "'"; return {nullptr, nullptr}; } diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index 88e742585673..d1e5849551ff 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -519,8 +519,7 @@ int64_t RelocationScanner::computeMipsAddend(const RelTy &rel, RelExpr expr, ri->getSymbol(ctx.arg.isMips64EL) == symIndex) return ctx.target->getImplicitAddend(buf + ri->r_offset, pairTy); - warn("can't find matching " + toString(pairTy) + " relocation for " + - toString(type)); + Warn(ctx) << "can't find matching " << pairTy << " relocation for " << type; return 0; } @@ -796,7 +795,7 @@ static void reportUndefinedSymbol(Ctx &ctx, const UndefinedDiag &undef, } if (undef.isWarning) - warn(msg); + Warn(ctx) << msg; else error(msg, ErrorTag::SymbolNotFound, {sym.getName()}); } @@ -1588,9 +1587,10 @@ static void checkPPC64TLSRelax(InputSectionBase &sec, Relocs rels) { } if (hasGDLD) { sec.file->ppc64DisableTLSRelax = true; - warn(toString(sec.file) + - ": disable TLS relaxation due to R_PPC64_GOT_TLS* relocations without " - "R_PPC64_TLSGD/R_PPC64_TLSLD relocations"); + Warn(ctx) << sec.file + << ": disable TLS relaxation due to R_PPC64_GOT_TLS* relocations " + "without " + "R_PPC64_TLSGD/R_PPC64_TLSLD relocations"; } } diff --git a/lld/ELF/ScriptParser.cpp b/lld/ELF/ScriptParser.cpp index 472605fd294b..f57b042534fe 100644 --- a/lld/ELF/ScriptParser.cpp +++ b/lld/ELF/ScriptParser.cpp @@ -306,7 +306,8 @@ void ScriptParser::readNoCrossRefs(bool to) { while (auto tok = till(")")) cmd.outputSections.push_back(unquote(tok)); if (cmd.outputSections.size() < 2) - warn(getCurrentLocation() + ": ignored with fewer than 2 output sections"); + Warn(ctx) << getCurrentLocation() + << ": ignored with fewer than 2 output sections"; else ctx.script->noCrossRefs.push_back(std::move(cmd)); } diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index 8878acdc43e8..c3b8c853a201 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -240,8 +240,8 @@ bool SymbolTable::assignExactVersion(SymbolVersion ver, uint16_t versionId, if (sym->versionId == versionId) continue; - warn("attempt to reassign symbol '" + ver.name + "' of " + - getName(sym->versionId) + " to " + getName(versionId)); + Warn(ctx) << "attempt to reassign symbol '" << ver.name << "' of " + << getName(sym->versionId) << " to " << getName(versionId); } return !syms.empty(); } @@ -325,12 +325,14 @@ void SymbolTable::scanVersionScript() { if (!asteriskReported && (isLocal || ver->id > VER_NDX_LOCAL)) { if ((isLocal && globalAsteriskFound) || (!isLocal && localAsteriskFound)) { - warn("wildcard pattern '*' is used for both 'local' and 'global' " - "scopes in version script"); + Warn(ctx) + << "wildcard pattern '*' is used for both 'local' and 'global' " + "scopes in version script"; asteriskReported = true; } else if (!isLocal && globalAsteriskFound) { - warn("wildcard pattern '*' is used for multiple version definitions in " - "version script"); + Warn(ctx) << "wildcard pattern '*' is used for multiple version " + "definitions in " + "version script"; asteriskReported = true; } else { localAsteriskFound = isLocal; diff --git a/lld/ELF/Symbols.cpp b/lld/ELF/Symbols.cpp index fc3a51156730..4eff11447c19 100644 --- a/lld/ELF/Symbols.cpp +++ b/lld/ELF/Symbols.cpp @@ -501,7 +501,7 @@ void Symbol::resolve(Ctx &ctx, const Undefined &other) { bool Symbol::shouldReplace(Ctx &ctx, const Defined &other) const { if (LLVM_UNLIKELY(isCommon())) { if (ctx.arg.warnCommon) - warn("common " + getName() + " is overridden"); + Warn(ctx) << "common " << getName() << " is overridden"; return !other.isWeak(); } if (!isDefined()) @@ -574,13 +574,13 @@ void Symbol::resolve(Ctx &ctx, const CommonSymbol &other) { } if (isDefined() && !isWeak()) { if (ctx.arg.warnCommon) - warn("common " + getName() + " is overridden"); + Warn(ctx) << "common " << getName() << " is overridden"; return; } if (CommonSymbol *oldSym = dyn_cast(this)) { if (ctx.arg.warnCommon) - warn("multiple common of " + getName()); + Warn(ctx) << "multiple common of " << getName(); oldSym->alignment = std::max(oldSym->alignment, other.alignment); if (oldSym->size < other.size) { oldSym->file = other.file; diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index 6c7abdc7bff5..3a87d69b1bf3 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -2964,8 +2964,8 @@ void DebugNamesBaseSection::computeHdrAndAbbrevTable( // TODO: We don't handle type units yet, so LocalTypeUnitCount & // ForeignTypeUnitCount are left as 0. if (nd.hdr.LocalTypeUnitCount || nd.hdr.ForeignTypeUnitCount) - warn(toString(inputChunk.section.sec) + - Twine(": type units are not implemented")); + Warn(ctx) << inputChunk.section.sec + << Twine(": type units are not implemented"); // If augmentation strings are not identical, use an empty string. if (i == 0) { hdr.AugmentationStringSize = nd.hdr.AugmentationStringSize; @@ -3383,12 +3383,12 @@ readAddressAreas(DWARFContext &dwarf, InputSection *sec) { uint32_t cuIdx = 0; for (std::unique_ptr &cu : dwarf.compile_units()) { if (Error e = cu->tryExtractDIEsIfNeeded(false)) { - warn(toString(sec) + ": " + toString(std::move(e))); + Warn(ctx) << sec << ": " << std::move(e); return {}; } Expected ranges = cu->collectAddressRanges(); if (!ranges) { - warn(toString(sec) + ": " + toString(ranges.takeError())); + Warn(ctx) << sec << ": " << ranges.takeError(); return {}; } @@ -3421,7 +3421,7 @@ readPubNamesAndTypes(const LLDDwarfObj &obj, ELFT::Is64Bits ? 8 : 4); DWARFDebugPubTable table; table.extract(data, /*GnuStyle=*/true, [&](Error e) { - warn(toString(pub->sec) + ": " + toString(std::move(e))); + Warn(ctx) << pub->sec << ": " << std::move(e); }); for (const DWARFDebugPubTable::Set &set : table.getData()) { // The value written into the constant pool is kind << 24 | cuIndex. As we diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 1a6ac7bfa15a..0ca94286e291 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1121,7 +1121,8 @@ static DenseMap buildSectionOrder(Ctx &ctx) { if (ctx.arg.warnSymbolOrdering) for (auto orderEntry : symbolOrder) if (!orderEntry.second.present) - warn("symbol ordering file: no such symbol: " + orderEntry.first.val()); + Warn(ctx) << "symbol ordering file: no such symbol: " + << orderEntry.first.val(); return sectionOrder; } @@ -1563,9 +1564,10 @@ template void Writer::finalizeAddressDependentContent() { if (auto *osd = dyn_cast(cmd)) { OutputSection *osec = &osd->osec; if (osec->addr % osec->addralign != 0) - warn("address (0x" + Twine::utohexstr(osec->addr) + ") of section " + - osec->name + " is not a multiple of alignment (" + - Twine(osec->addralign) + ")"); + Warn(ctx) << "address (0x" << Twine::utohexstr(osec->addr) + << ") of section " << osec->name + << " is not a multiple of alignment (" + << Twine(osec->addralign) << ")"; } // Sizes are no longer allowed to grow, so all allowable spills have been @@ -2722,8 +2724,8 @@ static uint64_t getEntryAddr(Ctx &ctx) { // Case 5 if (ctx.arg.warnMissingEntry) - warn("cannot find entry symbol " + ctx.arg.entry + - "; not setting start address"); + Warn(ctx) << "cannot find entry symbol " << ctx.arg.entry + << "; not setting start address"; return 0; }