authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-07-16 04:46:03+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-08-30 06:36:40+02:00
logb7a8c045efab89c0fab0d3d1c678442c2b373066
treead21afbd9d3e92aeabdf5ec0743bf73938ff6822
parent008affa64559487c6886e27075bb5377ca915b4a
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

zig cc: update driver files to LLVM 21


4 files changed, 57 insertions(+), 34 deletions(-)

src/zig_clang_cc1_main.cpp+27-13
...@@ -111,9 +111,10 @@ static void ensureSufficientStack() {}...@@ -111,9 +111,10 @@ static void ensureSufficientStack() {}
111111
112/// Print supported cpus of the given target.112/// Print supported cpus of the given target.
113static int PrintSupportedCPUs(std::string TargetStr) {113static int PrintSupportedCPUs(std::string TargetStr) {
114 llvm::Triple Triple(TargetStr);
114 std::string Error;115 std::string Error;
115 const llvm::Target *TheTarget =116 const llvm::Target *TheTarget =
116 llvm::TargetRegistry::lookupTarget(TargetStr, Error);117 llvm::TargetRegistry::lookupTarget(Triple, Error);
117 if (!TheTarget) {118 if (!TheTarget) {
118 llvm::errs() << Error;119 llvm::errs() << Error;
119 return 1;120 return 1;
...@@ -122,15 +123,16 @@ static int PrintSupportedCPUs(std::string TargetStr) {...@@ -122,15 +123,16 @@ static int PrintSupportedCPUs(std::string TargetStr) {
122 // the target machine will handle the mcpu printing123 // the target machine will handle the mcpu printing
123 llvm::TargetOptions Options;124 llvm::TargetOptions Options;
124 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(125 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
125 TheTarget->createTargetMachine(TargetStr, "", "+cpuhelp", Options,126 TheTarget->createTargetMachine(Triple, "", "+cpuhelp", Options,
126 std::nullopt));127 std::nullopt));
127 return 0;128 return 0;
128}129}
129130
130static int PrintSupportedExtensions(std::string TargetStr) {131static int PrintSupportedExtensions(std::string TargetStr) {
132 llvm::Triple Triple(TargetStr);
131 std::string Error;133 std::string Error;
132 const llvm::Target *TheTarget =134 const llvm::Target *TheTarget =
133 llvm::TargetRegistry::lookupTarget(TargetStr, Error);135 llvm::TargetRegistry::lookupTarget(Triple, Error);
134 if (!TheTarget) {136 if (!TheTarget) {
135 llvm::errs() << Error;137 llvm::errs() << Error;
136 return 1;138 return 1;
...@@ -138,7 +140,7 @@ static int PrintSupportedExtensions(std::string TargetStr) {...@@ -138,7 +140,7 @@ static int PrintSupportedExtensions(std::string TargetStr) {
138140
139 llvm::TargetOptions Options;141 llvm::TargetOptions Options;
140 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(142 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
141 TheTarget->createTargetMachine(TargetStr, "", "", Options, std::nullopt));143 TheTarget->createTargetMachine(Triple, "", "", Options, std::nullopt));
142 const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple();144 const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple();
143 const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo();145 const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo();
144 const llvm::ArrayRef<llvm::SubtargetFeatureKV> Features =146 const llvm::ArrayRef<llvm::SubtargetFeatureKV> Features =
...@@ -165,9 +167,10 @@ static int PrintSupportedExtensions(std::string TargetStr) {...@@ -165,9 +167,10 @@ static int PrintSupportedExtensions(std::string TargetStr) {
165}167}
166168
167static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {169static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {
170 llvm::Triple Triple(TargetOpts.Triple);
168 std::string Error;171 std::string Error;
169 const llvm::Target *TheTarget =172 const llvm::Target *TheTarget =
170 llvm::TargetRegistry::lookupTarget(TargetOpts.Triple, Error);173 llvm::TargetRegistry::lookupTarget(Triple, Error);
171 if (!TheTarget) {174 if (!TheTarget) {
172 llvm::errs() << Error;175 llvm::errs() << Error;
173 return 1;176 return 1;
...@@ -179,7 +182,8 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {...@@ -179,7 +182,8 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {
179 llvm::TargetOptions BackendOptions;182 llvm::TargetOptions BackendOptions;
180 std::string FeaturesStr = llvm::join(TargetOpts.FeaturesAsWritten, ",");183 std::string FeaturesStr = llvm::join(TargetOpts.FeaturesAsWritten, ",");
181 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(184 std::unique_ptr<llvm::TargetMachine> TheTargetMachine(
182 TheTarget->createTargetMachine(TargetOpts.Triple, TargetOpts.CPU, FeaturesStr, BackendOptions, std::nullopt));185 TheTarget->createTargetMachine(Triple, TargetOpts.CPU, FeaturesStr,
186 BackendOptions, std::nullopt));
183 const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple();187 const llvm::Triple &MachineTriple = TheTargetMachine->getTargetTriple();
184 const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo();188 const llvm::MCSubtargetInfo *MCInfo = TheTargetMachine->getMCSubtargetInfo();
185189
...@@ -213,11 +217,10 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {...@@ -213,11 +217,10 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) {
213int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {217int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
214 ensureSufficientStack();218 ensureSufficientStack();
215219
216 std::unique_ptr<CompilerInstance> Clang(new CompilerInstance());
217 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());220 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
218221
219 // Register the support for object-file-wrapped Clang modules.222 // Register the support for object-file-wrapped Clang modules.
220 auto PCHOps = Clang->getPCHContainerOperations();223 auto PCHOps = std::make_shared<PCHContainerOperations>();
221 PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>());224 PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>());
222 PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>());225 PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>());
223226
...@@ -229,17 +232,21 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {...@@ -229,17 +232,21 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
229232
230 // Buffer diagnostics from argument parsing so that we can output them using a233 // Buffer diagnostics from argument parsing so that we can output them using a
231 // well formed diagnostic object.234 // well formed diagnostic object.
232 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();235 DiagnosticOptions DiagOpts;
233 TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer;236 TextDiagnosticBuffer *DiagsBuffer = new TextDiagnosticBuffer;
234 DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagsBuffer);237 DiagnosticsEngine Diags(DiagID, DiagOpts, DiagsBuffer);
235238
236 // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.239 // Setup round-trip remarks for the DiagnosticsEngine used in CreateFromArgs.
237 if (find(Argv, StringRef("-Rround-trip-cc1-args")) != Argv.end())240 if (find(Argv, StringRef("-Rround-trip-cc1-args")) != Argv.end())
238 Diags.setSeverity(diag::remark_cc1_round_trip_generated,241 Diags.setSeverity(diag::remark_cc1_round_trip_generated,
239 diag::Severity::Remark, {});242 diag::Severity::Remark, {});
240243
241 bool Success = CompilerInvocation::CreateFromArgs(Clang->getInvocation(),244 auto Invocation = std::make_shared<CompilerInvocation>();
242 Argv, Diags, Argv0);245 bool Success =
246 CompilerInvocation::CreateFromArgs(*Invocation, Argv, Diags, Argv0);
247
248 auto Clang = std::make_unique<CompilerInstance>(std::move(Invocation),
249 std::move(PCHOps));
243250
244 if (!Clang->getFrontendOpts().TimeTracePath.empty()) {251 if (!Clang->getFrontendOpts().TimeTracePath.empty()) {
245 llvm::timeTraceProfilerInitialize(252 llvm::timeTraceProfilerInitialize(
...@@ -292,7 +299,14 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {...@@ -292,7 +299,14 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
292299
293 // If any timers were active but haven't been destroyed yet, print their300 // If any timers were active but haven't been destroyed yet, print their
294 // results now. This happens in -disable-free mode.301 // results now. This happens in -disable-free mode.
295 llvm::TimerGroup::printAll(llvm::errs());302 std::unique_ptr<raw_ostream> IOFile = llvm::CreateInfoOutputFile();
303 if (Clang->getCodeGenOpts().TimePassesJson) {
304 *IOFile << "{\n";
305 llvm::TimerGroup::printAllJSONValues(*IOFile, "");
306 *IOFile << "\n}\n";
307 } else {
308 llvm::TimerGroup::printAll(*IOFile);
309 }
296 llvm::TimerGroup::clearAll();310 llvm::TimerGroup::clearAll();
297311
298 if (llvm::timeTraceProfilerEnabled()) {312 if (llvm::timeTraceProfilerEnabled()) {
src/zig_clang_cc1as_main.cpp+13-12
...@@ -26,6 +26,7 @@...@@ -26,6 +26,7 @@
26#include "llvm/MC/MCAsmInfo.h"26#include "llvm/MC/MCAsmInfo.h"
27#include "llvm/MC/MCCodeEmitter.h"27#include "llvm/MC/MCCodeEmitter.h"
28#include "llvm/MC/MCContext.h"28#include "llvm/MC/MCContext.h"
29#include "llvm/MC/MCInstPrinter.h"
29#include "llvm/MC/MCInstrInfo.h"30#include "llvm/MC/MCInstrInfo.h"
30#include "llvm/MC/MCObjectFileInfo.h"31#include "llvm/MC/MCObjectFileInfo.h"
31#include "llvm/MC/MCObjectWriter.h"32#include "llvm/MC/MCObjectWriter.h"
...@@ -541,8 +542,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,...@@ -541,8 +542,8 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
541542
542 // FIXME: There is a bit of code duplication with addPassesToEmitFile.543 // FIXME: There is a bit of code duplication with addPassesToEmitFile.
543 if (Opts.OutputType == AssemblerInvocation::FT_Asm) {544 if (Opts.OutputType == AssemblerInvocation::FT_Asm) {
544 MCInstPrinter *IP = TheTarget->createMCInstPrinter(545 std::unique_ptr<MCInstPrinter> IP(TheTarget->createMCInstPrinter(
545 llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI);546 llvm::Triple(Opts.Triple), Opts.OutputAsmVariant, *MAI, *MCII, *MRI));
546547
547 std::unique_ptr<MCCodeEmitter> CE;548 std::unique_ptr<MCCodeEmitter> CE;
548 if (Opts.ShowEncoding)549 if (Opts.ShowEncoding)
...@@ -551,7 +552,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,...@@ -551,7 +552,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
551 TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions));552 TheTarget->createMCAsmBackend(*STI, *MRI, MCOptions));
552553
553 auto FOut = std::make_unique<formatted_raw_ostream>(*Out);554 auto FOut = std::make_unique<formatted_raw_ostream>(*Out);
554 Str.reset(TheTarget->createAsmStreamer(Ctx, std::move(FOut), IP,555 Str.reset(TheTarget->createAsmStreamer(Ctx, std::move(FOut), std::move(IP),
555 std::move(CE), std::move(MAB)));556 std::move(CE), std::move(MAB)));
556 } else if (Opts.OutputType == AssemblerInvocation::FT_Null) {557 } else if (Opts.OutputType == AssemblerInvocation::FT_Null) {
557 Str.reset(createNullStreamer(Ctx));558 Str.reset(createNullStreamer(Ctx));
...@@ -576,7 +577,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,...@@ -576,7 +577,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
576 Triple T(Opts.Triple);577 Triple T(Opts.Triple);
577 Str.reset(TheTarget->createMCObjectStreamer(578 Str.reset(TheTarget->createMCObjectStreamer(
578 T, Ctx, std::move(MAB), std::move(OW), std::move(CE), *STI));579 T, Ctx, std::move(MAB), std::move(OW), std::move(CE), *STI));
579 Str.get()->initSections(Opts.NoExecStack, *STI);580 Str->initSections(Opts.NoExecStack, *STI);
580 if (T.isOSBinFormatMachO() && T.isOSDarwin()) {581 if (T.isOSBinFormatMachO() && T.isOSDarwin()) {
581 Triple *TVT = Opts.DarwinTargetVariantTriple582 Triple *TVT = Opts.DarwinTargetVariantTriple
582 ? &*Opts.DarwinTargetVariantTriple583 ? &*Opts.DarwinTargetVariantTriple
...@@ -591,14 +592,14 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,...@@ -591,14 +592,14 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
591 if (Opts.EmbedBitcode && Ctx.getObjectFileType() == MCContext::IsMachO) {592 if (Opts.EmbedBitcode && Ctx.getObjectFileType() == MCContext::IsMachO) {
592 MCSection *AsmLabel = Ctx.getMachOSection(593 MCSection *AsmLabel = Ctx.getMachOSection(
593 "__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly());594 "__LLVM", "__asm", MachO::S_REGULAR, 4, SectionKind::getReadOnly());
594 Str.get()->switchSection(AsmLabel);595 Str->switchSection(AsmLabel);
595 Str.get()->emitZeros(1);596 Str->emitZeros(1);
596 }597 }
597598
598 bool Failed = false;599 bool Failed = false;
599600
600 std::unique_ptr<MCAsmParser> Parser(601 std::unique_ptr<MCAsmParser> Parser(
601 createMCAsmParser(SrcMgr, Ctx, *Str.get(), *MAI));602 createMCAsmParser(SrcMgr, Ctx, *Str, *MAI));
602603
603 // FIXME: init MCTargetOptions from sanitizer flags here.604 // FIXME: init MCTargetOptions from sanitizer flags here.
604 std::unique_ptr<MCTargetAsmParser> TAP(605 std::unique_ptr<MCTargetAsmParser> TAP(
...@@ -618,7 +619,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,...@@ -618,7 +619,7 @@ static bool ExecuteAssemblerImpl(AssemblerInvocation &Opts,
618 }619 }
619620
620 if (!Failed) {621 if (!Failed) {
621 Parser->setTargetParser(*TAP.get());622 Parser->setTargetParser(*TAP);
622 Failed = Parser->Run(Opts.NoInitialTextSection);623 Failed = Parser->Run(Opts.NoInitialTextSection);
623 }624 }
624625
...@@ -657,12 +658,12 @@ int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {...@@ -657,12 +658,12 @@ int cc1as_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
657 InitializeAllAsmParsers();658 InitializeAllAsmParsers();
658659
659 // Construct our diagnostic client.660 // Construct our diagnostic client.
660 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions();661 DiagnosticOptions DiagOpts;
661 TextDiagnosticPrinter *DiagClient662 TextDiagnosticPrinter *DiagClient =
662 = new TextDiagnosticPrinter(errs(), &*DiagOpts);663 new TextDiagnosticPrinter(errs(), DiagOpts);
663 DiagClient->setPrefix("clang -cc1as");664 DiagClient->setPrefix("clang -cc1as");
664 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());665 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
665 DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient);666 DiagnosticsEngine Diags(DiagID, DiagOpts, DiagClient);
666667
667 // Set an error handler, so that any LLVM backend diagnostics go through our668 // Set an error handler, so that any LLVM backend diagnostics go through our
668 // error handler.669 // error handler.
src/zig_clang_driver.cpp+16-8
...@@ -153,6 +153,11 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {...@@ -153,6 +153,11 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
153 }153 }
154154
155 const char *FilteringStr = ::getenv("CC_PRINT_HEADERS_FILTERING");155 const char *FilteringStr = ::getenv("CC_PRINT_HEADERS_FILTERING");
156 if (!FilteringStr) {
157 TheDriver.Diag(clang::diag::err_drv_print_header_env_var_invalid_format)
158 << EnvVar;
159 return false;
160 }
156 HeaderIncludeFilteringKind Filtering;161 HeaderIncludeFilteringKind Filtering;
157 if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) {162 if (!stringToHeaderIncludeFiltering(FilteringStr, Filtering)) {
158 TheDriver.Diag(clang::diag::err_drv_print_header_env_var)163 TheDriver.Diag(clang::diag::err_drv_print_header_env_var)
...@@ -163,7 +168,7 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {...@@ -163,7 +168,7 @@ static bool SetBackdoorDriverOutputsFromEnvVars(Driver &TheDriver) {
163 if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual &&168 if ((TheDriver.CCPrintHeadersFormat == HIFMT_Textual &&
164 Filtering != HIFIL_None) ||169 Filtering != HIFIL_None) ||
165 (TheDriver.CCPrintHeadersFormat == HIFMT_JSON &&170 (TheDriver.CCPrintHeadersFormat == HIFMT_JSON &&
166 Filtering != HIFIL_Only_Direct_System)) {171 Filtering == HIFIL_None)) {
167 TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination)172 TheDriver.Diag(clang::diag::err_drv_print_header_env_var_combination)
168 << EnvVar << FilteringStr;173 << EnvVar << FilteringStr;
169 return false;174 return false;
...@@ -295,7 +300,7 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex...@@ -295,7 +300,7 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex
295 if (const char *OverrideStr = ::getenv("CCC_OVERRIDE_OPTIONS")) {300 if (const char *OverrideStr = ::getenv("CCC_OVERRIDE_OPTIONS")) {
296 // FIXME: Driver shouldn't take extra initial argument.301 // FIXME: Driver shouldn't take extra initial argument.
297 driver::applyOverrideOptions(Args, OverrideStr, SavedStrings,302 driver::applyOverrideOptions(Args, OverrideStr, SavedStrings,
298 &llvm::errs());303 "CCC_OVERRIDE_OPTIONS", &llvm::errs());
299 }304 }
300305
301 std::string Path = GetExecutablePath(ToolContext.Path, CanonicalPrefixes);306 std::string Path = GetExecutablePath(ToolContext.Path, CanonicalPrefixes);
...@@ -311,21 +316,24 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex...@@ -311,21 +316,24 @@ static int clang_main(int Argc, char **Argv, const llvm::ToolContext &ToolContex
311 .Case("-fintegrated-cc1", false)316 .Case("-fintegrated-cc1", false)
312 .Default(UseNewCC1Process);317 .Default(UseNewCC1Process);
313318
314 IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts =319 std::unique_ptr<DiagnosticOptions> DiagOpts = CreateAndPopulateDiagOpts(Args);
315 CreateAndPopulateDiagOpts(Args);320 // Driver's diagnostics don't use suppression mappings, so don't bother
321 // parsing them. CC1 still receives full args, so this doesn't impact other
322 // actions.
323 DiagOpts->DiagnosticSuppressionMappingsFile.clear();
316324
317 TextDiagnosticPrinter *DiagClient325 TextDiagnosticPrinter *DiagClient =
318 = new TextDiagnosticPrinter(llvm::errs(), &*DiagOpts);326 new TextDiagnosticPrinter(llvm::errs(), *DiagOpts);
319 FixupDiagPrefixExeName(DiagClient, ProgName);327 FixupDiagPrefixExeName(DiagClient, ProgName);
320328
321 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());329 IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs());
322330
323 DiagnosticsEngine Diags(DiagID, &*DiagOpts, DiagClient);331 DiagnosticsEngine Diags(DiagID, *DiagOpts, DiagClient);
324332
325 if (!DiagOpts->DiagnosticSerializationFile.empty()) {333 if (!DiagOpts->DiagnosticSerializationFile.empty()) {
326 auto SerializedConsumer =334 auto SerializedConsumer =
327 clang::serialized_diags::create(DiagOpts->DiagnosticSerializationFile,335 clang::serialized_diags::create(DiagOpts->DiagnosticSerializationFile,
328 &*DiagOpts, /*MergeChildRecords=*/true);336 *DiagOpts, /*MergeChildRecords=*/true);
329 Diags.setClient(new ChainedDiagnosticConsumer(337 Diags.setClient(new ChainedDiagnosticConsumer(
330 Diags.takeClient(), std::move(SerializedConsumer)));338 Diags.takeClient(), std::move(SerializedConsumer)));
331 }339 }
src/zig_llvm-ar.cpp+1-1
...@@ -130,7 +130,7 @@ MODIFIERS:...@@ -130,7 +130,7 @@ MODIFIERS:
130 << "USAGE: " + ToolName +130 << "USAGE: " + ToolName +
131 " [options] [-]<operation>[modifiers] [relpos] "131 " [options] [-]<operation>[modifiers] [relpos] "
132 "[count] <archive> [files]\n"132 "[count] <archive> [files]\n"
133 << " " + ToolName + " -M [<mri-script]\n\n";133 << " " + ToolName + " -M [< mri-script]\n\n";
134134
135 outs() << ArOptions;135 outs() << ArOptions;
136}136}