diff --git a/compiler-rt/lib/profile/CMakeLists.txt b/compiler-rt/lib/profile/CMakeLists.txt index ece674b2daa148..63532b72ff82ea 100644 --- a/compiler-rt/lib/profile/CMakeLists.txt +++ b/compiler-rt/lib/profile/CMakeLists.txt @@ -59,6 +59,7 @@ set(PROFILE_SOURCES InstrProfilingMerge.c InstrProfilingMergeFile.c InstrProfilingNameVar.c + InstrProfilingVersionVar.c InstrProfilingWriter.c InstrProfilingPlatformDarwin.c InstrProfilingPlatformFuchsia.c diff --git a/compiler-rt/lib/profile/InstrProfiling.c b/compiler-rt/lib/profile/InstrProfiling.c index 31a9fe99629319..92ad25f62cd1b9 100644 --- a/compiler-rt/lib/profile/InstrProfiling.c +++ b/compiler-rt/lib/profile/InstrProfiling.c @@ -18,8 +18,6 @@ #include "profile/InstrProfData.inc" -COMPILER_RT_WEAK uint64_t INSTR_PROF_RAW_VERSION_VAR = INSTR_PROF_RAW_VERSION; - COMPILER_RT_VISIBILITY uint64_t __llvm_profile_get_magic(void) { return sizeof(void *) == sizeof(uint64_t) ? (INSTR_PROF_RAW_MAGIC_64) : (INSTR_PROF_RAW_MAGIC_32); diff --git a/compiler-rt/lib/profile/InstrProfilingVersionVar.c b/compiler-rt/lib/profile/InstrProfilingVersionVar.c new file mode 100644 index 00000000000000..a6f222150794d5 --- /dev/null +++ b/compiler-rt/lib/profile/InstrProfilingVersionVar.c @@ -0,0 +1,17 @@ +/*===- InstrProfilingVersionVar.c - profile version variable setup -------===*\ +|* +|* Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +|* See https://llvm.org/LICENSE.txt for license information. +|* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +|* +\*===----------------------------------------------------------------------===*/ + +#include "InstrProfiling.h" + +/* uint64 __llvm_profile_raw_version + * + * The runtime should only provide its own definition of this symbol when the + * user has not specified one. Set this up by moving the runtime's copy of this + * symbol to an object file within the archive. + */ +COMPILER_RT_WEAK uint64_t INSTR_PROF_RAW_VERSION_VAR = INSTR_PROF_RAW_VERSION; diff --git a/compiler-rt/test/profile/instrprof-lto-pgogen.c b/compiler-rt/test/profile/instrprof-lto-pgogen.c new file mode 100644 index 00000000000000..0abae0d7b4c231 --- /dev/null +++ b/compiler-rt/test/profile/instrprof-lto-pgogen.c @@ -0,0 +1,12 @@ +// REQUIRES: lto + +// RUN: %clang_pgogen=%t.profraw -flto %s -o %t +// RUN: %run %t +// RUN: llvm-profdata merge %t.profraw -o %t.profdata +// RUN: llvm-profdata show %t.profdata | FileCheck %s + +// Testing a bug that happens when trying to generate IR +// profile with BFD linker + LTO plugin + +// CHECK: Instrumentation level: IR +int main() { return 0; }