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


Fixed in r319241.

Thanks, Douglas!

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

> 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/b61409de/attachment-0001.html>


More information about the llvm-commits mailing list