[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-serviceability-dev
Subject:    Re: C++ symbols in jhsdb jstack --mixed
From:       Yasumasa Suenaga <suenaga () oss ! nttdata ! com>
Date:       2019-10-31 23:54:23
Message-ID: 86dc525b-7f4a-2cbd-5893-37fb8ebe4c59 () oss ! nttdata ! com
[Download RAW message or body]

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
> > > > > > 
> > > > > > 
> > > > 
> > > > 
> > 
> > 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic