[lld] f8bae3a - [ELF] Replace warn(...) with Warn

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 6 22:19:37 PST 2024


Author: Fangrui Song
Date: 2024-11-06T22:19:31-08:00
New Revision: f8bae3af74e7c60d996f0d331cad04f2eace7f8f

URL: https://github.com/llvm/llvm-project/commit/f8bae3af74e7c60d996f0d331cad04f2eace7f8f
DIFF: https://github.com/llvm/llvm-project/commit/f8bae3af74e7c60d996f0d331cad04f2eace7f8f.diff

LOG: [ELF] Replace warn(...) with Warn

Added: 
    

Modified: 
    lld/ELF/ARMErrataFix.cpp
    lld/ELF/Arch/ARM.cpp
    lld/ELF/Arch/Mips.cpp
    lld/ELF/Arch/MipsArchTree.cpp
    lld/ELF/Arch/RISCV.cpp
    lld/ELF/Driver.cpp
    lld/ELF/InputFiles.cpp
    lld/ELF/InputSection.cpp
    lld/ELF/LTO.cpp
    lld/ELF/LinkerScript.cpp
    lld/ELF/Relocations.cpp
    lld/ELF/ScriptParser.cpp
    lld/ELF/SymbolTable.cpp
    lld/ELF/Symbols.cpp
    lld/ELF/SyntheticSections.cpp
    lld/ELF/Writer.cpp

Removed: 
    


################################################################################
diff  --git a/lld/ELF/ARMErrataFix.cpp b/lld/ELF/ARMErrataFix.cpp
index 6d759d7dec1d8a..66217303812486 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 4c50f7397ad920..a6da1f3365a4e0 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<Defined>(s).section->name +
-         " ; interworking not performed" + hint);
+    Warn(ctx) << place.loc << "branch and link relocation: " << relt
+              << " to STT_SECTION symbol " << cast<Defined>(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 <class ELFT> void ObjFile<ELFT>::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<Defined>(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 7f6bebb145a090..fb6355cd19b62c 100644
--- a/lld/ELF/Arch/Mips.cpp
+++ b/lld/ELF/Arch/Mips.cpp
@@ -87,9 +87,9 @@ RelExpr MIPS<ELFT>::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 80af3a3edbd409..239fdd100e2c2f 100644
--- a/lld/ELF/Arch/MipsArchTree.cpp
+++ b/lld/ELF/Arch/MipsArchTree.cpp
@@ -108,13 +108,11 @@ static uint32_t getPicFlags(ArrayRef<FileFlags> 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 4a8e8fcefe41ea..e01725b96cbb21 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 c1832325b22b25..157e6289df78fb 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<BitcodeFile>(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<uint32_t, 32> &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<StringRef, 0> getSymbolOrderingFile(Ctx &ctx,
   SetVector<StringRef, SmallVector<StringRef, 0>> 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<uint64_t> 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<Defined>(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 4c440cebc37f12..6e6d7bfa516067 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -482,7 +482,7 @@ template <class ELFT> DWARFCache *ObjFile<ELFT>::getDwarf() {
         std::make_unique<LLDDwarfObj<ELFT>>(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 <class ELFT> void ObjFile<ELFT>::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<ELFT>::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 92bbc977a20a0b..bbdce28d64138d 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<Undefined>(sym).discardedSecIdx;
           Elf_Shdr_Impl<ELFT> sec = file->template getELFShdrs<ELFT>()[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<bits>(sym.getVA(ctx, addend - offset - outSecOff)));

diff  --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp
index 7214b7f2ae4904..e9363a16320747 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 72c876fe716552..e415c998956b31 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<OutputDesc>(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 88e742585673d6..d1e5849551ff7a 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<RelTy> 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 472605fd294be2..f57b042534feac 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 8878acdc43e87f..c3b8c853a2011e 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 fc3a5115673079..4eff11447c1996 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<CommonSymbol>(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 6c7abdc7bff547..3a87d69b1bf334 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<DWARFUnit> &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<DWARFAddressRangesVector> ranges = cu->collectAddressRanges();
     if (!ranges) {
-      warn(toString(sec) + ": " + toString(ranges.takeError()));
+      Warn(ctx) << sec << ": " << ranges.takeError();
       return {};
     }
 
@@ -3421,7 +3421,7 @@ readPubNamesAndTypes(const LLDDwarfObj<ELFT> &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 1a6ac7bfa15aa2..0ca94286e291b5 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -1121,7 +1121,8 @@ static DenseMap<const InputSectionBase *, int> 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 <class ELFT> void Writer<ELFT>::finalizeAddressDependentContent() {
     if (auto *osd = dyn_cast<OutputDesc>(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;
 }
 


        


More information about the llvm-commits mailing list