[compiler-rt] r250200 - [PGO]: Eliminate calls to __llvm_profile_register_function for Linux.

Xinliang David Li via llvm-commits llvm-commits at lists.llvm.org
Fri Oct 16 09:20:48 PDT 2015


I don't see issues with both gold and gnu ld. Note that the start and
stop symbols in the runtime are hidden and libclang_profile.a is
statically linked into each shared library (each shared lib has its
own copy).

David

On Fri, Oct 16, 2015 at 9:09 AM, Xinliang David Li <davidxl at google.com> wrote:
> It seems so -- there is a regression test for shared library PGO. I
> will double check.
>
> thanks,
>
> David
>
> On Fri, Oct 16, 2015 at 5:47 AM, Rafael EspĂ­ndola
> <rafael.espindola at gmail.com> wrote:
>> 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