Hi Maynard,

I'm now back from JavaOne and can look at this issue. Could you please
share your current implementation so I can reproduce your problem more
easily.

By the way, you can find the ppc frame layout description of all the
different frame types (native, interpreted, compiled) in
/hotspot/src/cpu/ppc/vm/frame_ppc.hpp. The different frame::sender()
implementations (in frame_x86.cpp, frame_ppc.cpp, ..) contain all the
gory details about how to walk a frame. That's what you have to
implement in Java in order to get a full stack trace from the
serviceability tools. On x86 the frame pointer (i.e. the ebp register
points to the last frame pointer while (frame pointer - 1) points to
the return pc.

Regards,
Volker


On Tue, Sep 30, 2014 at 12:42 AM, Maynard Johnson <mayna...@us.ibm.com> wrote:
> On 07/09/2014 12:38 PM, Volker Simonis wrote:
>> On Wed, Jul 9, 2014 at 3:45 PM, Maynard Johnson <mayna...@us.ibm.com> wrote:
>>> On 07/04/2014 10:59 AM, Volker Simonis wrote:
>>>> Hi Maynard,
>>>>
>>>> we (i.e. SAP) do not currently support the SA agent on Linux/PPC64 and
>>>> AIX (we have other proprietary servicibility tools). Because of that
>>>> (and because SA isn't specified by the SE specification) porting the
>>>> SA agent was no top priority until now. But there are no technical
>>>> reasons why it should not work (it's just a lack of  resources). Of
>>>> course contributions are always highly welcome:)
>>>>
>>>> That said, the SA agent library and jar file actually gets build. If
>>>> you do a complete build you'll find them under:
>>>>
>>>> hotspot/linux_ppc64_compiler2/generated/sa-jdi.jar
>>>> hotspot/linux_ppc64_compiler2/{product,fastdebug,debug}/libsaproc.so
>>>>
>>>> in the build directory. They are just not copied into the jdk
>>>> workspace and the created images because they don't work out of the
>>>> box.
>>>>
>>>> The following two patches for the jdk9 top-level and hotspot
>>>> repositories respectively should fix the build such that the agent
>>>> files will be correctly copied into the images.
>>>>
>>>> http://cr.openjdk.java.net/~simonis/webrevs/sa_toplevel
>>>> http://cr.openjdk.java.net/~simonis/webrevs/sa_hotspot/
>>>>
>>>> They will get you to the point where for example 'jstack' will run up
>>>> to the following point:
>>> Ok, great.  This should be enough to get me started.  I should have time to 
>>> begin on this later this week or early next week.
>>
>> Hi Maynard,
>>
>> great to welcome you in the ppc64 porting team:)
>>
>>> I may come knocking at your "door" for some occasional help, but I'll try 
>>> to keep that to a minimum.
> Hi, Volker.  Knock, knock.  :-)
> I was preoccupied for a while this summer rolling out the latest release of 
> oprofile (for which I'm the maintainer), but am now coming back to this task. 
> I've implemented what I believe are all of the necessary ppc64-specific Java 
> files to enable the jstack and jmap tools to work on core files.  I've also 
> updated hotspot/agent/src/os/linux/LinuxDebuggerLocal.c to implement the 
> accumulation of register data on ppc64 vi ptrace.  But now I've run into a 
> problem I need help with.
>
> When I run jstack on my POWER7 system, it gets stuck in a loop in 
> sun.jvm.hotspot.tools.StackTrace::run.  There's an inner for-loop there where 
> cur.getLastJavaVFrameDbg() is called ('cur' is a JavaThread). For the first 
> JavaThread, we do return from getLastJavaVFrameDbg(), just as we do when 
> running jstack on my Intel laptop.  But for the second JavaThread, we never 
> return from getLastJavaVFrameDbg() on ppc64.  I believe the root of the 
> problem is in my new  sun.jvm.hotspot.runtime.ppc64.PPC64Frame class. The 
> getLastJavaVFrameDbg method calls getCurrentFrameGuess, which is implemented 
> in the new sun.jvm.hotspot.runtime.linux_ppc64.LinuxPPC64JavaThreadPDAccess 
> class. In both ppc64 and x86, this first level xxxCurrentFrameGuess object is 
> instantiated with a 'pc' value of null, so getCurrentFrameGuess then new's up 
> a xxxFrame object, passing in the SP and FP, but no PC. The implementation of 
> the PPC64Frame(Address,Address) constructor is currently identical to the 
> X86Frame cons!
>  tructor, b
> ut is almost certainly incorrect. In this constructor, the 'pc' is set as 
> follows:
>          this.pc = raw_sp.getAddressAt(-1 * VM.getVM().getAddressSize());
>
> This works fine on X86, but not on ppc64. But I'm not understanding how this 
> even works on X86. From what I understand, the data below the stack pointer 
> on X86 is the "red zone". How is that being used as a pc? But more 
> importantly, do you know how I can ascertain what the 'pc' value should be 
> for ppc64?
>
> Thanks in advance for any assistance you can give.
>
> -Maynard
>
>>
>> Please feel free to ask any questions. The OpenJDK project and
>> especially the HotSpot part are known to take some getting used to.
>>
>>> I was wondering if a bug report should be opened in JBS, just to record 
>>> that the issue is being worked.  Thoughts?
>>
>> I have opened "8049715: PPC64: First steps to enable SA on
>> Linux/PPC64" (https://bugs.openjdk.java.net/browse/JDK-8049715) for
>> the patch which I sent you with the last mail. I've already sent out
>> webrevs for that change and hopefully it will be fixed within the next
>> few days.
>>
>> For the actual port of the ppc64-specific stuff I opened bug "8049716
>> PPC64: Implement SA on Linux/PPC64"
>> (https://bugs.openjdk.java.net/browse/JDK-8049716). I can also help
>> with hosting the webrevs, once you have a running version.
>>
>> Regards,
>> Volker
>>
>>>
>>> -Maynard
>>>>
>>>>> images/j2sdk-image/bin/jstack ./jdk/bin/java core.13547
>>>> Attaching to core core.13547 from executable ./jdk/bin/java, please wait...
>>>> WARNING: Hotspot VM version
>>>> 1.9.0-internal-debug-d046063_2014_07_04_11_46-b00 does not match with
>>>> SA version 1.9.0-internal-debug-d046063_2014_07_04_11_46-b00. You may
>>>> see unexpected results.
>>>> Debugger attached successfully.
>>>> Server compiler detected.
>>>> JVM version is 1.9.0-internal-debug-d046063_2014_07_04_11_46-b00
>>>> Deadlock Detection:
>>>>
>>>> Exception in thread "main" java.lang.reflect.InvocationTargetException
>>>>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>     at 
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>>     at 
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>     at java.lang.reflect.Method.invoke(Method.java:484)
>>>>     at sun.tools.jstack.JStack.runJStackTool(JStack.java:140)
>>>>     at sun.tools.jstack.JStack.main(JStack.java:106)
>>>> Caused by: java.lang.ExceptionInInitializerError
>>>>     at sun.jvm.hotspot.runtime.VM.getThreads(VM.java:610)
>>>>     at 
>>>> sun.jvm.hotspot.runtime.DeadlockDetector.print(DeadlockDetector.java:54)
>>>>     at 
>>>> sun.jvm.hotspot.runtime.DeadlockDetector.print(DeadlockDetector.java:39)
>>>>     at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:62)
>>>>     at sun.jvm.hotspot.tools.StackTrace.run(StackTrace.java:45)
>>>>     at sun.jvm.hotspot.tools.JStack.run(JStack.java:66)
>>>>     at sun.jvm.hotspot.tools.Tool.startInternal(Tool.java:260)
>>>>     at sun.jvm.hotspot.tools.Tool.start(Tool.java:223)
>>>>     at sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
>>>>     at sun.jvm.hotspot.tools.JStack.main(JStack.java:92)
>>>>     ... 6 more
>>>> Caused by: java.lang.RuntimeException: OS/CPU combination linux/ppc64
>>>> not yet supported
>>>>     at sun.jvm.hotspot.runtime.Threads.initialize(Threads.java:97)
>>>>     at sun.jvm.hotspot.runtime.Threads.access$000(Threads.java:42)
>>>>     at sun.jvm.hotspot.runtime.Threads$1.update(Threads.java:52)
>>>>     at 
>>>> sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:394)
>>>>     at sun.jvm.hotspot.runtime.Threads.<clinit>(Threads.java:50)
>>>>     ... 16 more
>>>>
>>>> And that's the point where I was saying that "contributions are always
>>>> highly welcome:)"
>>>>
>>>> Now all the Linux/PPC64 specific class under
>>>> hotspot/agent/src/share/classes/ would have to be implemented (e.g.
>>>> sun/jvm/hotspot/runtime/amd64/AMD64CurrentFrameGuess). Are you
>>>> interested in contributing to this project?
>>>>
>>>> Regards,
>>>> Volker
>>>>
>>>> PS: I cc-ed serviceability-dev because I remember that they started a
>>>> poll a while ago about who is using the SA tools. I'm therefore not
>>>> quite sure what's the current status and what are the future plan for
>>>> these libraries.
>>>>
>>>>
>>>> On Thu, Jul 3, 2014 at 9:04 PM, Maynard Johnson <mayna...@us.ibm.com> 
>>>> wrote:
>>>>> Hi, all,
>>>>> On my Intel laptop, I note that certain jdk9 serviceability tools -- 
>>>>> jstack, jmap, jsadebugd -- have an option to pass a core file instead of 
>>>>> a process ID; for example:
>>>>>
>>>>>         $ jstack -h
>>>>>         Usage:
>>>>>             jstack [-l] <pid>
>>>>>                 (to connect to running process)
>>>>>             jstack -F [-m] [-l] <pid>
>>>>>                 (to connect to a hung process)
>>>>>             jstack [-m] [-l] <executable> <core>
>>>>>                 (to connect to a core file)
>>>>>             jstack [-m] [-l] [server_id@]<remote server IP or hostname>
>>>>>                 (to connect to a remote debug server)
>>>>>
>>>>> But on my PowerLinux box, the core file option is missing from the usage 
>>>>> output.  I see that 
>>>>> jdk9-dev/jdk/src/share/classes/sun/tools/jstack/JStack.java requires the 
>>>>> existence of sun.jvm.hotspot.tools.JStack for the core file option to be 
>>>>> made available.  On my Intel system, the sun.jvm.hotspot.tools.JStack 
>>>>> class is packaged in sa-jdi.jar in 
>>>>> <jdk9Dev-install>/jvm/openjdk-1.9.0-internal/lib/.  But the sa-jdi.jar is 
>>>>> missing on PowerPC.  Is there a technical reason for this or is it an 
>>>>> oversight?
>>>>>
>>>>> The jsadebugd tool does not run at all on PowerLinux; it gets the 
>>>>> following error:
>>>>>
>>>>>         Error: Could not find or load main class 
>>>>> sun.jvm.hotspot.jdi.SADebugServer
>>>>>
>>>>> On my Intel system, the SADebugServer class is packaged in the sa-jdi.jar 
>>>>> mentioned above.
>>>>>
>>>>> I've spent the past day or so looking at makefiles until I'm cross-eyed, 
>>>>> but haven't yet found where the issue might be.  Any tips would be 
>>>>> appreciated.
>>>>>
>>>>> Thanks.
>>>>> -Maynard
>>>>>
>>>>
>>>
>>
>

Reply via email to