diff options
Diffstat (limited to 'lib/Driver/ToolChains/MinGW.cpp')
| -rw-r--r-- | lib/Driver/ToolChains/MinGW.cpp | 38 | 
1 files changed, 21 insertions, 17 deletions
diff --git a/lib/Driver/ToolChains/MinGW.cpp b/lib/Driver/ToolChains/MinGW.cpp index 2d5217d03d3a4..0e1873cce25be 100644 --- a/lib/Driver/ToolChains/MinGW.cpp +++ b/lib/Driver/ToolChains/MinGW.cpp @@ -1,9 +1,8 @@  //===--- MinGW.cpp - MinGWToolChain Implementation ------------------------===//  // -//                     The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception  //  //===----------------------------------------------------------------------===// @@ -54,7 +53,7 @@ void tools::MinGW::Assembler::ConstructJob(Compilation &C, const JobAction &JA,    if (Args.hasArg(options::OPT_gsplit_dwarf))      SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, -                   SplitDebugName(Args, Output)); +                   SplitDebugName(Args, Inputs[0], Output));  }  void tools::MinGW::Linker::AddLibGCC(const ArgList &Args, @@ -249,22 +248,24 @@ void tools::MinGW::Linker::ConstructJob(Compilation &C, const JobAction &JA,        if (Sanitize.needsAsanRt()) {          // MinGW always links against a shared MSVCRT. -        CmdArgs.push_back( -            TC.getCompilerRTArgString(Args, "asan_dynamic", true)); +        CmdArgs.push_back(TC.getCompilerRTArgString(Args, "asan_dynamic", +                                                    ToolChain::FT_Shared));          CmdArgs.push_back(              TC.getCompilerRTArgString(Args, "asan_dynamic_runtime_thunk")); -        CmdArgs.push_back(Args.MakeArgString("--require-defined")); -        CmdArgs.push_back(Args.MakeArgString(TC.getArch() == llvm::Triple::x86 -                                                 ? "___asan_seh_interceptor" -                                                 : "__asan_seh_interceptor")); +        CmdArgs.push_back("--require-defined"); +        CmdArgs.push_back(TC.getArch() == llvm::Triple::x86 +                              ? "___asan_seh_interceptor" +                              : "__asan_seh_interceptor");          // Make sure the linker consider all object files from the dynamic          // runtime thunk. -        CmdArgs.push_back(Args.MakeArgString("--whole-archive")); -        CmdArgs.push_back(Args.MakeArgString( -            TC.getCompilerRT(Args, "asan_dynamic_runtime_thunk"))); -        CmdArgs.push_back(Args.MakeArgString("--no-whole-archive")); +        CmdArgs.push_back("--whole-archive"); +        CmdArgs.push_back( +            TC.getCompilerRTArgString(Args, "asan_dynamic_runtime_thunk")); +        CmdArgs.push_back("--no-whole-archive");        } +      TC.addProfileRTLibs(Args, CmdArgs); +        if (!HasWindowsApp) {          // Add system libraries. If linking to libwindowsapp.a, that import          // library replaces all these and we shouldn't accidentally try to @@ -435,7 +436,8 @@ bool toolchains::MinGW::IsUnwindTablesDefault(const ArgList &Args) const {    if (ExceptionArg &&        ExceptionArg->getOption().matches(options::OPT_fseh_exceptions))      return true; -  return getArch() == llvm::Triple::x86_64; +  return getArch() == llvm::Triple::x86_64 || +         getArch() == llvm::Triple::aarch64;  }  bool toolchains::MinGW::isPICDefault() const { @@ -450,7 +452,7 @@ bool toolchains::MinGW::isPICDefaultForced() const {  llvm::ExceptionHandling  toolchains::MinGW::GetExceptionModel(const ArgList &Args) const { -  if (getArch() == llvm::Triple::x86_64) +  if (getArch() == llvm::Triple::x86_64 || getArch() == llvm::Triple::aarch64)      return llvm::ExceptionHandling::WinEH;    return llvm::ExceptionHandling::DwarfCFI;  } @@ -458,6 +460,8 @@ toolchains::MinGW::GetExceptionModel(const ArgList &Args) const {  SanitizerMask toolchains::MinGW::getSupportedSanitizers() const {    SanitizerMask Res = ToolChain::getSupportedSanitizers();    Res |= SanitizerKind::Address; +  Res |= SanitizerKind::PointerCompare; +  Res |= SanitizerKind::PointerSubtract;    return Res;  }  | 
