LDC2 with -fxray-instrument

Márcio Martins marcioapm at gmail.com
Mon Jan 21 14:36:15 UTC 2019


On Thursday, 17 January 2019 at 00:11:10 UTC, Johan Engelen wrote:
> On Wednesday, 16 January 2019 at 23:29:45 UTC, Johan Engelen 
> wrote:
>> On Wednesday, 16 January 2019 at 22:10:14 UTC, Johan Engelen 
>> wrote:
>>> On Wednesday, 16 January 2019 at 17:36:31 UTC, Márcio Martins 
>>> wrote:
>>>> On Tuesday, 15 January 2019 at 22:51:15 UTC, Johan Engelen 
>>>> wrote:
>>>>> What platform are you on?
>>>>
>>>> Linux x64
>>>
>>> OK, so that should work. What is your testcase? Try with 
>>> `-fxray-instruction-threshold=1` to also instrument small 
>>> functions.
>>
>> I'm trying now and am having the same problem. I'm trying to 
>> figure out how to fix LDC so that it works.
>>
>> work in progress!
>>
>> -Johan
>
> OK, got it :-) LLVM 7 changed things a little, so it's broken 
> with LDC 1.13  [*].
>
> For now, you can use LDC 1.12 (LLVM 6). You also have to add 
> `-L-lstdc++` as compiler flag. So with LDC 1.12, Linux, and 
> this commandline things work for me:
> ```
> ldc2 -fxray-instrument -fxray-instruction-threshold=1 
> xraytest.d -L-lstdc++
> XRAY_OPTIONS="patch_premain=true xray_mode=xray-basic 
> verbosity=1" xraytest
> ```
>
> Happy testing,
>   Johan
>
> [*] XRay was split into several libraries, and we only 
> copy+link with one of them. You can make things work by 
> downloading the libs and linking with them.

Great! Does it mean it will be fixed in next LDC release? :)

I also played a bit with -finstrument-functions and it works fine 
for tools like uftrace... However, if you define your own 
__cyg_profile_func_* functions, it won't work (or be useful), 
because there is no way to disable instrumenting on these 
__cyg_profile_func_* functions, so you can imagine what happens. 
I tried @llvmAttr("no_instrument_function"), supposedly the GCC 
compatible way to disable instrumentation on these, but it 
doesn't make a difference.

There are few LLVM settings that will make this useful:
- https://reviews.llvm.org/D40276
- https://reviews.llvm.org/D39331 (which enables instrumenting 
after inlining, which is more useful in my use case)
- https://reviews.llvm.org/D37622 (is has not been merged yet, 
but necessary, to be able to conveniently call library functions 
from within the hooks)


More information about the Digitalmars-d-learn mailing list