1. Feb 03, 2017
    • Bob Haarman's avatar
      refactor COFF linker to use new LTO API · cde5e5b6
      Bob Haarman authored
      Summary: The COFF linker previously implemented link-time optimization using an API which has now been marked as legacy. This change refactors the COFF linker to use the new LTO API, which is also used by the ELF linker.
      
      Reviewers: pcc, ruiu
      
      Reviewed By: pcc
      
      Subscribers: mgorny, mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D29059
      
      llvm-svn: 293967
      cde5e5b6
    • Bob Haarman's avatar
      added missing files for r293965 · fbc229dc
      Bob Haarman authored
      llvm-svn: 293966
      fbc229dc
    • Bob Haarman's avatar
      add the ability to call InitTargetOptionsFromCodeGenFlags from multiple objects · 35989d6b
      Bob Haarman authored
      Summary: llvm/CodeGen/CommandFlags.h a utility function InitTargetOptionsFromCodeGenFlags which is used to set target options from flags based on the command line. The command line flags are stored in globals defined in the same file, and including the file in multiple places causes the globals to be defined multiple times, leading to linker errors. This change adds a single place in lld where these globals are defined and exports only the utility function. This makes it possible to call InitTargetOptionsFromCodeGenFlags from multiple places in lld, which a follow-up change will do.
      
      Reviewers: davide, ruiu
      
      Reviewed By: davide, ruiu
      
      Subscribers: mgorny
      
      Differential Revision: https://reviews.llvm.org/D29058
      
      llvm-svn: 293965
      35989d6b
    • Konstantin Zhuravlyov's avatar
      803b141f
    • Rui Ueyama's avatar
      Update comments. · 6697ec29
      Rui Ueyama authored
      llvm-svn: 293963
      6697ec29
    • Matt Arsenault's avatar
      AMDGPU: Check if users of fneg can fold mods · a8fcfadf
      Matt Arsenault authored
      In multi-use cases this can save a few instructions.
      
      llvm-svn: 293962
      a8fcfadf
    • Mehdi Amini's avatar
      Revert "[ThinLTO] Add an auto-hide feature" · 21c89dc9
      Mehdi Amini authored
      This reverts commit r293918, one lld test does not pass.
      
      llvm-svn: 293961
      21c89dc9
    • Bob Haarman's avatar
      [lto] added getCOFFWeakExternalFallback · e4062dfd
      Bob Haarman authored
      Summary: This allows clients of the LTO API to determine the name of the fallback symbol for COFF weak externals.
      
      Reviewers: pcc
      
      Reviewed By: pcc
      
      Subscribers: mehdi_amini
      
      Differential Revision: https://reviews.llvm.org/D29365
      
      llvm-svn: 293960
      e4062dfd
    • Marcos Pividori's avatar
      [sancov] Define delimiters for sanitizer coverage's binary section on Windows. · c1f8a824
      Marcos Pividori authored
      On Windows, the symbols "___stop___sancov_guards" and "___start___sancov_guards"
      are not defined automatically. So, we need to take a different approach.
      We define 3 sections: ".SCOV$A", ".SCOV$M" and ".SCOV$Z".
      
       Section ".SCOV$A" will only hold a variable ___start___sancov_guard.
       Section ".SCOV$M" will hold the main data.
       Section ".SCOV$Z" will only hold a variable ___stop___sancov_guards.
      
      When linking, they will be merged sorted by the characters after the $, so we
      can use the pointers of the variables ___[start|stop]___sancov_guard to know the
      actual range of addresses of that section.
      
      ___[start|stop]___sancov_guard should be defined only once per module. On
      Windows, we have 2 different cases:
      
      + When considering a shared runtime:
       All the modules, main executable and dlls, are linked to an auxiliary static
       library dynamic_runtime_thunk.lib. Because of that, we include the delimiters
       in `SancovDynamicRuntimeThunk`.
      
      + When considering a static runtime:
       The main executable in linked to the static runtime library.
       All the dlls are linked to an auxiliary static library dll_thunk.
       Because of that, we include the delimiter to both `SancovDllThunk` and
       `SANITIZER_LIBCDEP_SOURCES` (which is included in the static runtime lib).
      
      Differential Revision: https://reviews.llvm.org/D28435
      
      llvm-svn: 293959
      c1f8a824
    • Marcos Pividori's avatar
      [sanitizer] Use interception to access to strong definitions in the executable. · 2b9c44e2
      Marcos Pividori authored
      In Windows, when sanitizers are implemented as a shared library (DLL), users can
      redefine and export a new definition for weak functions, in the main executable,
      for example:
      
      extern "C" __declspec(dllexport)
      void __sanitizer_cov_trace_pc_guard(u32* guard) {
        // Different implementation provided by the client.
      }
      
      However, other dlls, will continue using the default implementation imported
      from the sanitizer dll. This is different in linux, where all the shared
      libraries will consider the strong definition.
      
      With the implementation in this diff, when the dll is initialized, it will check
      if the main executable exports the definition for some weak function (for
      example __sanitizer_cov_trace_pc_guard). If it finds that function, then it will
      override the function in the dll with that pointer. So, all the dlls with
      instrumentation that import __sanitizer_cov_trace_pc_guard__dll() from asan dll,
      will be using the function provided by the main executable.
      
      In other words, when the main executable exports a strong definition for a weak
      function, we ensure all the dlls use that implementation instead of the default
      weak implementation.
      
      The behavior is similar to linux. Now, every user that want to override a weak
      function, only has to define and export it. The same for Linux and Windows, and
      it will work fine. So, there is no difference on the user's side.
      
      All the sanitizers will include a file sanitizer_win_weak_interception.cc that
      register sanitizer's weak functions to be intercepted in the binary section WEAK
      
      When the sanitizer dll is initialized, it will execute weak_intercept_init()
      which will consider all the CB registered in the section WEAK. So, for all the
      weak functions registered, we will check if a strong definition is provided in
      the main executable.
      
      All the files sanitizer_win_weak_interception.cc are independent, so we do not
      need to include a specific list of sanitizers.
      Now, we include [asan|ubsan|sanitizer_coverage]_win_weak_interception.cc and
      sanitizer_win_weak_interception.cc in asan dll, so when it is initialized, it
      will consider all the weak functions from asan, ubsan and sanitizer coverage.
      
      After this diff, sanitizer coverage is fixed for MD on Windows. In particular
      libFuzzer can provide custom implementation for all sanitizer coverage's weak
      functions, and they will be considered by asan dll.
      
      Differential Revision: https://reviews.llvm.org/D29168
      
      llvm-svn: 293958
      2b9c44e2
    • Marcos Pividori's avatar
      [asan] Intercept SetUnhandledExceptionFilter. · e49ec6d5
      Marcos Pividori authored
      In this diff I update the code for asan on Windows, so we can intercept
      SetUnhandledExceptionFilter and catch some exceptions depending on the result of
      IsHandledDeadlyException() (which depends on asan flags).
      
      This way we have the same behavior on Windows and Posix systems.
      On Posix, we intercept signal and sigaction, so user's code can only register
      signal handlers for signals that are not handled by asan.
      After this diff, the same happens on Windows, user's code can only register
      exception handlers for exceptions that are not handled by asan.
      
      Differential Revision: https://reviews.llvm.org/D29463
      
      llvm-svn: 293957
      e49ec6d5
    • Marcos Pividori's avatar
      [sanitizer] Move DescribeSignalOrException to sanitizer_common. · fe9288a6
      Marcos Pividori authored
      Differential Revision: https://reviews.llvm.org/D29459
      
      llvm-svn: 293956
      fe9288a6
    • Marcos Pividori's avatar
      [sanitizer] Move exception code to sanitizer_common. · ee22156b
      Marcos Pividori authored
      Differential Revision: https://reviews.llvm.org/D29458
      
      llvm-svn: 293955
      ee22156b
    • Marcos Pividori's avatar
      [asan] Properly handle exceptions. · 387210c6
      Marcos Pividori authored
      Differential Revision: https://reviews.llvm.org/D29457
      
      llvm-svn: 293954
      387210c6
    • Marcos Pividori's avatar
      [sanitizer] Add dynamic_runtime_thunk for different sanitizers. · b88e87d4
      Marcos Pividori authored
      In Windows, when the sanitizer is implemented as a shared library (DLL), we need
      an auxiliary static library dynamic_runtime_thunk that will be linked to the
      main executable and dlls.
      
      In the sanitizer DLL, we are exposing weak functions with WIN_WEAK_EXPORT_DEF(),
      which exports the default implementation with __dll suffix. For example: for
      sanitizer coverage, the default implementation of __sanitizer_cov_trace_cmp is
      exported as: __sanitizer_cov_trace_cmp__dll.
      
      In the dynamic_runtime_thunk static library, we include weak aliases to the
      imported implementation from the dll, using the macro WIN_WEAK_IMPORT_DEF().
      
      By default, all users's programs that include calls to weak functions like
      __sanitizer_cov_trace_cmp, will be redirected to the implementation in the dll,
      when linking to dynamic_runtime_thunk.
      
      After this diff, we are able to compile code with sanitizer coverage
      instrumentation on Windows. When the instrumented object files are linked with
      clang-rt_asan_dynamic_runtime_thunk-arch.lib all the weak symbols will be
      resolved to the implementation imported from asan dll.
      
      All the files sanitizer_dynamic_runtime_thunk.cc are independent, so we do not
      need to include a specific list of sanitizers.
      Now, we compile: [asan|ubsan|sanitizer_coverage]_win_dynamic_runtime_thunk.cc
      and sanitizer_win_dynamic_runtime_thunk.cc to generate
      asan_dynamic_runtime_thunk.lib, because we include asan, ubsan and sanitizer
      coverage in the address sanitizer library.
      
      Differential Revision: https://reviews.llvm.org/D29158
      
      llvm-svn: 293953
      b88e87d4
    • Marcos Pividori's avatar
      [sanitizer] Intercept weak functions in dll_thunks. · f5d26546
      Marcos Pividori authored
      In this diff, I update current implementation of the interception in dll_thunks
      to consider the special case of weak functions.
      First we check if the client has redefined the function in the main executable
      (for example: __sanitizer_cov_trace_pc_guard). It we can't find it, then we look
      for the default implementation (__sanitizer_cov_trace_pc_guard__dll). The
      default implementation is always available because the static runtime is linked
      to the main executable.
      
      Differential Revision: https://reviews.llvm.org/D29155
      
      llvm-svn: 293952
      f5d26546
    • Marcos Pividori's avatar
      [sanitizer] Split dll_thunks into different sanitizers. · bfdfaa11
      Marcos Pividori authored
      When the sanitizer is implemented as a static library and is included in the
      main executable, we need an auxiliary static library dll_thunk that will be
      linked to the dlls that have instrumentation, so they can refer to the runtime
      in the main executable. Basically, it uses interception to get a pointer the
      function in the main executable and override its function with that pointer.
      
      Before this diff, all of the implementation for dll_thunks was included in asan.
      In this diff I split it into different sanitizers, so we can use other
      sanitizers regardless of whether we include asan or not.
      
      All the sanitizers include a file sanitizer_win_dll_thunk.cc that register
      functions to be intercepted in the binary section: DLLTH
      
      When the dll including dll_thunk is initialized, it will execute
      __dll_thunk_init() implemented in: sanitizer_common/sanitizer_win_dll_thunk.cc,
      which will consider all the CB registered in the section DLLTH. So, all the
      functions registered will be intercepted, and redirected to the implementation
      in the main executable.
      
      All the files "sanitizer_win_dll_thunk.cc" are independent, so we don't need to
      include a specific list of sanitizers. Now, we compile:  asan_win_dll_thunk.cc
      ubsan_win_dll_thunk.cc,  sanitizer_coverage_win_dll_thunk.cc and
      sanitizer_win_dll_thunk.cc, to generate asan_dll_thunk, because we include asan,
      ubsan and sanitizer coverage in the address sanitizer library.
      
      Differential Revision: https://reviews.llvm.org/D29154
      
      llvm-svn: 293951
      bfdfaa11
    • Bob Haarman's avatar
      [lto] add getLinkerOpts() · dd4ebc1d
      Bob Haarman authored
      Summary: Some compilers, including MSVC and Clang, allow linker options to be specified in source files. In the legacy LTO API, there is a getLinkerOpts() method that returns linker options for the bitcode module being processed. This change adds that method to the new API, so that the COFF linker can get the right linker options when using the new LTO API.
      
      Reviewers: pcc, ruiu, mehdi_amini, tejohnson
      
      Reviewed By: pcc
      
      Differential Revision: https://reviews.llvm.org/D29207
      
      llvm-svn: 293950
      dd4ebc1d
    • Eugene Zelenko's avatar
    • Pavel Labath's avatar
      Fix mac build breakage due to StringStream move · 09721835
      Pavel Labath authored
      llvm-svn: 293948
      09721835
    • Rafael Espindola's avatar
      Relax test so that it passes on OS X. · 6d60ca63
      Rafael Espindola authored
      llvm-svn: 293946
      6d60ca63
    • Reid Kleckner's avatar
      [X86] Avoid sorted order check in release builds · 3c467e22
      Reid Kleckner authored
      Effectively reverts r290248 and fixes the unused function warning with
      ifndef NDEBUG.
      
      llvm-svn: 293945
      3c467e22
    • Craig Topper's avatar
      [X86] Move turning 256-bit INSERT_SUBVECTORS into BLENDI from legalize to DAG combine. · c4565737
      Craig Topper authored
      On one test this seems to have given more chance for DAG combine to do other INSERT_SUBVECTOR/EXTRACT_SUBVECTOR combines before the BLENDI was created. Looks like we can still improve more by teaching DAG combine to optimize INSERT_SUBVECTOR/EXTRACT_SUBVECTOR with BLENDI.
      
      llvm-svn: 293944
      c4565737
    • Reid Kleckner's avatar
      [CodeGen] Remove dead call-or-prologue enum from CCState · c35139ec
      Reid Kleckner authored
      This enum has been dead since Olivier Stannard re-implemented ARM byval
      handling in r202985 (2014).
      
      llvm-svn: 293943
      c35139ec
    • Zachary Turner's avatar
      Move classes from Core -> Utility. · bf9a7730
      Zachary Turner authored
      This moves the following classes from Core -> Utility.
      
      ConstString
      Error
      RegularExpression
      Stream
      StreamString
      
      The goal here is to get lldbUtility into a state where it has
      no dependendencies except on itself and LLVM, so it can be the
      starting point at which to start untangling LLDB's dependencies.
      These are all low level and very widely used classes, and
      previously lldbUtility had dependencies up to lldbCore in order
      to use these classes.  So moving then down to lldbUtility makes
      sense from both the short term and long term perspective in
      solving this problem.
      
      Differential Revision: https://reviews.llvm.org/D29427
      
      llvm-svn: 293941
      bf9a7730
    • Bill Seurer's avatar
      [powerpc] deactivate user_malloc.cc tsan test on powerpc64le · f2611acf
      Bill Seurer authored
      This test fails consistently on Ubuntu 16.xx powerpc64 LE systems.
      The cause is being investigated and in the meantime disable it so
      the buildbots can run cleanly.
      
      llvm-svn: 293939
      f2611acf
    • Xinliang David Li's avatar
      [PGO] internal option cleanups · 58fcc9bd
      Xinliang David Li authored
      1. Added comments for options
      2. Added missing option cl::desc field
      3. Uniified function filter option for graph viewing.
         Now PGO count/raw-counts share the same
         filter option: -view-bfi-func-name=.
      
      llvm-svn: 293938
      58fcc9bd
    • Rafael Espindola's avatar
      Update for llvm change. · 7d99f827
      Rafael Espindola authored
      llvm-svn: 293937
      7d99f827
    • Rafael Espindola's avatar
      Change how we handle section symbols on ELF. · 13a79bbf
      Rafael Espindola authored
      On ELF every section can have a corresponding section symbol. When in
      an assembly file we have
      
      .quad .text
      
      the '.text' refers to that symbol.
      
      The way we used to handle them is to leave .text an undefined symbol
      until the very end when the object writer would map them to the
      actual section symbol.
      
      The problem with that is that anything before the end would see an
      undefined symbol. This could result in bad diagnostics
      (test/MC/AArch64/label-arithmetic-diags-elf.s), or incorrect results
      when using the asm streamer (est/MC/Mips/expansion-jal-sym-pic.s).
      
      Fixing this will also allow using the section symbol earlier for
      setting sh_link of SHF_METADATA sections.
      
      This patch includes a few hacks to avoid changing our behaviour when
      handling conflicts between section symbols and other symbols. I
      reported pr31850 to track that.
      
      llvm-svn: 293936
      13a79bbf
    • Javed Absar's avatar
      [ARM] Classification Improvements to ARM Sched-Model. NFCI. · bb8dcc6a
      Javed Absar authored
      This is the second in the series of patches to enable adding
      of machine sched-models for ARM processors easier and compact.
      This patch focuses on integer instructions and adds missing
      sched definitions.
      
      Reviewers: rovka, rengolin
      Differential Revision: https://reviews.llvm.org/D29127
      
      llvm-svn: 293935
      bb8dcc6a
    • Quentin Colombet's avatar
      [LiveRangeEdit] Don't mess up with LiveInterval when a new vreg is created. · 5725f56b
      Quentin Colombet authored
      In r283838, we added the capability of splitting unspillable register.
      When doing so we had to make sure the split live-ranges were also
      unspillable and we did that by marking the related live-ranges in the
      delegate method that is called when a new vreg is created.
      However, by accessing the live-range there, we also triggered their lazy
      computation (LiveIntervalAnalysis::getInterval) which is not what we
      want in general. Indeed, later code in LiveRangeEdit is going to build
      the live-ranges this lazy computation may mess up that computation
      resulting in assertion failures. Namely, the createEmptyIntervalFrom
      method expect that the live-range is going to be empty, not computed.
      
      Thanks to Mikael Holmén <mikael.holmen@ericsson.com> for noticing and
      reporting the problem.
      
      llvm-svn: 293934
      5725f56b
    • Krzysztof Parzyszek's avatar
      [Hexagon] Adding opExtentBits and opExtentAlign to GPrel instructions · d0d42f0e
      Krzysztof Parzyszek authored
      Patch by Colin LeMahieu.
      
      llvm-svn: 293933
      d0d42f0e
    • Michael Kuperstein's avatar
      e6d59fdc
    • Krzysztof Parzyszek's avatar
      [Hexagon] Fix relocation kind for extended predicated calls · e17b0bfb
      Krzysztof Parzyszek authored
      Patch by Sid Manning.
      
      llvm-svn: 293931
      e17b0bfb
    • Vitaly Buka's avatar
      [compiler-rt] Fix incorrect use of snprintf · 89d054fc
      Vitaly Buka authored
      Summary:
      snprintf returns buffer size needed for printing. If buffer was small, calling
      code receives incorrectly symbolized buffer and fail.
      
      Reviewers: eugenis
      
      Subscribers: kubamracek, dberris, kcc
      
      Differential Revision: https://reviews.llvm.org/D29440
      
      llvm-svn: 293930
      89d054fc
    • Krzysztof Parzyszek's avatar
      [Hexagon] Remove A4_ext_* pseudo instructions · 357b0486
      Krzysztof Parzyszek authored
      Patch by Colin LeMahieu.
      
      llvm-svn: 293929
      357b0486
    • Kostya Serebryany's avatar
      [libFuzzer] reorganize the tracing code to make it easier to experiment with... · 68382d09
      Kostya Serebryany authored
      [libFuzzer] reorganize the tracing code to make it easier to experiment with inlined coverage instrumentation. NFC
      
      llvm-svn: 293928
      68382d09
    • Eric Liu's avatar
      [change-namespace] trying to fix build bot failure caused by r293909. · 28c30ce2
      Eric Liu authored
      llvm-svn: 293927
      28c30ce2
    • Dan Albert's avatar
      Avoid implementation defined behavior in a test. · f9dc6670
      Dan Albert authored
      Summary:
      num_put::put uses %p for pointer types, but the exact format of %p is
      implementation defined behavior for the C library. Compare output to
      snprintf for portability.
      
      Reviewers: EricWF, mclow.lists
      
      Reviewed By: EricWF
      
      Subscribers: cfe-commits
      
      Differential Revision: https://reviews.llvm.org/D29197
      
      llvm-svn: 293926
      f9dc6670
    • Krzysztof Parzyszek's avatar
      d67ab623