Since both Volker and Dmitry have reviewed this, no further reviews are necessary. I took a look at the changes in shared code, anyway, and it looks good.
Thanks, /Staffan > On 17 dec 2014, at 19:06, Dmitry Samersoff <dmitry.samers...@oracle.com> > wrote: > > Volker, > > The changes looks good for me and I'll sponsor the push. > > But please check, whether you need one more reviewer or not. > > -Dmitry > > On 2014-12-17 20:37, Volker Simonis wrote: >> Hi Dmitry, >> >> once again, thanks for your detailed review. You can find the new >> version of the webrev under: >> >> http://cr.openjdk.java.net/~simonis/webrevs/8049716.v2/ >> >> I've rebased it to the latest jdk9/hs-rt repository today. >> >> I hope I adressed all your concerns. Please find my additional >> comments inline below: >> >> And I still need a sponsor for pushing this reviewed change. Any volunteers:) >> >> Thank you and best regards, >> Volker >> >>> Below is fist part of review - shared files. >>> >>> >>> * agent/make/Makefile - no comments >>> >>> * agent/src/os/linux/LinuxDebuggerLocal.c - no comments >>> >>> * agent/src/os/linux/symtab.c: >>> >>> 438: >>> - What is the magic of symbols that starts with '.' ? >>> - As far as I understand you are getting indirect value from opd section. >>> >> >> There's already a very detailed descrition of the whole story in >> "hotspot/src/share/vm/utilities/elfFuncDescTable.hpp" and I've added a >> reference to that file in the comment now. >> >>> Could you reformat it a bit to have it better readable? >>> >>> Something like: >>> >>> uintptr_t sym_value; >>> ... >>> symvalue = syms->st_value >>> >>> #ifdef ppc64 >>> // Some comments here >>> // ppc specific code here >>> sym_value = >>> #endif >>> >>> symtab->symbols[j].offset = sym_value - baseaddr; >>> >> >> Good point. Done as suggested by you. >> >>> >>> 454: >>> >>> I appreciate detailed comments here. >>> >>> if (false) can cause unreachable code warning, and unused variable >>> warning so it might be better to add #ifdef ppc64 on caller >>> site at ll. 516 and leave here only a comment. >>> >>> But if you decide to guard against try_debuginfo please replace >>> >>> if (false) >>> >>> to >>> >>> goto quit >>> >> >> I think there's already a comment in place. The problem is that the >> debuginfo file only has an empty .opd section. So if we would use the >> debuginfo file for symbol resolution we would still need the .opd >> section from the regular library. This doesn't fit in the current >> function work flow which only uses ELF data from a single file and I >> didn’t wanted to change that. >> >> But your suggestion of using 'goto quit' is good and I've used that version. >> >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/MachineDescriptionPPC64.java >>> >>> 38: return (endian.equals("big")); >>> >>> is enough >>> >> >> I've used the even shorter version proposed by Alexander Smundak: >> >> return "big".equals(System.getProperty("sun.cpu.endian")) >> >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxCDebugger.java >>> - no comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/linux/LinuxThreadContextFactory.java >>> - no comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ProcDebuggerLocal.java >>> - no comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/remote/RemoteDebuggerClient.java >>> - no comments >>> >>> * agent/src/share/classes/sun/jvm/hotspot/runtime/Threads.java - no comments >>> >>> * agent/src/share/classes/sun/jvm/hotspot/runtime/VFrame.java - no comments >>> >>> * make/linux/makefiles/sa.make - no comments >>> >>> * make/sa.files - no comments >>> >>> * src/share/vm/runtime/vmStructs.cpp >>> - no comments >>> >> >>> This is part two of review. Code looks good for me, only minor nits. >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/linux/ppc64/LinuxPPC64CFrame.java: >>> >>> 41 missed space around = >>> 51 extra space between pc >>> >> >> Done. >> >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/linux/ppc64/LinuxPPC64ThreadContext.java >>> >>> >>> - no comments >>> >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/ppc64/PPC64ThreadContext.java >>> >>> 47, 48 extra space before = >>> >> >> Done. >> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ppc64/ProcPPC64Thread.java >>> >>> 34 extra space before id >>> 42 extra space before = , >> >> Done. >> >>> it might be better to create a constant for size of integer. >>> >> >> I agree, but this code was just copied from the corresponding AMD64 >> version and as far as I can see all the other architectures do it the >> same way so I didn't change it. >> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ppc64/ProcPPC64ThreadContext.java >>> >>> - no comments >>> >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/proc/ppc64/ProcPPC64ThreadFactory.java >>> >>> -no comments >>> >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/remote/ppc64/RemotePPC64Thread.java >>> >>> 43 missed space before ? >>> it might be be better to reformat this line to usual if and add comments >>> >> >> The same here - this is copied code. But I've adjusted it to at least >> match with the other platforms. >> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/remote/ppc64/RemotePPC64ThreadContext.java >>> >>> - no comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/debugger/remote/ppc64/RemotePPC64ThreadFactory.java >>> >>> - no comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/runtime/linux_ppc64/LinuxPPC64JavaThreadPDAccess.java >>> >>> >>> 57, 58 extra space before = >>> >>> 63 and below extra space after public >>> >>> 108 unaligned comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/runtime/ppc64/PPC64CurrentFrameGuess.java >>> >>> 49 Formatting in PPC64Frame.java looks much better for me. >>> >>> 40 private static final boolean DEBUG; >>> 41 static { >>> 42 DEBUG = ... >>> 43 } >>> >>> >>> 60, 61 extra space before = >>> >>> 147 missed {} after if (DEBUG) >>> >> >> Done. >> >>> * agent/src/share/classes/sun/jvm/hotspot/runtime/ppc64/PPC64Frame.java >>> >>> 49 - 61, please fix extra and missed spaces >>> >>> 64,67 - extra spaces after static >>> 81 missed space after (int) >>> >>> 115,137 - I would prefer to always use {} after if >>> >>> 212 - multiple missed space before '?' >>> >>> 271 extra space before return >>> >> >> Done. >> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/runtime/ppc64/PPC64JavaCallWrapper.java >>> >>> - no comments >>> >>> * >>> agent/src/share/classes/sun/jvm/hotspot/runtime/ppc64/PPC64RegisterMap.java >>> >>> - no comments >>> >>> -Dmitry >>> >>> >>> On 2014-12-09 21:10, Volker Simonis wrote: >>>> Hi, >>>> >>>> can somebody from the serviceability team please review this webrev? >>>> >>>> http://cr.openjdk.java.net/~simonis/webrevs/8049716 >>>> https://bugs.openjdk.java.net/browse/JDK-8049716 >>>> >>>> The shared changes are really all trivial. >>>> >>>> Thanks, >>>> Volker >>>> >>>> >>>> On Fri, Dec 5, 2014 at 4:01 PM, Volker Simonis <volker.simo...@gmail.com> >>>> wrote: >>>>> Hi Sasha, >>>>> >>>>> thanks for looking at this change. >>>>> I'll incorporate your suggestions into the final version. >>>>> I'm just waiting for one more review before preparing a new webrev. >>>>> >>>>> Regards, >>>>> Volker >>>>> >>>>> >>>>> On Fri, Dec 5, 2014 at 3:10 PM, Maynard Johnson <mayna...@us.ibm.com> >>>>> wrote: >>>>>> On 12/04/2014 07:50 PM, Alexander Smundak wrote: >>>>>>> You are correct, but there no need to have this code for LE at all. >>>>>> Agreed. I'm fine with adding the "&& !defined(ABI_ELFv2)" throughout >>>>>> that file >>>>>> along with the "#if defined(ppc64)". >>>>>>> >>>>>>> BTW, a bit on nitpicking in the same file: >>>>>>> + String endian = System.getProperty("sun.cpu.endian"); >>>>>>> + if (endian.equals("big")) >>>>>>> + return true; >>>>>>> + else >>>>>>> + return false; >>>>>>> can be rewirtten as >>>>>>> return "big".equals(System.getProperty("sun.cpu.endian")); >>>>>> Right. A silly piece of coding there. :-/ >>>>>> >>>>>> -Maynard >>>>>>> >>>>>>> >>>>>>> On Thu, Dec 4, 2014 at 3:43 PM, Maynard Johnson <mayna...@us.ibm.com> >>>>>>> wrote: >>>>>>>> On 12/04/2014 01:15 PM, Alexander Smundak wrote: >>>>>>>>> The changes for agent/src/os/linux/symtab.c >>>>>>>>> b/agent/src/os/linux/symtab.c in >>>>>>>>> http://cr.openjdk.java.net/~simonis/webrevs/8049716 will break >>>>>>>>> Linux/PPC64 little-endian: >>>>>>>>> it uses ABIv2, which dropped function descriptors. So the preprocessor >>>>>>>>> brackets in it should >>>>>>>>> read >>>>>>>>> #if defined(ppc64) && !defined(ABI_ELFv2) >>>>>>>>> instead of just >>>>>>>>> #if defined(ppc64) >>>>>>>> Hi, Alexander, >>>>>>>> I think this is actually fine everywhere except one place. The 'opd' >>>>>>>> variable will be >>>>>>>> set to something other than NULL at line 379 only if running on ppc64 >>>>>>>> BE. So in >>>>>>>> the rest of that function, opd is checked for non-null before using >>>>>>>> it. The only >>>>>>>> place where I think there may be a problem is at line 455: >>>>>>>> >>>>>>>> -------------------------- >>>>>>>> #if defined(ppc64) >>>>>>>> // On Linux/PPC64 the debuginfo files contain an empty file descriptor >>>>>>>> // section (i.e. '.opd' section) which makes the resolution of symbols >>>>>>>> // with the above algorithm impossible (we would need the have both, >>>>>>>> the >>>>>>>> // .opd section from the library and the symbol table from the >>>>>>>> debuginfo >>>>>>>> // file which doesn't match with the current workflow.) >>>>>>>> if (false) { >>>>>>>> #else >>>>>>>> // Look for a separate debuginfo file. >>>>>>>> if (try_debuginfo) { >>>>>>>> #endif >>>>>>>> -------------------------- >>>>>>>> >>>>>>>> Here I think we should do as you suggest: >>>>>>>> #if defined(ppc64) && !defined(ABI_ELFv2) >>>>>>>> >>>>>>>> -Maynard >>>>>>>>> >>>>>>>>> Sorry for the late notice. >>>>>>>>> Sasha >>>>>>>>> >>>>>>>>> On Thu, Dec 4, 2014 at 9:50 AM, Volker Simonis >>>>>>>>> <volker.simo...@gmail.com> wrote: >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> I'd like to submit this webrev which adds support for the SA agent on >>>>>>>>>> Linux/PPC64 on behalf of Maynard Johnson who is the main author of >>>>>>>>>> the >>>>>>>>>> change: >>>>>>>>>> >>>>>>>>>> http://cr.openjdk.java.net/~simonis/webrevs/8049716 >>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8049716 >>>>>>>>>> >>>>>>>>>> I have already reviewed and tested the change and from my side >>>>>>>>>> everything looks fine. >>>>>>>>>> >>>>>>>>>> The change touches quite some shared code but all of these changes >>>>>>>>>> are >>>>>>>>>> trivial and straight-forward (i.e. they just add Linux/PPC64 support >>>>>>>>>> with the help of '#ifdef's in C or yet another 'elseif' clause in >>>>>>>>>> Java). >>>>>>>>>> >>>>>>>>>> We need a second reviewer and a sponsor who can push this to the >>>>>>>>>> hotspot repository once the review is completed. >>>>>>>>>> >>>>>>>>>> Thank you and best regards, >>>>>>>>>> Volker >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>> >>> >>> -- >>> Dmitry Samersoff >>> Oracle Java development team, Saint Petersburg, Russia >>> * I would love to change the world, but they won't give me the sources. > > > -- > Dmitry Samersoff > Oracle Java development team, Saint Petersburg, Russia > * I would love to change the world, but they won't give me the sources.