On 20/01/2016 9:13 AM, Yasumasa Suenaga wrote:
Hi David,

ShouldNotReachHere( ) is called at NMTDcmd:
http://hg.openjdk.java.net/jdk9/hs-rt/hotspot/file/8fcd5cba7938/src/share/vm/services/nmtDCmd.cpp#l156

Sure but that is more of a debugging check - we never expect to reach that code.

Unfortunately I do see some other implicit aborts due to allocation failures, but I have to say this seems very wrong to me.

David
-----

If target VM is aborted, caller (e.g. jcmd) cannot receive response. I
think that the caller show Exception.

Thanks,

Yasumasa

2016/01/20 7:37 "David Holmes" <david.hol...@oracle.com
<mailto:david.hol...@oracle.com>>:

    On 19/01/2016 11:19 PM, Yasumasa Suenaga wrote:

        Hi,

        I uploaded a new webrev:
        http://cr.openjdk.java.net/~ysuenaga/JDK-8147388/webrev.03/

        It is malloc/free version.
        If NULL returns from malloc(), it calls vm_exit_out_of_memory().


    That seems rather extreme - do other dcmd failures abort the VM? I
    would have expected some kind of error propagation back to the caller.

    Thanks,
    David

        All test about this changes work fine.
        Please review.

        Thanks,

        Yasumasa


        On 2016/01/19 22:07, Dmitry Samersoff wrote:

            David,

                Anytime we start to use a language feature for the first
                time we need
                to be extra diligent to make sure there are no unintended
                side-effects and that all our supported compilers (and
                probably a few
                others used in the community) do the right thing. A bit
                of googling
                seems to indicate that variable length arrays are part
                of C99 but are
                not allowed in C++ - though gcc has an extension that
                does allow
                them.


            I hear your concern.

            Moreover I revisit my advice and think it's not a good idea
            to do a
            stack allocation based on unverified user input.

            Yasumasa, sorry for leading in wrong direction. Lets use
            malloc/free in
            this case.

            Nevertheless, I would like to start broader evaluation of
            possible use
            on-stack allocation (either alloca or VLA) - hotspot may
            benefit of it
            in many places.

            -Dmitry

            On 2016-01-19 02:06, David Holmes wrote:

                On 19/01/2016 7:26 AM, Dmitry Samersoff wrote:

                    David,

                    On 2016-01-18 23:47, David Holmes wrote:

                        On 18/01/2016 11:20 PM, Dmitry Samersoff wrote:

                            Yasumasa,

                                Can we use VLA (Variable Length Arrays) ?


                            Apple LLVM version 6.1.0 (clang-602.0.53)
                            (based on LLVM
                            3.6.0svn) Target: x86_64-apple-darwin14.5.0
                            Thread model:
                            posix

                            Compiles it just fine.


                        Are we using variable length arrays anywhere
                        else in the VM yet?


                    Probably not.

                    But personally, I see no reason to don't use it for
                    simple cases
                    like this one.


                Anytime we start to use a language feature for the first
                time we need
                to be extra diligent to make sure there are no unintended
                side-effects and that all our supported compilers (and
                probably a few
                others used in the community) do the right thing. A bit
                of googling
                seems to indicate that variable length arrays are part
                of C99 but are
                not allowed in C++ - though gcc has an extension that
                does allow
                them.

                This reports they are not available in Visual Studio C++:

                https://msdn.microsoft.com/en-us/library/zb1574zs.aspx

                David -----

                        What are the implications for allocation and in
                        particular
                        allocation failure?


                    This allocation just reserves some space on the
                    stack[1], so it
                    can cause stack overflow if we attempt to allocate
                    two much bytes.




                    1. Listing fragment (extra labels are removed)

                    3                    .Ltext0: 5                    .LC0:

                    14:test.cxx      **** void testme(int n) {
                    15:test.cxx      ****
                    char m[n]; 25 0000 4863FF                movslq
                    %edi, %rdi 28 0003
                    55                    pushq   %rbp 37 0004 BE000000
                    movl    $.LC0, %esi 41 0009 4883C70F
                    addq    $15,
                    %rdi 46 000d 31C0                  xorl    %eax,
                    %eax 50 000f
                    4883E7F0              andq    $-16, %rdi 54 0013 4889E5
                    movq    %rsp, %rbp 59 0016 4829FC
                    subq    %rdi,
                    %rsp 64 0019 BF010000              movl    $1, %edi
                    65 001e 4889E2
                    movq    %rsp, %rdx 66 0021 E8000000              call
                    __printf_chk 16:test.cxx      ****   printf("%s",
                    m); 17:test.cxx
                    **** }

                    -Dmitry



                        David -----

                            -Dmitry

                            On 2016-01-18 16:09, Yasumasa Suenaga wrote:

                                Hi Dmitry,

                                    1. It might be better to have one
                                    jcmd to run both java and
                                    native java agent. If agent library
                                    name ends with ".jar"
                                    we can assume it's java agent.


                                Okay, I'll try it.

                                    if (_libpath.value() == NULL) {
                                    error ... }


                                I will add it. However, I note you that
                                _libpath is given
                                mandatory flag.
                                
http://mail.openjdk.java.net/pipermail/serviceability-dev/2016-January/018661.html







            char options[option_len];


                                Can we use VLA (Variable Length Arrays)
                                ? I'm worried that
                                several C++ compiler cannot compile this
                                code.
                                http://clang.llvm.org/compatibility.html#vla


                                Thanks,

                                Yasumasa


                                On 2016/01/18 19:38, Dmitry Samersoff wrote:

                                    Yasumasa,

                                    1. It might be better to have one
                                    jcmd to run both java and
                                    native java agent. If agent library
                                    name ends with ".jar"
                                    we can assume it's java agent.

                                    2. Please get rid of malloc/free and
                                    check _libpath.value()
                                    for NULL at ll. 295 and below.


                                    if (_libpath.value() == NULL) {
                                    error ... }

                                    if (_option.value() == NULL) {
                                    
JvmtiExport::load_agent_library("instrument",
                                    "false",
                                    _libpath.value(), output()); return; }

                                    size_t option_len = \
                                    strlen(_libpath.value()) +
                                    strlen(_option.value()) + 1;

                                    char options[option_len];

                                    ....

                                    -Dmitry


                                    On 2016-01-15 16:33, Yasumasa
                                    Suenaga wrote:

                                        Hi,

                                        I added permissions and tests in
                                        new webrev:
                                        
http://cr.openjdk.java.net/~ysuenaga/JDK-8147388/webrev.01/



            Two tests (LoadAgentDcmdTest, LoadJavaAgentDcmdTest) work fine.



                                        Thanks,

                                        Yasumasa


                                        On 2016/01/15 17:20, Staffan
                                        Larsen wrote:

                                            This is a good improvement
                                            overall.

                                            The new diagnostic commands
                                            need to have proper
                                            permissions set:

                                            static const JavaPermission
                                            permission() {
                                            JavaPermission p =
                                            
{"java.lang.management.ManagementPermission",
                                            “control", NULL}; return p; }

                                            And as David said: tests! See
                                            
hotspot/test/serviceability/dcmd/jvmti.

                                            Thanks, /Staffan

                                                On 14 jan. 2016, at
                                                15:00, Yasumasa Suenaga
                                                <yasue...@gmail.com
                                                <mailto:yasue...@gmail.com>>
                                                wrote:

                                                Hi all,

                                                We can use Attach API to
                                                attach JVMTI agent to live
                                                process. However, we
                                                have to write Java code
                                                for it.

                                                If we can attach JVMTI
                                                agents through jcmd, it is
                                                very useful. So I want
                                                to add two new diagnostic
                                                commands:

                                                * JVMTI.agent_load: Load
                                                JVMTI native agent. *
                                                JVMTI.javaagent_load:
                                                Load JVMTI java agent.

                                                I maintain two JVMTI
                                                agents - HeapStats [1] and
                                                JLivePatcher [2]. [1] is
                                                native agent, [2] is java
                                                agent. They provide a
                                                program for attaching to
                                                live
                                                process.

                                                I guess that various
                                                JVMTI agents provide own
                                                attach
                                                mechanism like them. I
                                                think that we should provide
                                                general way to attach.

                                                I've uploaded webrev.
                                                Could you review it?
                                                
http://cr.openjdk.java.net/~ysuenaga/JDK-8147388/webrev.00/



            I'm jdk9 committer, however I cannot access JPRT.

                                                So I need a sponsor.


                                                Thanks,

                                                Yasumasa


                                                [1]
                                                
http://icedtea.classpath.org/wiki/HeapStats
                                                [2]
                                                
https://github.com/YaSuenag/jlivepatcher
                                                (in
                                                Japanese)










Reply via email to