[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