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

David Li via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 6 11:33:46 PDT 2015


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

Make new change strictly limited to linux platform.


http://reviews.llvm.org/D13329

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

Index: lib/profile/InstrProfilingPlatformOther.c
===================================================================
--- lib/profile/InstrProfilingPlatformOther.c
+++ lib/profile/InstrProfilingPlatformOther.c
@@ -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;
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(__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
Index: lib/profile/CMakeLists.txt
===================================================================
--- lib/profile/CMakeLists.txt
+++ lib/profile/CMakeLists.txt
@@ -6,6 +6,7 @@
   InstrProfilingBuffer.c
   InstrProfilingFile.c
   InstrProfilingPlatformDarwin.c
+  InstrProfilingPlatformLinux.c
   InstrProfilingPlatformOther.c
   InstrProfilingRuntime.cc
   InstrProfilingUtil.c)


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D13329.36641.patch
Type: text/x-patch
Size: 2725 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20151006/93b8c893/attachment.bin>


More information about the llvm-commits mailing list