test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.cpp
author iignatyev
Tue, 28 Aug 2018 14:37:34 -0700
changeset 51551 e409244ce72e
parent 50156 test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.c@6d6fe9416864
child 51774 79dc492c00ab
permissions -rw-r--r--
8209611: use C++ compiler for hotspot tests Reviewed-by: vlivanov, ihse, erikj, jcbeyler
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50156
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     1
/*
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     2
 * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     4
 *
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     7
 * published by the Free Software Foundation.
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     8
 *
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    13
 * accompanied this code).
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    14
 *
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    18
 *
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    21
 * questions.
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    22
 */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    23
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    24
#include <stdlib.h>
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    25
#include <string.h>
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    26
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    27
#include "native_thread.h"
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    28
#include "jni_tools.h"
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    29
#include "jvmti_tools.h"
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    30
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    31
#ifdef __cplusplus
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    32
extern "C" {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    33
#endif
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    34
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    35
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    36
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    37
/* Be careful: do not build shared library which will be linked with different
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    38
 * agent libs while global variables are used
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    39
 * Now the same source is used to build different agent libs, so these
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    40
 * variables are not shared between agents */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    41
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    42
static jthread agentThread = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    43
static jvmtiStartFunction agentThreadProc = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    44
static void* agentThreadArg = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    45
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    46
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    47
typedef enum {NEW, RUNNABLE, WAITING, SUSPENDED, TERMINATED} thread_state_t;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    48
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    49
typedef struct agent_data_t {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    50
    volatile thread_state_t thread_state;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    51
    int last_debuggee_status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    52
    jrawMonitorID monitor;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    53
} agent_data_t;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    54
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    55
static agent_data_t agent_data;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    56
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    57
static jvmtiEnv* jvmti_env = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    58
static JavaVM* jvm = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    59
static JNIEnv* jni_env = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    60
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    61
static volatile int currentAgentStatus = NSK_STATUS_PASSED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    62
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    63
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    64
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    65
void nsk_jvmti_setFailStatus() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    66
    currentAgentStatus = NSK_STATUS_FAILED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    67
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    68
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    69
int nsk_jvmti_isFailStatus() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    70
    return (nsk_jvmti_getStatus() != NSK_STATUS_PASSED);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    71
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    72
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    73
jint nsk_jvmti_getStatus() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    74
    return currentAgentStatus;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    75
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    76
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    77
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    78
static jvmtiError init_agent_data(jvmtiEnv *jvmti_env, agent_data_t *data) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    79
    data->thread_state = NEW;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    80
    data->last_debuggee_status = NSK_STATUS_PASSED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    81
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    82
    return NSK_CPP_STUB3(CreateRawMonitor, jvmti_env, "agent_data_monitor", &data->monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    83
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    84
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    85
/** Reset agent data to prepare for another run. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    86
void nsk_jvmti_resetAgentData() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    87
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    88
    /* wait for agentThreadWrapper() to finish */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    89
    while (agent_data.thread_state != TERMINATED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    90
        rawMonitorWait(jvmti_env, agent_data.monitor, 10);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    91
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    92
    agent_data.thread_state = NEW;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    93
    agent_data.last_debuggee_status = NSK_STATUS_PASSED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    94
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    95
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    96
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    97
static jvmtiError free_agent_data(jvmtiEnv *jvmti_env, agent_data_t *data) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    98
    return NSK_CPP_STUB2(DestroyRawMonitor, jvmti_env, data->monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    99
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   100
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   101
/** Create JVMTI environment. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   102
jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* javaVM, void* reserved) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   103
    jvm = javaVM;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   104
    if (!NSK_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   105
            NSK_CPP_STUB3(GetEnv, javaVM, (void **)&jvmti_env, JVMTI_VERSION_1_1) == JNI_OK)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   106
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   107
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   108
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   109
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   110
    if (!NSK_JVMTI_VERIFY(init_agent_data(jvmti_env, &agent_data))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   111
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   112
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   113
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   114
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   115
    return jvmti_env;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   116
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   117
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   118
/** Dispose JVMTI environment */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   119
static int nsk_jvmti_disposeJVMTIEnv(jvmtiEnv* jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   120
    if (jvmti_env != NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   121
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   122
                NSK_CPP_STUB1(DisposeEnvironment, jvmti_env))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   123
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   124
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   125
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   126
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   127
        if (!NSK_JVMTI_VERIFY(free_agent_data(jvmti_env, &agent_data))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   128
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   129
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   130
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   131
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   132
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   133
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   134
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   135
/** Get JNI environment for agent thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   136
JNIEnv* nsk_jvmti_getAgentJNIEnv() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   137
    return jni_env;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   138
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   139
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   140
/** Get JVMTI environment for agent */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   141
jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   142
    return jvmti_env;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   143
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   144
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   145
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   146
static void set_agent_thread_state(thread_state_t value) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   147
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   148
    agent_data.thread_state = value;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   149
    rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   150
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   151
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   152
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   153
/** Wrapper for user agent thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   154
static void JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   155
agentThreadWrapper(jvmtiEnv* jvmti_env, JNIEnv* agentJNI, void* arg) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   156
    jni_env = agentJNI;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   157
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   158
    /* run user agent proc */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   159
    {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   160
        set_agent_thread_state(RUNNABLE);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   161
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   162
        NSK_TRACE((*agentThreadProc)(jvmti_env, agentJNI, agentThreadArg));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   163
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   164
        set_agent_thread_state(TERMINATED);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   165
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   166
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   167
    /* finalize agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   168
    {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   169
        /* gelete global ref for agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   170
        NSK_CPP_STUB2(DeleteGlobalRef, agentJNI, agentThread);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   171
        agentThread = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   172
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   173
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   174
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   175
/** Start wrapper for user agent thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   176
static jthread startAgentThreadWrapper(JNIEnv *jni_env, jvmtiEnv* jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   177
    const jint  THREAD_PRIORITY = JVMTI_THREAD_MAX_PRIORITY;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   178
    const char* THREAD_NAME = "JVMTI agent thread";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   179
    const char* THREAD_CLASS_NAME = "java/lang/Thread";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   180
    const char* THREAD_CTOR_NAME = "<init>";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   181
    const char* THREAD_CTOR_SIGNATURE = "(Ljava/lang/String;)V";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   182
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   183
    jobject threadName = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   184
    jclass threadClass = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   185
    jmethodID threadCtor = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   186
    jobject threadObject = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   187
    jobject threadGlobalRef = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   188
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   189
    if (!NSK_JNI_VERIFY(jni_env, (threadClass =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   190
            NSK_CPP_STUB2(FindClass, jni_env, THREAD_CLASS_NAME)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   191
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   192
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   193
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   194
    if (!NSK_JNI_VERIFY(jni_env, (threadCtor =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   195
            NSK_CPP_STUB4(GetMethodID, jni_env, threadClass, THREAD_CTOR_NAME, THREAD_CTOR_SIGNATURE)) != NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   196
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   197
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   198
    if (!NSK_JNI_VERIFY(jni_env, (threadName =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   199
            NSK_CPP_STUB2(NewStringUTF, jni_env, THREAD_NAME)) != NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   200
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   201
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   202
    if (!NSK_JNI_VERIFY(jni_env, (threadObject =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   203
            NSK_CPP_STUB4(NewObject, jni_env, threadClass, threadCtor, threadName)) != NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   204
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   205
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   206
    if (!NSK_JNI_VERIFY(jni_env, (threadGlobalRef =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   207
            NSK_CPP_STUB2(NewGlobalRef, jni_env, threadObject)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   208
        NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   209
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   210
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   211
    agentThread = (jthread)threadGlobalRef;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   212
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   213
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   214
            NSK_CPP_STUB5(RunAgentThread, jvmti_env, agentThread,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   215
                            &agentThreadWrapper, agentThreadArg, THREAD_PRIORITY))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   216
        NSK_CPP_STUB2(DeleteGlobalRef, jni_env, threadGlobalRef);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   217
        NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   218
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   219
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   220
    return agentThread;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   221
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   222
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   223
/** Register user agent thread with arg. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   224
int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, void* arg) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   225
    agentThreadProc = proc;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   226
    agentThreadArg = arg;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   227
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   228
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   229
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   230
/** Get agent thread ref. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   231
jthread nsk_jvmti_getAgentThread() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   232
    return agentThread;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   233
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   234
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   235
/** Run registered user agent thread via wrapper. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   236
static jthread nsk_jvmti_runAgentThread(JNIEnv *jni_env, jvmtiEnv* jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   237
    /* start agent thread wrapper */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   238
    jthread thread = startAgentThreadWrapper(jni_env, jvmti_env);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   239
    if (thread == NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   240
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   241
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   242
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   243
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   244
    return thread;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   245
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   246
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   247
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   248
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   249
/** Sleep current thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   250
void nsk_jvmti_sleep(jlong timeout) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   251
    int seconds = (int)((timeout + 999) / 1000);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   252
    THREAD_sleep(seconds);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   253
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   254
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   255
/** Sync point called from Java code. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   256
static jint syncDebuggeeStatus(JNIEnv* jni_env, jvmtiEnv* jvmti_env, jint debuggeeStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   257
    jint result = NSK_STATUS_FAILED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   258
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   259
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   260
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   261
    /* save last debugee status */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   262
    agent_data.last_debuggee_status = debuggeeStatus;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   263
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   264
    /* we don't enter if-stmt in second call */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   265
    if (agent_data.thread_state == NEW) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   266
        if (nsk_jvmti_runAgentThread(jni_env, jvmti_env) == NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   267
            goto monitor_exit_and_return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   268
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   269
        /* SP2.2-w - wait for agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   270
        while (agent_data.thread_state == NEW) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   271
            rawMonitorWait(jvmti_env, agent_data.monitor, 0);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   272
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   273
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   274
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   275
    /* wait for sync permit */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   276
    /* we don't enter loop in first call */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   277
    while (agent_data.thread_state != WAITING && agent_data.thread_state != TERMINATED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   278
        /* SP4.2-w - second wait for agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   279
        rawMonitorWait(jvmti_env, agent_data.monitor, 0);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   280
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   281
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   282
    if (agent_data.thread_state != TERMINATED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   283
        agent_data.thread_state = SUSPENDED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   284
        /* SP3.2-n - notify to start test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   285
        /* SP6.2-n - notify to end test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   286
        rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   287
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   288
    else {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   289
        NSK_COMPLAIN0("Debuggee status sync aborted because agent thread has finished\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   290
        goto monitor_exit_and_return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   291
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   292
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   293
    /* update status from debuggee */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   294
    if (debuggeeStatus != NSK_STATUS_PASSED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   295
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   296
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   297
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   298
    while (agent_data.thread_state == SUSPENDED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   299
        /* SP5.2-w - wait while testing */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   300
        /* SP7.2 - wait for agent end */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   301
        rawMonitorWait(jvmti_env, agent_data.monitor, 0);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   302
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   303
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   304
    agent_data.last_debuggee_status = nsk_jvmti_getStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   305
    result = agent_data.last_debuggee_status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   306
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   307
monitor_exit_and_return:
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   308
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   309
    return result;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   310
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   311
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   312
/** Wait for sync point with Java code. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   313
int nsk_jvmti_waitForSync(jlong timeout) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   314
    static const int inc_timeout = 1000;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   315
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   316
    jlong t = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   317
    int result = NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   318
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   319
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   320
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   321
    agent_data.thread_state = WAITING;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   322
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   323
    /* SP2.2-n - notify agent is waiting and wait */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   324
    /* SP4.1-n - notify agent is waiting and wait */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   325
    rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   326
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   327
    while (agent_data.thread_state == WAITING) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   328
        /* SP3.2-w - wait to start test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   329
        /* SP6.2-w - wait to end test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   330
        rawMonitorWait(jvmti_env, agent_data.monitor, inc_timeout);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   331
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   332
        if (timeout == 0) continue;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   333
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   334
        t += inc_timeout;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   335
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   336
        if (t >= timeout) break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   337
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   338
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   339
    if (agent_data.thread_state == WAITING) {
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50156
diff changeset
   340
        NSK_COMPLAIN1("No status sync occured for timeout: %" LL "d ms\n", timeout);
50156
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   341
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   342
        result = NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   343
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   344
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   345
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   346
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   347
    return result;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   348
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   349
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   350
/** Resume java code suspended on sync point. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   351
int nsk_jvmti_resumeSync() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   352
    int result;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   353
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   354
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   355
    if (agent_data.thread_state == SUSPENDED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   356
        result = NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   357
        agent_data.thread_state = RUNNABLE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   358
        /* SP5.2-n - notify suspend done */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   359
        /* SP7.2-n - notify agent end */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   360
        rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   361
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   362
    else {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   363
        NSK_COMPLAIN0("Debuggee was not suspended on status sync\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   364
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   365
        result = NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   366
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   367
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   368
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   369
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   370
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   371
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   372
/** Native function for Java code to provide sync point. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   373
JNIEXPORT jint JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   374
Java_nsk_share_jvmti_DebugeeClass_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   375
    jint status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   376
    NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   377
    return status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   378
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   379
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   380
/** Native function for Java code to reset agent data. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   381
JNIEXPORT void JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   382
Java_nsk_share_jvmti_DebugeeClass_resetAgentData(JNIEnv* jni_env, jclass cls) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   383
    NSK_TRACE(nsk_jvmti_resetAgentData());
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   384
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   385
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   386
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   387
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   388
/** Find loaded class by signature. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   389
jclass nsk_jvmti_classBySignature(const char signature[]) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   390
    jclass* classes = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   391
    jint count = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   392
    jclass foundClass = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   393
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   394
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   395
    if (!NSK_VERIFY(signature != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   396
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   397
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   398
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   399
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   400
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   401
            NSK_CPP_STUB3(GetLoadedClasses, jvmti_env, &count, &classes))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   402
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   403
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   404
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   405
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   406
    for (i = 0; i < count; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   407
        char* sig = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   408
        char* generic = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   409
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   410
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   411
                NSK_CPP_STUB4(GetClassSignature, jvmti_env, classes[i], &sig, &generic))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   412
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   413
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   414
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   415
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   416
        if (sig != NULL && strcmp(signature, sig) == 0) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   417
            foundClass = classes[i];
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   418
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   419
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   420
        if (!(NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   421
                    NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   422
                && NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   423
                    NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)generic)))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   424
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   425
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   426
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   427
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   428
        if (foundClass != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   429
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   430
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   431
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   432
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   433
                NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)classes))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   434
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   435
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   436
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   437
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   438
    if (!NSK_JNI_VERIFY(jni_env, (foundClass = (jclass)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   439
                NSK_CPP_STUB2(NewGlobalRef, jni_env, foundClass)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   440
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   441
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   442
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   443
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   444
    return foundClass;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   445
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   446
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   447
/** Find alive thread by name. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   448
jthread nsk_jvmti_threadByName(const char name[]) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   449
    jthread* threads = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   450
    jint count = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   451
    jthread foundThread = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   452
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   453
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   454
    if (!NSK_VERIFY(name != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   455
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   456
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   457
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   458
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   459
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   460
            NSK_CPP_STUB3(GetAllThreads, jvmti_env, &count, &threads))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   461
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   462
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   463
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   464
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   465
    for (i = 0; i < count; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   466
        jvmtiThreadInfo info;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   467
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   468
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   469
                NSK_CPP_STUB3(GetThreadInfo, jvmti_env, threads[i], &info))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   470
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   471
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   472
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   473
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   474
        if (info.name != NULL && strcmp(name, info.name) == 0) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   475
            foundThread = threads[i];
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   476
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   477
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   478
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   479
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   480
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   481
                NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)threads))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   482
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   483
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   484
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   485
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   486
    if (!NSK_JNI_VERIFY(jni_env, (foundThread = (jthread)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   487
                NSK_CPP_STUB2(NewGlobalRef, jni_env, foundThread)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   488
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   489
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   490
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   491
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   492
    return foundThread;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   493
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   494
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   495
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   496
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   497
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   498
/** Add all capabilities for finding line locations. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   499
int nsk_jvmti_addLocationCapabilities() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   500
    jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   501
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   502
    memset(&caps, 0, sizeof(caps));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   503
    caps.can_get_line_numbers = 1;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   504
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   505
            NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   506
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   507
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   508
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   509
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   510
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   511
/** Add all capabilities for using breakpoints. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   512
int nsk_jvmti_addBreakpointCapabilities() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   513
    jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   514
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   515
    if (!nsk_jvmti_addLocationCapabilities())
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   516
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   517
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   518
    memset(&caps, 0, sizeof(caps));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   519
    caps.can_generate_breakpoint_events = 1;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   520
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   521
            NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   522
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   523
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   524
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   525
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   526
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   527
/** Find line location. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   528
jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   529
    jint count = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   530
    jvmtiLineNumberEntry* table = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   531
    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   532
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   533
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   534
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB4(GetLineNumberTable, jvmti_env, method, &count, &table)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   535
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   536
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   537
    for (i = 0; i < count; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   538
        if (table[i].line_number == line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   539
            location = table[i].start_location;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   540
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   541
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   542
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   543
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   544
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)table)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   545
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   546
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   547
    return location;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   548
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   549
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   550
/** Set breakpoint to a line. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   551
jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   552
    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   553
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   554
    if (!NSK_VERIFY((location =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   555
            nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   556
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   557
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   558
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(SetBreakpoint, jvmti_env, method, location)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   559
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   560
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   561
    return location;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   562
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   563
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   564
/** Remove breakpoint from a line. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   565
jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   566
    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   567
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   568
    if (!NSK_VERIFY((location =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   569
            nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   570
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   571
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   572
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB3(ClearBreakpoint, jvmti_env, method, location)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   573
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   574
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   575
    return location;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   576
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   577
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   578
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   579
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   580
/** Enable or disable given events. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   581
int nsk_jvmti_enableEvents(jvmtiEventMode enable, int size, jvmtiEvent list[], jthread thread) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   582
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   583
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   584
    for (i = 0; i < size; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   585
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   586
                NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, enable,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   587
                                                list[i], thread))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   588
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   589
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   590
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   591
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   592
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   593
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   594
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   595
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   596
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   597
typedef jint (JNICALL *checkStatus_type)(JNIEnv* jni_env, jclass cls, jint debuggeeStatus);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   598
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   599
static checkStatus_type checkStatus_func = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   600
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   601
/**
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   602
 * Proxy function to gain sequential access to checkStatus of each agent
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   603
 */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   604
JNIEXPORT jint JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   605
MA_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   606
    jint status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   607
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   608
    NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   609
    return (*checkStatus_func)(jni_env, cls, status);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   610
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   611
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   612
/**
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   613
 * nativeMethodBind callback:
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   614
 *      if needed, redirects checkStatus native method call
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   615
 */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   616
static void JNICALL nativeMethodBind(jvmtiEnv* jvmti_env, JNIEnv *jni_env,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   617
                              jthread thread, jmethodID mid,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   618
                              void* address, void** new_address_ptr) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   619
    const char* BIND_CLASS_NAME = "Lnsk/share/jvmti/DebugeeClass;";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   620
    const char* BIND_METHOD_NAME = "checkStatus";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   621
    const char* BIND_METHOD_SIGNATURE = "(I)I";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   622
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   623
    jvmtiPhase phase;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   624
    jclass cls;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   625
    char *class_sig = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   626
    char *name = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   627
    char *sig = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   628
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   629
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetPhase, jvmti_env, &phase))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   630
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   631
        return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   632
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   633
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   634
    if (phase != JVMTI_PHASE_START && phase != JVMTI_PHASE_LIVE)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   635
        return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   636
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   637
    if (NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   638
            NSK_CPP_STUB5(GetMethodName, jvmti_env, mid, &name, &sig, NULL))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   639
        if (strcmp(name, BIND_METHOD_NAME) == 0 &&
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   640
                strcmp(sig, BIND_METHOD_SIGNATURE) == 0) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   641
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   642
            if (NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   643
                    NSK_CPP_STUB3(GetMethodDeclaringClass, jvmti_env, mid, &cls))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   644
             && NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   645
                    NSK_CPP_STUB4(GetClassSignature, jvmti_env, cls, &class_sig, NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   646
             && strcmp(class_sig, BIND_CLASS_NAME) == 0
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   647
             && address != (void*)Java_nsk_share_jvmti_DebugeeClass_checkStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   648
                checkStatus_func = (checkStatus_type)address;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   649
                NSK_TRACE(*new_address_ptr = (void*)MA_checkStatus);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   650
            }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   651
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   652
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   653
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   654
    if (name != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   655
        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)name);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   656
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   657
    if (sig != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   658
        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   659
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   660
    if (class_sig != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   661
        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)class_sig);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   662
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   663
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   664
/**
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   665
 * Initialize multiple agent:
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   666
 *      establish processing of nativeMethodBind events
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   667
 */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   668
int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   669
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   670
    if (callbacks == NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   671
        NSK_COMPLAIN0("callbacks should not be NULL\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   672
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   673
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   674
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   675
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   676
    if (callbacks->NativeMethodBind != NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   677
        NSK_COMPLAIN0("callbacks.NativeMethodBind should be NULL\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   678
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   679
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   680
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   681
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   682
    {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   683
        jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   684
        memset(&caps, 0, sizeof(caps));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   685
        caps.can_generate_native_method_bind_events = 1;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   686
        if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   687
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   688
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   689
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   690
    callbacks->NativeMethodBind = nativeMethodBind;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   691
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   692
            NSK_CPP_STUB3(SetEventCallbacks, jvmti_env, callbacks,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   693
                sizeof(jvmtiEventCallbacks))))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   694
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   695
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   696
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   697
            NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   698
                JVMTI_EVENT_NATIVE_METHOD_BIND, NULL)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   699
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   700
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   701
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   702
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   703
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   704
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   705
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   706
int nsk_jvmti_isOptionalEvent(jvmtiEvent event) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   707
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   708
    return (event == JVMTI_EVENT_EXCEPTION)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   709
        || (event == JVMTI_EVENT_EXCEPTION_CATCH)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   710
        || (event == JVMTI_EVENT_SINGLE_STEP)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   711
        || (event == JVMTI_EVENT_FRAME_POP)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   712
        || (event == JVMTI_EVENT_BREAKPOINT)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   713
        || (event == JVMTI_EVENT_FIELD_ACCESS)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   714
        || (event == JVMTI_EVENT_FIELD_MODIFICATION)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   715
        || (event == JVMTI_EVENT_METHOD_ENTRY)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   716
        || (event == JVMTI_EVENT_METHOD_EXIT)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   717
        || (event == JVMTI_EVENT_NATIVE_METHOD_BIND)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   718
        || (event == JVMTI_EVENT_COMPILED_METHOD_LOAD)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   719
        || (event == JVMTI_EVENT_COMPILED_METHOD_UNLOAD)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   720
        || (event == JVMTI_EVENT_MONITOR_WAIT)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   721
        || (event == JVMTI_EVENT_MONITOR_WAITED)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   722
        || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTER)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   723
        || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTERED)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   724
        || (event == JVMTI_EVENT_GARBAGE_COLLECTION_START)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   725
        || (event == JVMTI_EVENT_GARBAGE_COLLECTION_FINISH)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   726
        || (event == JVMTI_EVENT_OBJECT_FREE)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   727
        || (event == JVMTI_EVENT_VM_OBJECT_ALLOC);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   728
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   729
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   730
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   731
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   732
void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   733
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   734
    jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   735
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   736
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetCapabilities, jvmti_env, &caps))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   737
        return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   738
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   739
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   740
    NSK_DISPLAY0("\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   741
    NSK_DISPLAY0("Possessed capabilities:\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   742
    NSK_DISPLAY0("-----------------------\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   743
    if (caps.can_tag_objects)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   744
        NSK_DISPLAY0("\tcan_tag_objects\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   745
    if (caps.can_generate_field_modification_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   746
        NSK_DISPLAY0("\tcan_generate_field_modification_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   747
    if (caps.can_generate_field_access_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   748
        NSK_DISPLAY0("\tcan_generate_field_access_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   749
    if (caps.can_get_bytecodes)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   750
        NSK_DISPLAY0("\tcan_get_bytecodes\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   751
    if (caps.can_get_synthetic_attribute)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   752
        NSK_DISPLAY0("\tcan_get_synthetic_attribute\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   753
    if (caps.can_get_owned_monitor_info)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   754
        NSK_DISPLAY0("\tcan_get_owned_monitor_info\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   755
    if (caps.can_get_current_contended_monitor)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   756
        NSK_DISPLAY0("\tcan_get_current_contended_monitor\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   757
    if (caps.can_get_monitor_info)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   758
        NSK_DISPLAY0("\tcan_get_monitor_info\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   759
    if (caps.can_pop_frame)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   760
        NSK_DISPLAY0("\tcan_pop_frame\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   761
    if (caps.can_redefine_classes)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   762
        NSK_DISPLAY0("\tcan_redefine_classes\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   763
    if (caps.can_signal_thread)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   764
        NSK_DISPLAY0("\tcan_signal_thread\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   765
    if (caps.can_get_source_file_name)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   766
        NSK_DISPLAY0("\tcan_get_source_file_name\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   767
    if (caps.can_get_line_numbers)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   768
        NSK_DISPLAY0("\tcan_get_line_numbers\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   769
    if (caps.can_get_source_debug_extension)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   770
        NSK_DISPLAY0("\tcan_get_source_debug_extension\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   771
    if (caps.can_access_local_variables)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   772
        NSK_DISPLAY0("\tcan_access_local_variables\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   773
    if (caps.can_maintain_original_method_order)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   774
        NSK_DISPLAY0("\tcan_maintain_original_method_order\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   775
    if (caps.can_generate_single_step_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   776
        NSK_DISPLAY0("\tcan_generate_single_step_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   777
    if (caps.can_generate_exception_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   778
        NSK_DISPLAY0("\tcan_generate_exception_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   779
    if (caps.can_generate_frame_pop_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   780
        NSK_DISPLAY0("\tcan_generate_frame_pop_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   781
    if (caps.can_generate_breakpoint_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   782
        NSK_DISPLAY0("\tcan_generate_breakpoint_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   783
    if (caps.can_suspend)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   784
        NSK_DISPLAY0("\tcan_suspend\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   785
    if (caps.can_get_current_thread_cpu_time)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   786
        NSK_DISPLAY0("\tcan_get_current_thread_cpu_time\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   787
    if (caps.can_get_thread_cpu_time)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   788
        NSK_DISPLAY0("\tcan_get_thread_cpu_time\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   789
    if (caps.can_generate_method_entry_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   790
        NSK_DISPLAY0("\tcan_generate_method_entry_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   791
    if (caps.can_generate_method_exit_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   792
        NSK_DISPLAY0("\tcan_generate_method_exit_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   793
    if (caps.can_generate_all_class_hook_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   794
        NSK_DISPLAY0("\tcan_generate_all_class_hook_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   795
    if (caps.can_generate_compiled_method_load_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   796
        NSK_DISPLAY0("\tcan_generate_compiled_method_load_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   797
    if (caps.can_generate_monitor_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   798
        NSK_DISPLAY0("\tcan_generate_monitor_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   799
    if (caps.can_generate_vm_object_alloc_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   800
        NSK_DISPLAY0("\tcan_generate_vm_object_alloc_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   801
    if (caps.can_generate_native_method_bind_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   802
        NSK_DISPLAY0("\tcan_generate_native_method_bind_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   803
    if (caps.can_generate_garbage_collection_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   804
        NSK_DISPLAY0("\tcan_generate_garbage_collection_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   805
    if (caps.can_generate_object_free_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   806
        NSK_DISPLAY0("\tcan_generate_object_free_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   807
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   808
    NSK_DISPLAY0("\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   809
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   810
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   811
/* ============================================================================= */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   812
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   813
#ifdef __cplusplus
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   814
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   815
#endif