diff --git a/lld/MachO/Config.h b/lld/MachO/Config.h --- a/lld/MachO/Config.h +++ b/lld/MachO/Config.h @@ -95,6 +95,7 @@ Symbol *entry = nullptr; bool hasReexports = false; bool allLoad = false; + bool archMultiple = false; bool forceLoadObjC = false; bool forceLoadSwift = false; bool staticLink = false; diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -1139,6 +1139,7 @@ error("--lto-O: invalid optimization level: " + Twine(config->ltoo)); config->runtimePaths = args::getStrings(args, OPT_rpath); config->allLoad = args.hasArg(OPT_all_load); + config->archMultiple = args.hasArg(OPT_arch_multiple); config->forceLoadObjC = args.hasArg(OPT_ObjC); config->forceLoadSwift = args.hasArg(OPT_force_load_swift_libs); config->deadStripDylibs = args.hasArg(OPT_dead_strip_dylibs); diff --git a/lld/MachO/Options.td b/lld/MachO/Options.td --- a/lld/MachO/Options.td +++ b/lld/MachO/Options.td @@ -877,7 +877,6 @@ Group; def arch_multiple : Flag<["-"], "arch_multiple">, HelpText<"Augment error and warning messages with the architecture name">, - Flags<[HelpHidden]>, Group; def dot : Separate<["-"], "dot">, MetaVarName<"">, diff --git a/lld/MachO/SymbolTable.cpp b/lld/MachO/SymbolTable.cpp --- a/lld/MachO/SymbolTable.cpp +++ b/lld/MachO/SymbolTable.cpp @@ -198,7 +198,10 @@ void lld::macho::treatUndefinedSymbol(const Undefined &sym, StringRef source) { auto message = [source, &sym]() { - std::string message = "undefined symbol: " + toString(sym); + std::string message = "undefined symbol"; + if (config->archMultiple) + message += (" for arch " + getArchitectureName(config->arch())).str(); + message += ": " + toString(sym); if (!source.empty()) message += "\n>>> referenced by " + source.str(); else diff --git a/lld/test/MachO/arch-multiple.s b/lld/test/MachO/arch-multiple.s new file mode 100644 --- /dev/null +++ b/lld/test/MachO/arch-multiple.s @@ -0,0 +1,11 @@ +# REQUIRES: x86 + +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-macos -o %t.o %s +# RUN: not %lld -o %t.out -arch_multiple %t.o 2>&1 | FileCheck %s + +# CHECK: error: undefined symbol for arch x86_64: _foo + +.globl _main +_main: + callq _foo + ret