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. > 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> >>>>>>> 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) >>>>>> >>>> >>>> >> >> -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.