[compiler-rt] r250200 - [PGO]: Eliminate calls to __llvm_profile_register_function for Linux.
Rafael EspĂndola via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 16 05:47:56 PDT 2015
BTW, is this working for shared libraries?
I ask because of https://sourceware.org/bugzilla/show_bug.cgi?id=19140
Cheers,
Rafael
On 13 October 2015 at 14:40, Xinliang David Li via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: davidxl
> Date: Tue Oct 13 13:40:00 2015
> New Revision: 250200
>
> URL: http://llvm.org/viewvc/llvm-project?rev=250200&view=rev
> Log:
>
> [PGO]: Eliminate calls to __llvm_profile_register_function for Linux.
>
> On Linux, the profile runtime can use __start_SECTNAME and __stop_SECTNAME
> symbols defined by the linker to locate the start and end location of
> a named section (with C name). This eliminates the need for instrumented
> binary to call __llvm_profile_register_function during start-up time.
>
> Added:
> compiler-rt/trunk/lib/profile/InstrProfilingPlatformLinux.c
> Modified:
> compiler-rt/trunk/lib/profile/CMakeLists.txt
> compiler-rt/trunk/lib/profile/InstrProfilingPlatformOther.c
>
> Modified: compiler-rt/trunk/lib/profile/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/CMakeLists.txt?rev=250200&r1=250199&r2=250200&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/CMakeLists.txt (original)
> +++ compiler-rt/trunk/lib/profile/CMakeLists.txt Tue Oct 13 13:40:00 2015
> @@ -6,6 +6,7 @@ set(PROFILE_SOURCES
> InstrProfilingBuffer.c
> InstrProfilingFile.c
> InstrProfilingPlatformDarwin.c
> + InstrProfilingPlatformLinux.c
> InstrProfilingPlatformOther.c
> InstrProfilingRuntime.cc
> InstrProfilingUtil.c)
>
> Added: compiler-rt/trunk/lib/profile/InstrProfilingPlatformLinux.c
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfilingPlatformLinux.c?rev=250200&view=auto
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/InstrProfilingPlatformLinux.c (added)
> +++ compiler-rt/trunk/lib/profile/InstrProfilingPlatformLinux.c Tue Oct 13 13:40:00 2015
> @@ -0,0 +1,48 @@
> +/*===- InstrProfilingPlatformLinux.c - Profile data Linux platform ------===*\
> +|*
> +|* The LLVM Compiler Infrastructure
> +|*
> +|* This file is distributed under the University of Illinois Open Source
> +|* License. See LICENSE.TXT for details.
> +|*
> +\*===----------------------------------------------------------------------===*/
> +
> +#include "InstrProfiling.h"
> +
> +#if defined(__linux__)
> +#include <stdlib.h>
> +
> +extern __llvm_profile_data __start___llvm_prf_data
> + __attribute__((visibility("hidden")));
> +extern __llvm_profile_data __stop___llvm_prf_data
> + __attribute__((visibility("hidden")));
> +extern uint64_t __start___llvm_prf_cnts __attribute__((visibility("hidden")));
> +extern uint64_t __stop___llvm_prf_cnts __attribute__((visibility("hidden")));
> +extern char __start___llvm_prf_names __attribute__((visibility("hidden")));
> +extern char __stop___llvm_prf_names __attribute__((visibility("hidden")));
> +
> +__attribute__((visibility("hidden"))) const __llvm_profile_data *
> +__llvm_profile_begin_data(void) {
> + return &__start___llvm_prf_data;
> +}
> +__attribute__((visibility("hidden"))) const __llvm_profile_data *
> +__llvm_profile_end_data(void) {
> + return &__stop___llvm_prf_data;
> +}
> +__attribute__((visibility("hidden"))) const char *__llvm_profile_begin_names(
> + void) {
> + return &__start___llvm_prf_names;
> +}
> +__attribute__((visibility("hidden"))) const char *__llvm_profile_end_names(
> + void) {
> + return &__stop___llvm_prf_names;
> +}
> +__attribute__((visibility("hidden"))) uint64_t *__llvm_profile_begin_counters(
> + void) {
> + return &__start___llvm_prf_cnts;
> +}
> +__attribute__((visibility("hidden"))) uint64_t *__llvm_profile_end_counters(
> + void) {
> + return &__stop___llvm_prf_cnts;
> +}
> +#endif
>
> Modified: compiler-rt/trunk/lib/profile/InstrProfilingPlatformOther.c
> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/profile/InstrProfilingPlatformOther.c?rev=250200&r1=250199&r2=250200&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/profile/InstrProfilingPlatformOther.c (original)
> +++ compiler-rt/trunk/lib/profile/InstrProfilingPlatformOther.c Tue Oct 13 13:40:00 2015
> @@ -9,7 +9,7 @@
>
> #include "InstrProfiling.h"
>
> -#if !defined(__APPLE__)
> +#if !defined(__APPLE__) && !defined(__linux__)
> #include <stdlib.h>
>
> static const __llvm_profile_data *DataFirst = NULL;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list