[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:04:00 PST 2017


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/4dd972fb/attachment.html>


More information about the llvm-commits mailing list