File: README

package info (click to toggle)
openjdk-25 25.0.1%2B8-1~deb13u1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 825,408 kB
  • sloc: java: 5,585,680; cpp: 1,333,948; xml: 1,321,242; ansic: 488,034; asm: 404,003; objc: 21,088; sh: 15,106; javascript: 13,265; python: 8,319; makefile: 2,518; perl: 357; awk: 351; pascal: 103; exp: 83; sed: 72; jsp: 24
file content (161 lines) | stat: -rw-r--r-- 5,600 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.

This code is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation.

This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
version 2 for more details (a copy is included in the LICENSE file that
accompanied this code).

You should have received a copy of the GNU General Public License version
2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.

Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
or visit www.oracle.com if you need additional information or have any
questions.

---------------------------------------------------------------------------------

This directory contains source files of testbase_nsk JVMTI framework,
which provides support for JVMTI tests and accessing JVMTI environment.

    Source files:
        jvmti_tools.hpp
        jvmti_tools.cpp
        agent_tools.cpp
        Injector.hpp
        Injector.cpp
        JVMTITools.hpp
        JVMTITools.cpp

    Naming conventions:
        macroses:  NSK_JVMTI_*
        functions: nsk_jvmti_*

---------------------------------------------------------------------------------

jvmti_tools.hpp

Provides functions and macroses for invocation of JVMTI functions
and checking JVMTI errors:

    NSK_JVMTI_VERIFY(call)
    NSK_JVMTI_VERIFY_NEGATIVE(call)
    NSK_JVMTI_VERIFY_CODE(code, action)

Also provides functions for running JVMTI agent:

    - init agent with options:

        int nsk_jvmti_parseOptions(const char options[]);

    - access agent options

        int  nsk_jvmti_getWaitTime();
        void nsk_jvmti_setWaitTime(int waittime);

        const char* nsk_jvmti_findOptionValue(const char name[]);
        const char* nsk_jvmti_findOptionStringValue(const char name[], const char* defaultValue);
        int nsk_jvmti_findOptionIntValue(const char name[], int defaultValue);

        int nsk_jvmti_getOptionsCount();
        const char* nsk_jvmti_getOptionName(int i);
        const char* nsk_jvmti_getOptionValue(int i);

    - create JVMTI environment and register agent thread

        jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* jvm, void* reserved);
        int       nsk_jvmti_setAgentProc(jvmtiStartFunction proc, const void* arg);

    - initialize multiple agent chain via processing of nativeMethodBind event

        int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks);

    - access agent thread environment

        jthread   nsk_jvmti_getAgentThread();
        jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv();
        JNIEnv*   nsk_jvmti_getAgentJNIEnv();

    - synchronize agent with debuggee

        int  nsk_jvmti_waitForSync(jlong timeout);
        int  nsk_jvmti_resumeSync();
        void nsk_jvmti_sleep(jlong timeout);

    - provide proper exit status

        void nsk_jvmti_setFailStatus();
        int  nsk_jvmti_isFailStatus();
        jint nsk_jvmti_getStatus();

    - use locations and breakpoints

        int nsk_jvmti_addLocationCapabilities();
        int nsk_jvmti_addBreakpointCapabilities();

        jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line);
        jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line);
        jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line);

    - find classes and threads

        jclass nsk_jvmti_classBySignature(const char signature[]);
        jthread nsk_jvmti_threadByName(const char name[]);

    - events management

        int nsk_jvmti_isOptionalEvent(jvmtiEvent event);
        int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size,
                                   jvmtiEvent list[], jthread thread);
        void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti);

---------------------------------------------------------------------------------

Typical example of usage of the NSK_JVMTI_VERIFY macro
for invocation of JVMTI functions:

    // jvmti->GetVersion(jvmti, &version)
    if (!NSK_JVMTI_VERIFY(jvmti->GetVersion(&version) != NULL)) {
        return JNI_ERR;
    }

or with saving error code:

    // err = jvmti->GetVersion(jvmti, &version)
    if (!NSK_JVMTI_VERIFY(err = jvmti->GetVersion(&version))) {
        return err;
    }
        functions: nsk_jvmti_*

---------------------------------------------------------------------------------

JVMTITools.hpp

Provides set of functions which convert JVMTI binary data to
a null-terminated character string:


    const char* TranslateEvent(jvmtiEvent event_type);
    const char* TranslateState(jint flags);
    const char* TranslateError(jvmtiError err);
    const char* TranslatePhase(jvmtiPhase phase);
    const char* TranslateRootKind(jvmtiHeapRootKind root);
    const char* TranslateObjectRefKind(jvmtiObjectReferenceKind ref);

---------------------------------------------------------------------------------

Injector.hpp

Provides class file format constants and the function which inject some
profiling bytecodes into Java class files:

    int Inject(const u1* old_bytes, const jint old_length,
               u1** new_bytes, jint* new_length, int bci_mode);

---------------------------------------------------------------------------------