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


Oh, whoops -- yes, I can reproduce it locally. Will attempt a fix in the
next hour. Otherwise, I'll revert the change and try again later.

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

> 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/0090a22c/attachment.html>


More information about the llvm-commits mailing list