[LLVMdev] undefined reference to 'llvm_gcda_start_file', 'llvm_gcda_emit_arcs', etc

Alexey Samsonov
Tue, 19 Mar 2013 09:20:21 -0000

Hi!

On Fri, Mar 15, 2013 at 10:51 PM, Qun Fa <testforqunfa at gmail.com>
wrote:

> Thank you Alexey.
>
> I have tried to use Makefile. This will generate the correct symbols that
> I need.
>
> Any idea on the schedule of adding CMake support to compiler-rt?
>

Starting from r177382 CMake on Linux should build the same profile
compiler-rt library
as Makefiles.


>
> Sincerely,
> Qun
>
>
> On Fri, Mar 15, 2013 at 1:51 AM, Alexey Samsonov <samsonov at
google.com>wrote:
>
>>
>> On Fri, Mar 15, 2013 at 1:36 AM, Qun Fa <testforqunfa at
gmail.com> wrote:
>>
>>> Hi All,
>>>
>>> I think Nick's suggestion is correct, my code was linked
against
>>> libprofile_rt.a, which had gcda profiling code before, but was
removed
>>>
https://github.com/llvm-mirror/llvm/commit/218042a02305a3cc38d968a97ff9ecf4b4abe6ff
>>>
>>> So, I couldn't find the correct symbols from libprofile_rt.a
any more.
>>>
>>> Now my assumption is I need to use the correct library that is
provided
>>> by compiler-rt. May I know which one?
>>>
>>> I am building the entire llvm/clang including compiler-rt based on
the
>>> instructions given on the clang get started page (
>>> http://clang.llvm.org/get_started.html), but with CMake instead of
>>> Makefile. But I also noticed in the compiler-rt/lib/CMakeLists.txt
file, we
>>> have the following FIXME.
>>>
>>> # FIXME: Add support for the profile library.
>>>
>>> So, if I want to use the correct library, do I have to switch to
>>> Makefile? Any ideas?
>>>
>>
>> Yeah, can you try Makefile (I think it should build libprofile_rt from
>> GCDAProfiling.c that you need). I'll see if I can add CMake support
for
>> profile in compiler-rt any time soon.
>> However, looks like Clang driver won't be smart enough to link two
>> archives (lib/libprofile_rt.a and the one under
lib/clang/3.3/linux/...),
>> so we may need to patch the driver as well.
>>
>>
>>>
>>> Thanks very much,
>>> Qun
>>>
>>>
>>>
>>> On Thu, Mar 14, 2013 at 8:46 AM, Qun Fa <testforqunfa at
gmail.com> wrote:
>>>
>>>> Thanks for your reply.
>>>>
>>>> May I know which is the recommended library that should be
linked
>>>> against?
>>>>
>>>> I am currently linking libprofile_rt.a.
>>>>
>>>> And I have noticed the differences that, if we do
>>>>
>>>> `nm libprofile_rt.a | grep llvm`
>>>>
>>>> with my old copy of the llvm/clang installation, I can see
>>>>
>>>> 00000000000005e0 T _llvm_gcda_emit_arcs
>>>> 0000000000000b48 S _llvm_gcda_emit_arcs.eh
>>>> 0000000000000430 T _llvm_gcda_emit_function
>>>> 0000000000000aa8 S _llvm_gcda_emit_function.eh
>>>> 00000000000006c0 T _llvm_gcda_end_file
>>>> 0000000000000b98 S _llvm_gcda_end_file.eh
>>>> 00000000000003d0 T _llvm_gcda_increment_indirect_counter
>>>> 0000000000000a80 S _llvm_gcda_increment_indirect_counter.eh
>>>> 0000000000000000 T _llvm_gcda_start_file
>>>> 0000000000000a08 S _llvm_gcda_start_file.eh
>>>>
>>>> They are the symbols that my test build is looking for.
>>>>
>>>> But with the latest codebase, here is what I saw
>>>>
>>>> 00000000000000a8 T llvm_start_basic_block_tracing
>>>> 0000000000000067 T llvm_trace_basic_block
>>>> 0000000000000467 T llvm_decrement_path_count
>>>> 000000000000042a T llvm_increment_path_count
>>>> 0000000000000662 T llvm_start_path_profiling
>>>> 0000000000000020 T llvm_start_edge_profiling
>>>> 0000000000000020 T llvm_start_opt_edge_profiling
>>>>
>>>> Thanks again,
>>>> Qun
>>>>
>>>> On Thu, Mar 14, 2013 at 1:11 AM, Nick Lewycky <nicholas at
mxc.ca> wrote:
>>>>
>>>>> Qun Fa wrote:
>>>>>
>>>>>> Hi,
>>>>>> I am trying to test my project and get the code
coverage with a
>>>>>> version
>>>>>> of clang compiler that was built from the latest
llvm/clang codebase.
>>>>>>
>>>>>> It worked for a while. But today, after I updated my
local checkout,
>>>>>> and
>>>>>> re-build llvm, clang and compiler-rt, when I test my
project again, I
>>>>>> got the errors with undefined reference to
'llvm_gcda_start_file',
>>>>>> 'llvm_gcda_emit_arcs',
'llvm_gcda_emit_function', and
>>>>>> 'llvm_gcda_end_file'.
>>>>>>
>>>>>> I have searched the codebase, and have found the
functions are defined
>>>>>> in GCDAProfiling.c file, but not sure why this suddenly
doesn't work
>>>>>> for me.
>>>>>>
>>>>>> Anyone can give any suggestions?
>>>>>>
>>>>>
>>>>> Those symbols should be provided by
compiler-rt/lib/profile/**GCDAProfiling.c.
>>>>> There used to be a copy in llvm's tree, but I deleted
that one recently.
>>>>> It's possible you used to be using the one from llvm,
but now need to
>>>>> switch to using the one from compiler-rt?
>>>>>
>>>>> Nick
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>>
>>
>>
>> --
>> Alexey Samsonov, MSK
>>
>
>


--
Alexey Samsonov, MSK
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20130319/ea293b7b/attachment.html>