RFR: 8233285: Demangling C++ symbols in jhsdb jstack --mixed

Erik Joelsson erik.joelsson at oracle.com
Wed Nov 6 13:33:17 UTC 2019


I looked closer at it now and the build change is not good. Any 
toolchain definition with BUILD in the name, like 
TOOLCHAIN_BUILD_LINK_CXX, is only meant to be used for building tools 
that are run during the build. I believe the fix is to just remove the 
"BUILD_".

/Erik

On 2019-11-06 05:13, David Holmes wrote:
> On 4/11/2019 8:27 pm, Magnus Ihse Bursie wrote:
>> On 2019-11-02 13:43, Daniel D. Daugherty wrote:
>>> Since this review contains build changes, I've added build-dev at ...
>> Thanks Dan for noticing this and cc:ing us.
>>
>> Yasumasa: build changes look fine. Thanks.
>
> This change broke all cross-compilation.
>
> David
>
>> /Magnus
>>>
>>> Dan
>>>
>>>
>>> On 11/1/19 4:56 AM, Yasumasa Suenaga wrote:
>>>> (Changed subject to review request)
>>>>
>>>> Hi,
>>>>
>>>> I converted LinuxDebuggerLocal.c to C++ code, and it works fine on 
>>>> submit repo.
>>>> (mach5-one-ysuenaga-JDK-8233285-1-20191101-0746-6336009)
>>>>
>>>> http://cr.openjdk.java.net/~ysuenaga/JDK-8233285/webrev.00/
>>>>
>>>> Could you review it?
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Yasumasa
>>>>
>>>>
>>>> On 2019/11/01 8:54, Yasumasa Suenaga wrote:
>>>>> Hi David,
>>>>>
>>>>> On 2019/11/01 7:55, David Holmes wrote:
>>>>>> Hi Yasumasa,
>>>>>>
>>>>>> New build dependencies cannot be added lightly. This impacts 
>>>>>> everyone who maintains build/test farms.
>>>>>
>>>>> Ok, thanks for telling it.
>>>>>
>>>>>> We already use the C++ demangling capabilities in the VM. Is 
>>>>>> there some way to export that for use by libsaproc ?
>>>>>>
>>>>>> Otherwise using C++ demangle may still be the better choice given 
>>>>>> we already have it as a dependency.
>>>>>
>>>>> I found abi::__cxa_demangle() is used in ElfDecoder::demangle() at 
>>>>> decoder_linux.cpp .
>>>>> It is similar with my original proposal.
>>>>>
>>>>>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/sa-demangle/
>>>>>
>>>>> I agree with David to use C++ demangle way.
>>>>> However we need to choice the fix from following:
>>>>>
>>>>>    A. Convert LinuxDebuggerLocal.c to C++ code
>>>>>    B. Add C++ code for libsaproc.so to demangle symbols.
>>>>>
>>>>> I've discussed with Chris about it in [1].
>>>>> Option A might be large change.
>>>>>
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Yasumasa
>>>>>
>>>>>
>>>>> [1] 
>>>>> https://mail.openjdk.java.net/pipermail/serviceability-dev/2019-October/029716.html 
>>>>>
>>>>>
>>>>>
>>>>>> David
>>>>>>
>>>>>> On 1/11/2019 12:58 am, Chris Plummer wrote:
>>>>>>> Hi Yasumasa,
>>>>>>>
>>>>>>> Here's the failure during configure:
>>>>>>>
>>>>>>> [2019-10-31T06:07:45,131Z] checking demangle.h usability... no
>>>>>>> [2019-10-31T06:07:45,150Z] checking demangle.h presence... no
>>>>>>> [2019-10-31T06:07:45,150Z] checking for demangle.h... no
>>>>>>> [2019-10-31T06:07:45,151Z] configure: error: Could not find 
>>>>>>> demangle.h! You might be able to fix this by running 'sudo yum 
>>>>>>> install binutils-devel'.
>>>>>>>
>>>>>>> Chris
>>>>>>>
>>>>>>>
>>>>>>> On 10/31/19 1:08 AM, Yasumasa Suenaga wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I filed this enhancement to JBS:
>>>>>>>>
>>>>>>>>   https://bugs.openjdk.java.net/browse/JDK-8233285
>>>>>>>>
>>>>>>>> Also I pushed the changes to submit repo, but it was failed.
>>>>>>>>
>>>>>>>> http://hg.openjdk.java.net/jdk/submit/rev/bfbc49233c26
>>>>>>>> http://hg.openjdk.java.net/jdk/submit/rev/430e4f65ef25
>>>>>>>>
>>>>>>>> According to the email from Mach 5, dependency errors were 
>>>>>>>> occurred in jib.
>>>>>>>> Can someone share the details?
>>>>>>>> I'm not familiar in jib, so I want help.
>>>>>>>>
>>>>>>>> mach5-one-ysuenaga-JDK-8233285-20191031-0606-6301426
>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Yasumasa
>>>>>>>>
>>>>>>>>
>>>>>>>> On 2019/10/31 11:23, Chris Plummer wrote:
>>>>>>>>> You can change the configure script. I don't know if there's 
>>>>>>>>> any concerns with using libiberty.a. That's possibly a legal 
>>>>>>>>> question (GNU GPL). You might want to ask that on jdk-dev 
>>>>>>>>> and/or build-dev.
>>>>>>>>>
>>>>>>>>> Chris
>>>>>>>>>
>>>>>>>>> On 10/30/19 7:14 PM, Yasumasa Suenaga wrote:
>>>>>>>>>> Hi Chris,
>>>>>>>>>>
>>>>>>>>>> Thanks for quick reply!
>>>>>>>>>>
>>>>>>>>>> If we convert LinuxDebuggerLocal.c to C++ code, we have to 
>>>>>>>>>> convert a lot of JNI calls to C++ style.
>>>>>>>>>> For example:
>>>>>>>>>>
>>>>>>>>>>   (*env)->FindClass(env, "java/lang/String")
>>>>>>>>>>       to
>>>>>>>>>>   env->FindClass("java/lang/String")
>>>>>>>>>>
>>>>>>>>>> Can it be accepted?
>>>>>>>>>>
>>>>>>>>>> OTOH I said in my email, to use cplus_demangle(), we need to 
>>>>>>>>>> link libiberty.a which is provided by binutils. Thus I think 
>>>>>>>>>> we need to check libiberty.a in configure script. Is it ok?
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I prefer to use cplus_demangle() if we can change configure 
>>>>>>>>>> script.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Yasumasa
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 2019/10/31 11:03, Chris Plummer wrote:
>>>>>>>>>>> Hi Yasumasa,
>>>>>>>>>>>
>>>>>>>>>>> I don't have concerns with adding C++ source to SA, but in 
>>>>>>>>>>> order to do so you've put the new native code in its own 
>>>>>>>>>>> file rather than in LinuxDebuggerLocal.c. I'd like to see 
>>>>>>>>>>> that resolved. So either convert LinuxDebuggerLocal.c to 
>>>>>>>>>>> C++, or use cplus_demangle().
>>>>>>>>>>>
>>>>>>>>>>> thanks,
>>>>>>>>>>>
>>>>>>>>>>> Chris
>>>>>>>>>>>
>>>>>>>>>>> On 10/30/19 6:54 PM, Yasumasa Suenaga wrote:
>>>>>>>>>>>> Hi all,
>>>>>>>>>>>>
>>>>>>>>>>>> I saw C++ frames in `jhsdb jstack --mixed`, and they were 
>>>>>>>>>>>> mangled as below:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 0x00007ff255a8fa4c 
>>>>>>>>>>>> _ZN9JavaCalls11call_helperEP9JavaValueRK12methodHandleP17JavaCallArgumentsP6Thread 
>>>>>>>>>>>> + 0x6ac
>>>>>>>>>>>> 0x00007ff255a8cc1d 
>>>>>>>>>>>> _ZN9JavaCalls12call_virtualEP9JavaValueP5KlassP6SymbolS5_P17JavaCallArgumentsP6Thread 
>>>>>>>>>>>> + 0x33d
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> We can demangle them via c++filt, but I think it is more 
>>>>>>>>>>>> convenience if jstack can show demangling symbols.
>>>>>>>>>>>> I think we can demangle in jstack with this patch. If it is 
>>>>>>>>>>>> accepted, I will file it to JBS and send review request.
>>>>>>>>>>>> What do you think?
>>>>>>>>>>>>
>>>>>>>>>>>> http://cr.openjdk.java.net/~ysuenaga/sa-demangle/
>>>>>>>>>>>>
>>>>>>>>>>>> We can get the stack as below after applying this patch:
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> 0x00007ff1aba20a4c JavaCalls::call_helper(JavaValue*, 
>>>>>>>>>>>> methodHandle const&, JavaCallArguments*, Thread*) + 0x6ac
>>>>>>>>>>>> 0x00007ff1aba1dc1d JavaCalls::call_virtual(JavaValue*, 
>>>>>>>>>>>> Klass*, Symbol*, Symbol*, JavaCallArguments*, Thread*) + 0x33d
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> I use abi::__cxa_demangle() for demangling, so this patch 
>>>>>>>>>>>> adds C++ source to SA.
>>>>>>>>>>>> If it is not comfortable, we can use cplus_demangle().
>>>>>>>>>>>> But this function is provided by libiberty.a, so we need to 
>>>>>>>>>>>> link it to libsaproc and need to check libiberty.a in 
>>>>>>>>>>>> configure script.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>
>>>>>>>>>>>> Yasumasa
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>
>>>>>>>
>>>>
>>>
>>



More information about the build-dev mailing list