RFR: JDK-8147388: Add diagnostic commands to attach JVMTI agent.
Dmitry Samersoff
dmitry.samersoff at oracle.com
Mon Jan 18 21:26:52 UTC 2016
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 <yasuenag at 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.
More information about the serviceability-dev
mailing list