[PATCH] D13329: [PGO]: Eliminate __llvm_profile_register calls for Linux (compiler_rt)

David Li via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 1 15:48:57 PDT 2015


davidxl updated this revision to Diff 36319.
davidxl added a comment.

This is the latest version that does not rely on linker script.


http://reviews.llvm.org/D13329

Files:
  lib/profile/CMakeLists.txt
  lib/profile/InstrProfilingPlatformLinux.c

Index: lib/profile/InstrProfilingPlatformLinux.c
===================================================================
--- /dev/null
+++ lib/profile/InstrProfilingPlatformLinux.c
@@ -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(__APPLE__)
+#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
Index: lib/profile/CMakeLists.txt
===================================================================
--- lib/profile/CMakeLists.txt
+++ lib/profile/CMakeLists.txt
@@ -1,23 +1,35 @@
 add_custom_target(profile)
 
-set(PROFILE_SOURCES
+set(COMMON_SOURCES
   GCDAProfiling.c
   InstrProfiling.c
   InstrProfilingBuffer.c
   InstrProfilingFile.c
-  InstrProfilingPlatformDarwin.c
-  InstrProfilingPlatformOther.c
   InstrProfilingRuntime.cc
   InstrProfilingUtil.c)
 
 if(APPLE)
+  set(PROFILE_SOURCES
+      ${COMMON_SOURCES}
+      InstrProfilingPlatformDarwin.c)
+
   add_compiler_rt_runtime(clang_rt.profile
     STATIC
     OS osx
     ARCHS ${PROFILE_SUPPORTED_ARCH}
     SOURCES ${PROFILE_SOURCES}
     PARENT_TARGET profile)
 else()
+  if(UNIX)
+    # Assume Linux
+    set(PROFILE_SOURCES
+        ${COMMON_SOURCES}
+        InstrProfilingPlatformLinux.c)
+  else()
+    set(PROFILE_SOURCES  
+        ${COMMON_SOURCES}
+        InstrProfilingPlatformOther.c)
+  endif()
   add_compiler_rt_runtime(clang_rt.profile
     STATIC
     ARCHS ${PROFILE_SUPPORTED_ARCH}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13329.36319.patch
Type: text/x-patch
Size: 3005 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151001/127f90cb/attachment.bin>


More information about the llvm-commits mailing list