[compiler-rt] r319165 - [XRay][compiler-rt][Darwin] Minimal XRay build support in Darwin

Dean Michael Berris via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 28 14:12:13 PST 2017


Hi Douglas (apologies for referring to you by your last name), I'm
attempting a reproduction myself locally. I'd be happy to revert, but it
would be great if we have some reproduction instructions.

On Wed, Nov 29, 2017 at 9:03 AM Dean Michael Berris <dberris at google.com>
wrote:

> Hi Yung -- I'm not sure how this change might cause this to break, but can
> you provide reproduction instructions?
>
> On Wed, Nov 29, 2017 at 6:51 AM Yung, Douglas <douglas.yung at sony.com>
> wrote:
>
>> Hi Dean,
>>
>> Your change seems to be causing linking failures on our internal linux
>> bot with tons of errors like this:
>>
>> FAILED: cd
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/projects/compiler-rt/lib/xray/tests/unit
>> && /home/siadmin/jenkins/w/opensource/opensource_build/build/./bin/clang
>> TEST_OBJECTS.fdr_logging_test.cc.x86_64.o
>> TEST_OBJECTS.xray_unit_test_main.cc.x86_64.o
>> TEST_OBJECTS.gtest-all.cc.x86_64.o -o
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/projects/compiler-rt/lib/xray/tests/unit/./XRayFDRLoggingTest-x86_64-Test
>> -fuse-ld=gold -Wl,-allow-shlib-undefined -fxray-instrument -lstdc++ -lm
>> -lpthread -lpthread -ldl -lrt -m64
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::getGlobalFd()'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::GlobalOptions'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::RecusionGuard'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::basicLoggingInit(unsigned long, unsigned
>> long, void*, unsigned long)'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::basicLoggingFlush()'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::getThreadLocalData()'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::basicLoggingFinalize()'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> multiple definition of '__xray::basicLogDynamicInitializer()'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_inmemory_log.cc.o):
>> previous definition here
>> ...
>> (many more lines of similar errors)
>> ...
>> /usr/bin/ld.gold: error:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_utils.cc.o):
>> multiple definition of '__xray::getLogFD()'
>> /usr/bin/ld.gold:
>> /home/siadmin/jenkins/w/opensource/opensource_build/build/lib/clang/6.0.0/lib/linux/libclang_rt.xray-x86_64.a(xray_utils.cc.o):
>> previous definition here
>> clang-6.0: error: linker command failed with exit code 1 (use -v to see
>> invocation)
>> ninja: build stopped: subcommand failed.
>>
>>
>> This bot simply builds the upstream sources (I would link to the our
>> upstream bot, but they all seem to be having issues at the moment) on
>> linux. Can you please look into this so that we can get the compiler-rt
>> build working again? Thanks!
>>
>> Douglas Yung
>>
>> > -----Original Message-----
>> > From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On
>> Behalf Of
>> > Dean Michael Berris via llvm-commits
>> > Sent: Tuesday, November 28, 2017 3:49
>> > To: llvm-commits at lists.llvm.org
>> > Subject: [compiler-rt] r319165 - [XRay][compiler-rt][Darwin] Minimal
>> XRay
>> > build support in Darwin
>> >
>> > Author: dberris
>> > Date: Tue Nov 28 03:49:22 2017
>> > New Revision: 319165
>> >
>> > URL: http://llvm.org/viewvc/llvm-project?rev=319165&view=rev
>> > Log:
>> > [XRay][compiler-rt][Darwin] Minimal XRay build support in Darwin
>> >
>> > This change is the first in a series of changes to get the XRay runtime
>> > building on macOS. This first allows us to build the minimal parts of
>> XRay to
>> > get us started on supporting macOS development. These include:
>> >
>> >   - CMake changes to allow targeting x86_64 initially.
>> >   - Allowing for building the initialisation routines without
>> >     `.preinit_array` support.
>> >   - Use __sanitizer::SleepForMillis() to work around the lack of
>> >     clock_nanosleep on macOS.
>> >   - Deprecate the xray_fdr_log_grace_period_us flag, and introduce
>> >     the xray_fdr_log_grace_period_ms flag instead, to use
>> >     milliseconds across platforms.
>> >
>> > Reviewers: kubamracek
>> >
>> > Subscribers: llvm-commits, krytarowski, nglevin, mgorny
>> >
>> > Differential Review: https://reviews.llvm.org/D39114
>> >
>> > Added:
>> >     compiler-rt/trunk/lib/xray/weak_symbols.txt
>> > Modified:
>> >     compiler-rt/trunk/cmake/config-ix.cmake
>> >     compiler-rt/trunk/lib/xray/CMakeLists.txt
>> >     compiler-rt/trunk/lib/xray/xray_fdr_logging.cc
>> >     compiler-rt/trunk/lib/xray/xray_flags.inc
>> >     compiler-rt/trunk/lib/xray/xray_init.cc
>> >     compiler-rt/trunk/lib/xray/xray_trampoline_x86_64.S
>> >
>> > Modified: compiler-rt/trunk/cmake/config-ix.cmake
>> > URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/config-
>> > ix.cmake?rev=319165&r1=319164&r2=319165&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/cmake/config-ix.cmake (original)
>> > +++ compiler-rt/trunk/cmake/config-ix.cmake Tue Nov 28 03:49:22 2017
>> > @@ -211,7 +211,11 @@ set(ALL_SAFESTACK_SUPPORTED_ARCH ${X86}
>> > set(ALL_CFI_SUPPORTED_ARCH ${X86} ${X86_64} ${ARM32} ${ARM64} ${MIPS64})
>> > set(ALL_ESAN_SUPPORTED_ARCH ${X86_64} ${MIPS64})
>> set(ALL_SCUDO_SUPPORTED_ARCH
>> > ${X86} ${X86_64} ${ARM32} ${ARM64} ${MIPS32} ${MIPS64})
>> > +if(APPLE)
>> > +set(ALL_XRAY_SUPPORTED_ARCH ${X86_64})
>> > +else()
>> >  set(ALL_XRAY_SUPPORTED_ARCH ${X86_64} ${ARM32} ${ARM64} ${MIPS32}
>> ${MIPS64}
>> > powerpc64le)
>> > +endif()
>> >
>> >  if(APPLE)
>> >    include(CompilerRTDarwinUtils)
>> > @@ -256,6 +260,7 @@ if(APPLE)
>> >    set(SANITIZER_COMMON_SUPPORTED_OS osx)
>> >    set(PROFILE_SUPPORTED_OS osx)
>> >    set(TSAN_SUPPORTED_OS osx)
>> > +  set(XRAY_SUPPORTED_OS osx)
>> >    if(NOT SANITIZER_MIN_OSX_VERSION)
>> >      string(REGEX MATCH "-mmacosx-version-min=([.0-9]+)"
>> >             MACOSX_VERSION_MIN_FLAG "${CMAKE_CXX_FLAGS}") @@ -412,12
>> +417,12
>> > @@ if(APPLE)
>> >    list_intersect(SCUDO_SUPPORTED_ARCH
>> >      ALL_SCUDO_SUPPORTED_ARCH
>> >      SANITIZER_COMMON_SUPPORTED_ARCH)
>> > -  list_intersect(XRAY_SUPPORTED_ARCH
>> > -    ALL_XRAY_SUPPORTED_ARCH
>> > -    SANITIZER_COMMON_SUPPORTED_ARCH)
>> >    list_intersect(FUZZER_SUPPORTED_ARCH
>> >      ALL_FUZZER_SUPPORTED_ARCH
>> >      ALL_SANITIZER_COMMON_SUPPORTED_ARCH)
>> > +  list_intersect(XRAY_SUPPORTED_ARCH
>> > +    ALL_XRAY_SUPPORTED_ARCH
>> > +    SANITIZER_COMMON_SUPPORTED_ARCH)
>> >
>> >  else()
>> >    # Architectures supported by compiler-rt libraries.
>> > @@ -580,7 +585,7 @@ else()
>> >  endif()
>> >
>> >  if (COMPILER_RT_HAS_SANITIZER_COMMON AND XRAY_SUPPORTED_ARCH AND
>> > -    OS_NAME MATCHES "Linux")
>> > +    OS_NAME MATCHES "Darwin|Linux")
>> >    set(COMPILER_RT_HAS_XRAY TRUE)
>> >  else()
>> >    set(COMPILER_RT_HAS_XRAY FALSE)
>> >
>> > Modified: compiler-rt/trunk/lib/xray/CMakeLists.txt
>> > URL: http://llvm.org/viewvc/llvm-project/compiler-
>> >
>> rt/trunk/lib/xray/CMakeLists.txt?rev=319165&r1=319164&r2=319165&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/xray/CMakeLists.txt (original)
>> > +++ compiler-rt/trunk/lib/xray/CMakeLists.txt Tue Nov 28 03:49:22 2017
>> > @@ -65,19 +65,53 @@ append_list_if(
>> >  append_list_if(
>> >    COMPILER_RT_BUILD_XRAY_NO_PREINIT XRAY_NO_PREINIT
>> XRAY_COMMON_DEFINITIONS)
>> >
>> > -add_compiler_rt_object_libraries(RTXray
>> > -  ARCHS ${XRAY_SUPPORTED_ARCH}
>> > -  SOURCES ${XRAY_SOURCES} CFLAGS ${XRAY_CFLAGS}
>> > -  DEFS ${XRAY_COMMON_DEFINITIONS})
>> > -
>> >  add_compiler_rt_component(xray)
>> >
>> >  set(XRAY_COMMON_RUNTIME_OBJECT_LIBS
>> > +    RTXray
>> >      RTSanitizerCommon
>> >      RTSanitizerCommonLibc)
>> >
>> > +if (APPLE)
>> > +  set(XRAY_LINK_LIBS ${SANITIZER_COMMON_LINK_LIBS})
>> > +  set(XRAY_ASM_SOURCES xray_trampoline_x86_64.S)
>> > +
>> > +  if (${CMAKE_GENERATOR} STREQUAL "Xcode")
>> > +    enable_language(ASM)
>> > +  else()
>> > +    set_source_files_properties(${XRAY_ASM_SOURCES} PROPERTIES LANGUAGE
>> > + C)
>> > +  endif()
>> > +
>> > +  add_weak_symbols("sanitizer_common" WEAK_SYMBOL_LINK_FLAGS)
>> > + add_weak_symbols("xray" WEAK_SYMBOL_LINK_FLAGS)
>> > +
>> > +  add_compiler_rt_object_libraries(RTXray
>> > +    OS ${XRAY_SUPPORTED_OS}
>> > +    ARCHS ${XRAY_SUPPORTED_ARCH}
>> > +    SOURCES ${x86_64_SOURCES}
>> > +    CFLAGS ${XRAY_CFLAGS}
>> > +    DEFS ${XRAY_COMMON_DEFINITIONS})
>> > +
>> > +  # We only support running on osx for now.
>> > +  add_compiler_rt_runtime(clang_rt.xray
>> > +    STATIC
>> > +    OS ${XRAY_SUPPORTED_OS}
>> > +    ARCHS ${XRAY_SUPPORTED_ARCH}
>> > +    OBJECT_LIBS RTXray
>> > +                RTSanitizerCommon
>> > +                RTSanitizerCommonLibc
>> > +    CFLAGS ${XRAY_CFLAGS}
>> > +    DEFS ${XRAY_COMMON_DEFINITIONS}
>> > +    LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS} ${WEAK_SYMBOL_LINK_FLAGS}
>> > +    LINK_LIBS ${XRAY_LINK_LIBS}
>> > +    PARENT_TARGET xray)
>> > +else()
>> >  foreach(arch ${XRAY_SUPPORTED_ARCH})
>> >    if(CAN_TARGET_${arch})
>> > +    add_compiler_rt_object_libraries(RTXray
>> > +      ARCHS ${XRAY_SUPPORTED_ARCH}
>> > +      SOURCES ${XRAY_SOURCES} CFLAGS ${XRAY_CFLAGS}
>> > +      DEFS ${XRAY_COMMON_DEFINITIONS})
>> >      add_compiler_rt_runtime(clang_rt.xray
>> >       STATIC
>> >       ARCHS ${arch}
>> > @@ -88,6 +122,7 @@ foreach(arch ${XRAY_SUPPORTED_ARCH})
>> >       PARENT_TARGET xray)
>> >    endif()
>> >  endforeach()
>> > +endif()
>> >
>> >  if(COMPILER_RT_INCLUDE_TESTS)
>> >    add_subdirectory(tests)
>> >
>> > Added: compiler-rt/trunk/lib/xray/weak_symbols.txt
>> > URL: http://llvm.org/viewvc/llvm-project/compiler-
>> > rt/trunk/lib/xray/weak_symbols.txt?rev=319165&view=auto
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/xray/weak_symbols.txt (added)
>> > +++ compiler-rt/trunk/lib/xray/weak_symbols.txt Tue Nov 28 03:49:22 2017
>> > @@ -0,0 +1,4 @@
>> > +___start_xray_fn_idx
>> > +___start_xray_instr_map
>> > +___stop_xray_fn_idx
>> > +___stop_xray_instr_map
>> >
>> > Modified: compiler-rt/trunk/lib/xray/xray_fdr_logging.cc
>> > URL: http://llvm.org/viewvc/llvm-project/compiler-
>> >
>> rt/trunk/lib/xray/xray_fdr_logging.cc?rev=319165&r1=319164&r2=319165&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/xray/xray_fdr_logging.cc (original)
>> > +++ compiler-rt/trunk/lib/xray/xray_fdr_logging.cc Tue Nov 28 03:49:22
>> > +++ 2017
>> > @@ -70,15 +70,9 @@ XRayLogFlushStatus fdrLoggingFlush() XRA
>> >      return XRayLogFlushStatus::XRAY_LOG_NOT_FLUSHING;
>> >    }
>> >
>> > -  // We wait a number of microseconds to allow threads to see that
>> we've
>> > +  // We wait a number of milliseconds to allow threads to see that
>> > + we've
>> >    // finalised before attempting to flush the log.
>> > -  struct timespec TS;
>> > -  TS.tv_sec = flags()->xray_fdr_log_grace_period_us / 1000000;
>> > -  TS.tv_nsec = (flags()->xray_fdr_log_grace_period_us % 1000000) *
>> 1000;
>> > -  struct timespec Rem;
>> > -  while (clock_nanosleep(CLOCK_REALTIME, 0, &TS, &Rem) &&
>> > -         (Rem.tv_sec != 0 || Rem.tv_nsec != 0))
>> > -    TS = Rem;
>> > +  __sanitizer::SleepForMillis(flags()->xray_fdr_log_grace_period_ms);
>> >
>> >    // We write out the file in the following format:
>> >    //
>> > @@ -374,9 +368,7 @@ static auto UNUSED Unused = [] {
>> >    using namespace __xray;
>> >    if (flags()->xray_fdr_log) {
>> >      XRayLogImpl Impl{
>> > -        fdrLoggingInit,
>> > -        fdrLoggingFinalize,
>> > -        fdrLoggingHandleArg0,
>> > +        fdrLoggingInit, fdrLoggingFinalize, fdrLoggingHandleArg0,
>> >          fdrLoggingFlush,
>> >      };
>> >      __xray_set_log_impl(Impl);
>> >
>> > Modified: compiler-rt/trunk/lib/xray/xray_flags.inc
>> > URL: http://llvm.org/viewvc/llvm-project/compiler-
>> >
>> rt/trunk/lib/xray/xray_flags.inc?rev=319165&r1=319164&r2=319165&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/xray/xray_flags.inc (original)
>> > +++ compiler-rt/trunk/lib/xray/xray_flags.inc Tue Nov 28 03:49:22 2017
>> > @@ -37,7 +37,9 @@ XRAY_FLAG(bool, xray_fdr_log, false,  XRAY_FLAG(int,
>> > xray_fdr_log_func_duration_threshold_us, 5,
>> >            "FDR logging will try to skip functions that execute for
>> fewer "
>> >            "microseconds than this threshold.") -XRAY_FLAG(int,
>> > xray_fdr_log_grace_period_us, 100000,
>> > +XRAY_FLAG(int, xray_fdr_log_grace_period_us, 0,
>> > +          "DEPRECATED: use xray_fdr_log_grace_period_ms instead.")
>> > +XRAY_FLAG(int, xray_fdr_log_grace_period_ms, 100,
>> >            "FDR logging will wait this much time in microseconds before
>> "
>> >            "actually flushing the log; this gives a chance for threads
>> to "
>> >            "notice that the log has been finalized and clean up.")
>> >
>> > Modified: compiler-rt/trunk/lib/xray/xray_init.cc
>> > URL: http://llvm.org/viewvc/llvm-project/compiler-
>> > rt/trunk/lib/xray/xray_init.cc?rev=319165&r1=319164&r2=319165&view=diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/xray/xray_init.cc (original)
>> > +++ compiler-rt/trunk/lib/xray/xray_init.cc Tue Nov 28 03:49:22 2017
>> > @@ -88,7 +88,8 @@ void __xray_init() XRAY_NEVER_INSTRUMENT  #endif  }
>> >
>> > -#ifndef XRAY_NO_PREINIT
>> > +// Only add the preinit array initialization if the sanitizers can.
>> > +#if !defined(XRAY_NO_PREINIT) && SANITIZER_CAN_USE_PREINIT_ARRAY
>> >  __attribute__((section(".preinit_array"),
>> >                 used)) void (*__local_xray_preinit)(void) = __xray_init;
>> > #endif
>> >
>> > Modified: compiler-rt/trunk/lib/xray/xray_trampoline_x86_64.S
>> > URL: http://llvm.org/viewvc/llvm-project/compiler-
>> >
>> rt/trunk/lib/xray/xray_trampoline_x86_64.S?rev=319165&r1=319164&r2=319165&view
>> > =diff
>> >
>> ==============================================================================
>> > --- compiler-rt/trunk/lib/xray/xray_trampoline_x86_64.S (original)
>> > +++ compiler-rt/trunk/lib/xray/xray_trampoline_x86_64.S Tue Nov 28
>> > +++ 03:49:22 2017
>> > @@ -14,10 +14,13 @@
>> >
>> //===----------------------------------------------------------------------
>> > ===//
>> >
>> >  #include "../builtins/assembly.h"
>> > +#include "../sanitizer_common/sanitizer_asm.h"
>> > +
>> > +
>> >
>> >  .macro SAVE_REGISTERS
>> >       subq $192, %rsp
>> > -     .cfi_def_cfa_offset 200
>> > +     CFI_DEF_CFA_OFFSET(200)
>> >       // At this point, the stack pointer should be aligned to an 8-byte
>> > boundary,
>> >       // because any call instructions that come after this will add
>> another 8
>> >       // bytes and therefore align it to 16-bytes.
>> > @@ -57,7 +60,7 @@
>> >       movq    8(%rsp), %r8
>> >       movq    0(%rsp), %r9
>> >       addq    $192, %rsp
>> > -     .cfi_def_cfa_offset 8
>> > +     CFI_DEF_CFA_OFFSET(8)
>> >  .endm
>> >
>> >  .macro ALIGNED_CALL_RAX
>> > @@ -75,21 +78,25 @@
>> >  .endm
>> >
>> >       .text
>> > +#if !defined(__APPLE__)
>> > +     .section .text
>> > +#else
>> > +     .section __TEXT,__text
>> > +#endif
>> >       .file "xray_trampoline_x86.S"
>> >
>> >
>> //===----------------------------------------------------------------------
>> > ===//
>> >
>> > -     .globl __xray_FunctionEntry
>> > +     .globl ASM_TSAN_SYMBOL(__xray_FunctionEntry)
>> >       .align 16, 0x90
>> > -     .type __xray_FunctionEntry, at function
>> > -
>> > -__xray_FunctionEntry:
>> > -     .cfi_startproc
>> > +     ASM_TYPE_FUNCTION(__xray_FunctionEntry)
>> > +ASM_TSAN_SYMBOL(__xray_FunctionEntry):
>> > +     CFI_STARTPROC
>> >       SAVE_REGISTERS
>> >
>> >       // This load has to be atomic, it's concurrent with
>> __xray_patch().
>> >       // On x86/amd64, a simple (type-aligned) MOV instruction is
>> enough.
>> > -     movq    _ZN6__xray19XRayPatchedFunctionE(%rip), %rax
>> > +     movq    ASM_TSAN_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)(%rip),
>> %rax
>> >       testq   %rax, %rax
>> >       je      .Ltmp0
>> >
>> > @@ -101,28 +108,27 @@ __xray_FunctionEntry:
>> >  .Ltmp0:
>> >       RESTORE_REGISTERS
>> >       retq
>> > -.Ltmp1:
>> > -     .size __xray_FunctionEntry, .Ltmp1-__xray_FunctionEntry
>> > -     .cfi_endproc
>> > +     ASM_SIZE(__xray_FunctionEntry)
>> > +     CFI_ENDPROC
>> >
>> >
>> //===----------------------------------------------------------------------
>> > ===//
>> >
>> > -     .globl __xray_FunctionExit
>> > +     .globl ASM_TSAN_SYMBOL(__xray_FunctionExit)
>> >       .align 16, 0x90
>> > -     .type __xray_FunctionExit, at function
>> > -__xray_FunctionExit:
>> > -     .cfi_startproc
>> > +     ASM_TYPE_FUNCTION(__xray_FunctionExit)
>> > +ASM_TSAN_SYMBOL(__xray_FunctionExit):
>> > +     CFI_STARTPROC
>> >       // Save the important registers first. Since we're assuming that
>> this
>> >       // function is only jumped into, we only preserve the registers
>> for
>> >       // returning.
>> >       subq    $56, %rsp
>> > -     .cfi_def_cfa_offset 64
>> > +     CFI_DEF_CFA_OFFSET(64)
>> >       movq  %rbp, 48(%rsp)
>> >       movupd  %xmm0, 32(%rsp)
>> >       movupd  %xmm1, 16(%rsp)
>> >       movq    %rax, 8(%rsp)
>> >       movq    %rdx, 0(%rsp)
>> > -     movq    _ZN6__xray19XRayPatchedFunctionE(%rip), %rax
>> > +     movq    ASM_TSAN_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)(%rip),
>> %rax
>> >       testq %rax,%rax
>> >       je      .Ltmp2
>> >
>> > @@ -138,22 +144,21 @@ __xray_FunctionExit:
>> >       movq    8(%rsp), %rax
>> >       movq    0(%rsp), %rdx
>> >       addq    $56, %rsp
>> > -     .cfi_def_cfa_offset 8
>> > +     CFI_DEF_CFA_OFFSET(8)
>> >       retq
>> > -.Ltmp3:
>> > -     .size __xray_FunctionExit, .Ltmp3-__xray_FunctionExit
>> > -     .cfi_endproc
>> > +     ASM_SIZE(__xray_FunctionExit)
>> > +     CFI_ENDPROC
>> >
>> >
>> //===----------------------------------------------------------------------
>> > ===//
>> >
>> > -     .global __xray_FunctionTailExit
>> > +     .globl ASM_TSAN_SYMBOL(__xray_FunctionTailExit)
>> >       .align 16, 0x90
>> > -     .type __xray_FunctionTailExit, at function
>> > -__xray_FunctionTailExit:
>> > -     .cfi_startproc
>> > +     ASM_TYPE_FUNCTION(__xray_FunctionTailExit)
>> > +ASM_TSAN_SYMBOL(__xray_FunctionTailExit):
>> > +     CFI_STARTPROC
>> >       SAVE_REGISTERS
>> >
>> > -     movq    _ZN6__xray19XRayPatchedFunctionE(%rip), %rax
>> > +     movq    ASM_TSAN_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)(%rip),
>> %rax
>> >       testq %rax,%rax
>> >       je      .Ltmp4
>> >
>> > @@ -165,26 +170,25 @@ __xray_FunctionTailExit:
>> >  .Ltmp4:
>> >       RESTORE_REGISTERS
>> >       retq
>> > -.Ltmp5:
>> > -     .size __xray_FunctionTailExit, .Ltmp5-__xray_FunctionTailExit
>> > -     .cfi_endproc
>> > +     ASM_SIZE(__xray_FunctionTailExit)
>> > +     CFI_ENDPROC
>> >
>> >
>> //===----------------------------------------------------------------------
>> > ===//
>> >
>> > -     .globl __xray_ArgLoggerEntry
>> > +     .globl ASM_TSAN_SYMBOL(__xray_ArgLoggerEntry)
>> >       .align 16, 0x90
>> > -     .type __xray_ArgLoggerEntry, at function
>> > -__xray_ArgLoggerEntry:
>> > -     .cfi_startproc
>> > +     ASM_TYPE_FUNCTION(__xray_ArgLoggerEntry)
>> > +ASM_TSAN_SYMBOL(__xray_ArgLoggerEntry):
>> > +     CFI_STARTPROC
>> >       SAVE_REGISTERS
>> >
>> >       // Again, these function pointer loads must be atomic; MOV is
>> fine.
>> > -     movq    _ZN6__xray13XRayArgLoggerE(%rip), %rax
>> > +     movq    ASM_TSAN_SYMBOL(_ZN6__xray13XRayArgLoggerE)(%rip), %rax
>> >       testq   %rax, %rax
>> >       jne     .Larg1entryLog
>> >
>> >       // If [arg1 logging handler] not set, defer to no-arg logging.
>> > -     movq    _ZN6__xray19XRayPatchedFunctionE(%rip), %rax
>> > +     movq    ASM_TSAN_SYMBOL(_ZN6__xray19XRayPatchedFunctionE)(%rip),
>> %rax
>> >       testq   %rax, %rax
>> >       je      .Larg1entryFail
>> >
>> > @@ -203,24 +207,22 @@ __xray_ArgLoggerEntry:
>> >  .Larg1entryFail:
>> >       RESTORE_REGISTERS
>> >       retq
>> > -
>> > -.Larg1entryEnd:
>> > -     .size __xray_ArgLoggerEntry, .Larg1entryEnd-__xray_ArgLoggerEntry
>> > -     .cfi_endproc
>> > +     ASM_SIZE(__xray_ArgLoggerEntry)
>> > +     CFI_ENDPROC
>> >
>> >
>> //===----------------------------------------------------------------------
>> > ===//
>> >
>> > -     .global __xray_CustomEvent
>> > +     .global ASM_TSAN_SYMBOL(__xray_CustomEvent)
>> >       .align 16, 0x90
>> > -     .type __xray_CustomEvent, at function
>> > -__xray_CustomEvent:
>> > -  .cfi_startproc
>> > +     ASM_TYPE_FUNCTION(__xray_CustomEvent)
>> > +ASM_TSAN_SYMBOL(__xray_CustomEvent):
>> > +     CFI_STARTPROC
>> >       SAVE_REGISTERS
>> >
>> >       // We take two arguments to this trampoline, which should be in
>> rdi
>> >       and rsi
>> >       // already. We also make sure that we stash %rax because we use
>> that
>> > register
>> >       // to call the logging handler.
>> > -     movq _ZN6__xray22XRayPatchedCustomEventE(%rip), %rax
>> > +     movq ASM_TSAN_SYMBOL(_ZN6__xray22XRayPatchedCustomEventE)(%rip),
>> %rax
>> >       testq %rax,%rax
>> >       je .LcustomEventCleanup
>> >
>> > @@ -229,9 +231,7 @@ __xray_CustomEvent:
>> >  .LcustomEventCleanup:
>> >       RESTORE_REGISTERS
>> >       retq
>> > -
>> > -.Ltmp8:
>> > -     .size __xray_CustomEvent, .Ltmp8-__xray_CustomEvent
>> > -     .cfi_endproc
>> > +     ASM_SIZE(__xray_CustomEvent)
>> > +     CFI_ENDPROC
>> >
>> >  NO_EXEC_STACK_DIRECTIVE
>> >
>> >
>> > _______________________________________________
>> > llvm-commits mailing list
>> > llvm-commits at lists.llvm.org
>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171128/87e59e7d/attachment.html>


More information about the llvm-commits mailing list