Index: compiler-rt/lib/profile/CMakeLists.txt =================================================================== --- compiler-rt/lib/profile/CMakeLists.txt +++ compiler-rt/lib/profile/CMakeLists.txt @@ -59,6 +59,7 @@ InstrProfilingMerge.c InstrProfilingMergeFile.c InstrProfilingNameVar.c + InstrProfilingVersionVar.c InstrProfilingWriter.c InstrProfilingPlatformDarwin.c InstrProfilingPlatformFuchsia.c Index: compiler-rt/lib/profile/InstrProfiling.c =================================================================== --- compiler-rt/lib/profile/InstrProfiling.c +++ 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); Index: compiler-rt/lib/profile/InstrProfilingVersionVar.c =================================================================== --- /dev/null +++ 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; Index: compiler-rt/test/profile/instrprof-linux-lto-pgogen.c =================================================================== --- /dev/null +++ compiler-rt/test/profile/instrprof-linux-lto-pgogen.c @@ -0,0 +1,19 @@ +// REQUIRES: linux +// REQUIRES: lto + +// RUN: %clang_pgogen=%t.profraw -flto %s -o %t +// RUN: %run %t %t.profraw +// 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 +void bar() {} +int main(int argc, const char *argv[]) { + if (argc < 2) + return 1; + bar(); + return 0; +}