[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