mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-09 20:34:54 +00:00
lld-link: Add --color-diagnostics(={always,never,auto})?, --no-color-diagnostics flags.
This is most useful when using lld-link on a non-Win host (but it might become useful on Windows too if lld also grows a fansi-escape-codes flag). Also make the help for --color-diagnostic mention the valid values in ELF and wasm, and print the flag name with two dashes in diags, since the one-dash form is seen as a list of many one-letter flags in some contexts. https://reviews.llvm.org/D46693 llvm-svn: 332012
This commit is contained in:
parent
d6beb320b4
commit
cac2b3349e
@ -756,6 +756,28 @@ static const llvm::opt::OptTable::Info InfoTable[] = {
|
|||||||
|
|
||||||
COFFOptTable::COFFOptTable() : OptTable(InfoTable, true) {}
|
COFFOptTable::COFFOptTable() : OptTable(InfoTable, true) {}
|
||||||
|
|
||||||
|
// Set color diagnostics according to --color-diagnostics={auto,always,never}
|
||||||
|
// or --no-color-diagnostics flags.
|
||||||
|
static void handleColorDiagnostics(opt::InputArgList &Args) {
|
||||||
|
auto *Arg = Args.getLastArg(OPT_color_diagnostics, OPT_color_diagnostics_eq,
|
||||||
|
OPT_no_color_diagnostics);
|
||||||
|
if (!Arg)
|
||||||
|
return;
|
||||||
|
if (Arg->getOption().getID() == OPT_color_diagnostics) {
|
||||||
|
errorHandler().ColorDiagnostics = true;
|
||||||
|
} else if (Arg->getOption().getID() == OPT_no_color_diagnostics) {
|
||||||
|
errorHandler().ColorDiagnostics = false;
|
||||||
|
} else {
|
||||||
|
StringRef S = Arg->getValue();
|
||||||
|
if (S == "always")
|
||||||
|
errorHandler().ColorDiagnostics = true;
|
||||||
|
else if (S == "never")
|
||||||
|
errorHandler().ColorDiagnostics = false;
|
||||||
|
else if (S != "auto")
|
||||||
|
error("unknown option: --color-diagnostics=" + S);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static cl::TokenizerCallback getQuotingStyle(opt::InputArgList &Args) {
|
static cl::TokenizerCallback getQuotingStyle(opt::InputArgList &Args) {
|
||||||
if (auto *Arg = Args.getLastArg(OPT_rsp_quoting)) {
|
if (auto *Arg = Args.getLastArg(OPT_rsp_quoting)) {
|
||||||
StringRef S = Arg->getValue();
|
StringRef S = Arg->getValue();
|
||||||
@ -799,6 +821,9 @@ opt::InputArgList ArgParser::parse(ArrayRef<const char *> Argv) {
|
|||||||
|
|
||||||
if (MissingCount)
|
if (MissingCount)
|
||||||
fatal(Twine(Args.getArgString(MissingIndex)) + ": missing argument");
|
fatal(Twine(Args.getArgString(MissingIndex)) + ": missing argument");
|
||||||
|
|
||||||
|
handleColorDiagnostics(Args);
|
||||||
|
|
||||||
for (auto *Arg : Args.filtered(OPT_UNKNOWN))
|
for (auto *Arg : Args.filtered(OPT_UNKNOWN))
|
||||||
warn("ignoring unknown argument: " + Arg->getSpelling());
|
warn("ignoring unknown argument: " + Arg->getSpelling());
|
||||||
return Args;
|
return Args;
|
||||||
|
@ -20,6 +20,10 @@ def align : P<"align", "Section alignment">;
|
|||||||
def aligncomm : P<"aligncomm", "Set common symbol alignment">;
|
def aligncomm : P<"aligncomm", "Set common symbol alignment">;
|
||||||
def alternatename : P<"alternatename", "Define weak alias">;
|
def alternatename : P<"alternatename", "Define weak alias">;
|
||||||
def base : P<"base", "Base address of the program">;
|
def base : P<"base", "Base address of the program">;
|
||||||
|
def color_diagnostics: Flag<["--"], "color-diagnostics">,
|
||||||
|
HelpText<"Use colors in diagnostics">;
|
||||||
|
def color_diagnostics_eq: Joined<["--"], "color-diagnostics=">,
|
||||||
|
HelpText<"Use colors in diagnostics; one of 'always', 'never', 'auto'">;
|
||||||
def defaultlib : P<"defaultlib", "Add the library to the list of input files">;
|
def defaultlib : P<"defaultlib", "Add the library to the list of input files">;
|
||||||
def delayload : P<"delayload", "Delay loaded DLL name">;
|
def delayload : P<"delayload", "Delay loaded DLL name">;
|
||||||
def entry : P<"entry", "Name of entry point symbol">;
|
def entry : P<"entry", "Name of entry point symbol">;
|
||||||
@ -46,6 +50,8 @@ def opt : P<"opt", "Control optimizations">;
|
|||||||
def order : P<"order", "Put functions in order">;
|
def order : P<"order", "Put functions in order">;
|
||||||
def out : P<"out", "Path to file to write output">;
|
def out : P<"out", "Path to file to write output">;
|
||||||
def natvis : P<"natvis", "Path to natvis file to embed in the PDB">;
|
def natvis : P<"natvis", "Path to natvis file to embed in the PDB">;
|
||||||
|
def no_color_diagnostics: F<"no-color-diagnostics">,
|
||||||
|
HelpText<"Do not use colors in diagnostics">;
|
||||||
def pdb : P<"pdb", "PDB file path">;
|
def pdb : P<"pdb", "PDB file path">;
|
||||||
def pdbaltpath : P<"pdbaltpath", "PDB file path to embed in the image">;
|
def pdbaltpath : P<"pdbaltpath", "PDB file path to embed in the image">;
|
||||||
def section : P<"section", "Specify section attributes">;
|
def section : P<"section", "Specify section attributes">;
|
||||||
|
@ -59,18 +59,18 @@ static void handleColorDiagnostics(opt::InputArgList &Args) {
|
|||||||
OPT_no_color_diagnostics);
|
OPT_no_color_diagnostics);
|
||||||
if (!Arg)
|
if (!Arg)
|
||||||
return;
|
return;
|
||||||
else if (Arg->getOption().getID() == OPT_color_diagnostics)
|
if (Arg->getOption().getID() == OPT_color_diagnostics) {
|
||||||
errorHandler().ColorDiagnostics = true;
|
errorHandler().ColorDiagnostics = true;
|
||||||
else if (Arg->getOption().getID() == OPT_no_color_diagnostics)
|
} else if (Arg->getOption().getID() == OPT_no_color_diagnostics) {
|
||||||
errorHandler().ColorDiagnostics = false;
|
errorHandler().ColorDiagnostics = false;
|
||||||
else {
|
} else {
|
||||||
StringRef S = Arg->getValue();
|
StringRef S = Arg->getValue();
|
||||||
if (S == "always")
|
if (S == "always")
|
||||||
errorHandler().ColorDiagnostics = true;
|
errorHandler().ColorDiagnostics = true;
|
||||||
else if (S == "never")
|
else if (S == "never")
|
||||||
errorHandler().ColorDiagnostics = false;
|
errorHandler().ColorDiagnostics = false;
|
||||||
else if (S != "auto")
|
else if (S != "auto")
|
||||||
error("unknown option: -color-diagnostics=" + S);
|
error("unknown option: --color-diagnostics=" + S);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ def color_diagnostics: F<"color-diagnostics">,
|
|||||||
HelpText<"Use colors in diagnostics">;
|
HelpText<"Use colors in diagnostics">;
|
||||||
|
|
||||||
def color_diagnostics_eq: J<"color-diagnostics=">,
|
def color_diagnostics_eq: J<"color-diagnostics=">,
|
||||||
HelpText<"Use colors in diagnostics">;
|
HelpText<"Use colors in diagnostics; one of 'always', 'never', 'auto'">;
|
||||||
|
|
||||||
defm cref: B<"cref",
|
defm cref: B<"cref",
|
||||||
"Output cross reference table",
|
"Output cross reference table",
|
||||||
|
@ -111,19 +111,18 @@ static void handleColorDiagnostics(opt::InputArgList &Args) {
|
|||||||
OPT_no_color_diagnostics);
|
OPT_no_color_diagnostics);
|
||||||
if (!Arg)
|
if (!Arg)
|
||||||
return;
|
return;
|
||||||
|
if (Arg->getOption().getID() == OPT_color_diagnostics) {
|
||||||
if (Arg->getOption().getID() == OPT_color_diagnostics)
|
|
||||||
errorHandler().ColorDiagnostics = true;
|
errorHandler().ColorDiagnostics = true;
|
||||||
else if (Arg->getOption().getID() == OPT_no_color_diagnostics)
|
} else if (Arg->getOption().getID() == OPT_no_color_diagnostics) {
|
||||||
errorHandler().ColorDiagnostics = false;
|
errorHandler().ColorDiagnostics = false;
|
||||||
else {
|
} else {
|
||||||
StringRef S = Arg->getValue();
|
StringRef S = Arg->getValue();
|
||||||
if (S == "always")
|
if (S == "always")
|
||||||
errorHandler().ColorDiagnostics = true;
|
errorHandler().ColorDiagnostics = true;
|
||||||
if (S == "never")
|
else if (S == "never")
|
||||||
errorHandler().ColorDiagnostics = false;
|
errorHandler().ColorDiagnostics = false;
|
||||||
if (S != "auto")
|
else if (S != "auto")
|
||||||
error("unknown option: -color-diagnostics=" + S);
|
error("unknown option: --color-diagnostics=" + S);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ def color_diagnostics: F<"color-diagnostics">,
|
|||||||
HelpText<"Use colors in diagnostics">;
|
HelpText<"Use colors in diagnostics">;
|
||||||
|
|
||||||
def color_diagnostics_eq: J<"color-diagnostics=">,
|
def color_diagnostics_eq: J<"color-diagnostics=">,
|
||||||
HelpText<"Use colors in diagnostics">;
|
HelpText<"Use colors in diagnostics; one of 'always', 'never', 'auto'">;
|
||||||
|
|
||||||
defm demangle: B<"demangle",
|
defm demangle: B<"demangle",
|
||||||
"Demangle symbol names",
|
"Demangle symbol names",
|
||||||
|
Loading…
Reference in New Issue
Block a user