diff --git a/lld/Common/ErrorHandler.cpp b/lld/Common/ErrorHandler.cpp --- a/lld/Common/ErrorHandler.cpp +++ b/lld/Common/ErrorHandler.cpp @@ -192,12 +192,12 @@ reportDiagnostic(logName, Colors::RESET, "", msg); } -void ErrorHandler::message(const Twine &msg) { +void ErrorHandler::message(const Twine &msg, llvm::raw_ostream &s) { if (disableOutput) return; std::lock_guard lock(mu); - lld::outs() << msg << "\n"; - lld::outs().flush(); + s << msg << "\n"; + s.flush(); } void ErrorHandler::warn(const Twine &msg) { diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -1364,15 +1364,17 @@ config->platform() == PlatformKind::macOS); if (args.hasArg(OPT_v)) { - message(getLLDVersion()); + message(getLLDVersion(), lld::errs()); message(StringRef("Library search paths:") + - (config->librarySearchPaths.empty() - ? "" - : "\n\t" + join(config->librarySearchPaths, "\n\t"))); + (config->librarySearchPaths.empty() + ? "" + : "\n\t" + join(config->librarySearchPaths, "\n\t")), + lld::errs()); message(StringRef("Framework search paths:") + - (config->frameworkSearchPaths.empty() - ? "" - : "\n\t" + join(config->frameworkSearchPaths, "\n\t"))); + (config->frameworkSearchPaths.empty() + ? "" + : "\n\t" + join(config->frameworkSearchPaths, "\n\t")), + lld::errs()); } config->progName = argsArr[0]; diff --git a/lld/include/lld/Common/ErrorHandler.h b/lld/include/lld/Common/ErrorHandler.h --- a/lld/include/lld/Common/ErrorHandler.h +++ b/lld/include/lld/Common/ErrorHandler.h @@ -109,7 +109,7 @@ void error(const Twine &msg, ErrorTag tag, ArrayRef args); [[noreturn]] void fatal(const Twine &msg); void log(const Twine &msg); - void message(const Twine &msg); + void message(const Twine &msg, llvm::raw_ostream &s); void warn(const Twine &msg); void reset() { @@ -137,7 +137,9 @@ } [[noreturn]] inline void fatal(const Twine &msg) { errorHandler().fatal(msg); } inline void log(const Twine &msg) { errorHandler().log(msg); } -inline void message(const Twine &msg) { errorHandler().message(msg); } +inline void message(const Twine &msg, llvm::raw_ostream &s = outs()) { + errorHandler().message(msg, s); +} inline void warn(const Twine &msg) { errorHandler().warn(msg); } inline uint64_t errorCount() { return errorHandler().errorCount; } diff --git a/lld/test/MachO/syslibroot.test b/lld/test/MachO/syslibroot.test --- a/lld/test/MachO/syslibroot.test +++ b/lld/test/MachO/syslibroot.test @@ -1,68 +1,77 @@ # Ensure that a nonexistent path is ignored with a syslibroot +# Don't use %lld to not pick up the default syslibroot flag. -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot /var/empty | FileCheck %s -check-prefix CHECK-NONEXISTENT-SYSLIBROOT +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot /var/empty 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-NONEXISTENT-SYSLIBROOT CHECK-NONEXISTENT-SYSLIBROOT: Library search paths: CHECK-NONEXISTENT-SYSLIBROOT-NEXT: Framework search paths: RUN: mkdir -p %t/usr/lib -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t 2>&1 | FileCheck %s -check-prefix CHECK-SYSLIBROOT -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-SYSLIBROOT -DROOT=%t CHECK-SYSLIBROOT-NOT: directory not found{{.*}}usr/local/lib CHECK-SYSLIBROOT: Library search paths: CHECK-SYSLIBROOT-NEXT: [[ROOT]]/usr/lib RUN: mkdir -p %t/Library/libxml2-development -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t -L /Library/libxml2-development | FileCheck %s -check-prefix CHECK-ABSOLUTE-PATH-REROOTED -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t -L /Library/libxml2-development 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-ABSOLUTE-PATH-REROOTED -DROOT=%t CHECK-ABSOLUTE-PATH-REROOTED: Library search paths: CHECK-ABSOLUTE-PATH-REROOTED: [[ROOT]]/Library/libxml2-development CHECK-ABSOLUTE-PATH-REROOTED: [[ROOT]]/usr/lib -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t -L %t/Library/libxml2-development | FileCheck %s -check-prefix CHECK-PATH-WITHOUT-REROOT -DPATH=%t/Library/libxml2-development +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t -L %t/Library/libxml2-development 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-PATH-WITHOUT-REROOT -DPATH=%t/Library/libxml2-development CHECK-PATH-WITHOUT-REROOT: Library search paths: CHECK-PATH-WITHOUT-REROOT-NEXT: [[PATH]] RUN: mkdir -p %t.2/usr/lib -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t -syslibroot %t.2 | FileCheck %s -check-prefix CHECK-SYSLIBROOT-MATRIX -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t -syslibroot %t.2 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-SYSLIBROOT-MATRIX -DROOT=%t CHECK-SYSLIBROOT-MATRIX: Library search paths: CHECK-SYSLIBROOT-MATRIX: [[ROOT]]/usr/lib CHECK-SYSLIBROOT-MATRIX: [[ROOT]].2/usr/lib -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t -syslibroot %t.2 -syslibroot / | \ -RUN: FileCheck %s -check-prefix CHECK-SYSLIBROOT-IGNORED -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t -syslibroot %t.2 -syslibroot / 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-SYSLIBROOT-IGNORED -DROOT=%t CHECK-SYSLIBROOT-IGNORED: Library search paths: CHECK-SYSLIBROOT-IGNORED-NOT: [[ROOT]]/usr/lib CHECK-SYSLIBROOT-IGNORED-NOT: [[ROOT]].2/usr/lib RUN: mkdir -p %t/System/Library/Frameworks -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t | FileCheck %s -check-prefix CHECK-SYSLIBROOT-FRAMEWORK -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-SYSLIBROOT-FRAMEWORK -DROOT=%t CHECK-SYSLIBROOT-FRAMEWORK: Framework search paths: CHECK-SYSLIBROOT-FRAMEWORK: [[ROOT]]/System/Library/Frameworks RUN: mkdir -p %t/Library/Frameworks RUN: mkdir -p %t.2/Library/Frameworks -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t -syslibroot %t.2 -F /Library/Frameworks | \ -RUN: FileCheck %s -check-prefix CHECK-SYSLIBROOT-FRAMEWORK-MATRIX -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t -syslibroot %t.2 \ +RUN: -F /Library/Frameworks 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-SYSLIBROOT-FRAMEWORK-MATRIX -DROOT=%t CHECK-SYSLIBROOT-FRAMEWORK-MATRIX: Framework search paths: CHECK-SYSLIBROOT-FRAMEWORK-MATRIX: [[ROOT]]/Library/Frameworks CHECK-SYSLIBROOT-FRAMEWORK-MATRIX: [[ROOT]].2/Library/Frameworks -RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib -o /dev/null \ -RUN: -syslibroot %t -syslibroot %t.2 -syslibroot / -F /Library/Frameworks | \ -RUN: FileCheck %s -check-prefix CHECK-SYSLIBROOT-FRAMEWORK-IGNORED -DROOT=%t +RUN: ld64.lld -arch x86_64 -platform_version macos 10 11 -v -dylib \ +RUN: -o /dev/null -syslibroot %t -syslibroot %t.2 -syslibroot / \ +RUN: -F /Library/Frameworks 2>&1 \ +RUN: | FileCheck %s -check-prefix CHECK-SYSLIBROOT-FRAMEWORK-IGNORED -DROOT=%t CHECK-SYSLIBROOT-FRAMEWORK-IGNORED: Framework search paths: CHECK-SYSLIBROOT-FRAMEWORK-IGNORED-NOT: [[ROOT]]/Library/Frameworks