test/hotspot/jtreg/vmTestbase/nsk/share/jvmti/agent_tools.cpp
author jcbeyler
Mon, 17 Sep 2018 19:36:09 -0700
changeset 51774 79dc492c00ab
parent 51551 e409244ce72e
child 52215 0b0ba3a2fec9
permissions -rw-r--r--
8210481: Remove #ifdef cplusplus from vmTestbase Summary: Remove all cplusplus ifdefs from vmTestbase Reviewed-by: dholmes, iignatyev, cjplummer, sspitsyn
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
extern "C" {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    32
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    33
/* ============================================================================= */
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
/* 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
    36
 * agent libs while global variables are used
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    37
 * 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
    38
 * variables are not shared between agents */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    39
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    40
static jthread agentThread = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    41
static jvmtiStartFunction agentThreadProc = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    42
static void* agentThreadArg = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    43
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    44
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    45
typedef enum {NEW, RUNNABLE, WAITING, SUSPENDED, TERMINATED} thread_state_t;
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 struct agent_data_t {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    48
    volatile thread_state_t thread_state;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    49
    int last_debuggee_status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    50
    jrawMonitorID monitor;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    51
} agent_data_t;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    52
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    53
static agent_data_t agent_data;
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 jvmtiEnv* jvmti_env = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    56
static JavaVM* jvm = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    57
static JNIEnv* jni_env = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    58
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    59
static volatile int currentAgentStatus = NSK_STATUS_PASSED;
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
/* ============================================================================= */
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
void nsk_jvmti_setFailStatus() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    64
    currentAgentStatus = NSK_STATUS_FAILED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    65
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    66
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    67
int nsk_jvmti_isFailStatus() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    68
    return (nsk_jvmti_getStatus() != NSK_STATUS_PASSED);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    69
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    70
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    71
jint nsk_jvmti_getStatus() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    72
    return currentAgentStatus;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    73
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    74
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
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
    77
    data->thread_state = NEW;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    78
    data->last_debuggee_status = NSK_STATUS_PASSED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    79
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    80
    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
    81
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    82
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    83
/** Reset agent data to prepare for another run. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    84
void nsk_jvmti_resetAgentData() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    85
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    86
    /* wait for agentThreadWrapper() to finish */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    87
    while (agent_data.thread_state != TERMINATED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    88
        rawMonitorWait(jvmti_env, agent_data.monitor, 10);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    89
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    90
    agent_data.thread_state = NEW;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    91
    agent_data.last_debuggee_status = NSK_STATUS_PASSED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    92
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    93
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    94
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    95
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
    96
    return NSK_CPP_STUB2(DestroyRawMonitor, jvmti_env, data->monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    97
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    98
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
    99
/** Create JVMTI environment. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   100
jvmtiEnv* nsk_jvmti_createJVMTIEnv(JavaVM* javaVM, void* reserved) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   101
    jvm = javaVM;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   102
    if (!NSK_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   103
            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
   104
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   105
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   106
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   107
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   108
    if (!NSK_JVMTI_VERIFY(init_agent_data(jvmti_env, &agent_data))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   109
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   110
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   111
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   112
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   113
    return jvmti_env;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   116
/** Dispose JVMTI environment */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   117
static int nsk_jvmti_disposeJVMTIEnv(jvmtiEnv* jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   118
    if (jvmti_env != NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   119
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   120
                NSK_CPP_STUB1(DisposeEnvironment, jvmti_env))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   121
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   122
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   123
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   124
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   125
        if (!NSK_JVMTI_VERIFY(free_agent_data(jvmti_env, &agent_data))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   126
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   127
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   128
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   129
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   130
    return NSK_TRUE;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   133
/** Get JNI environment for agent thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   134
JNIEnv* nsk_jvmti_getAgentJNIEnv() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   135
    return jni_env;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   136
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   137
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   138
/** Get JVMTI environment for agent */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   139
jvmtiEnv* nsk_jvmti_getAgentJVMTIEnv() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   140
    return jvmti_env;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   141
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   142
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
static void set_agent_thread_state(thread_state_t value) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   145
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   146
    agent_data.thread_state = value;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   147
    rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   148
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   149
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   150
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   151
/** Wrapper for user agent thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   152
static void JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   153
agentThreadWrapper(jvmtiEnv* jvmti_env, JNIEnv* agentJNI, void* arg) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   154
    jni_env = agentJNI;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   155
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   156
    /* run user agent proc */
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
        set_agent_thread_state(RUNNABLE);
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
        NSK_TRACE((*agentThreadProc)(jvmti_env, agentJNI, agentThreadArg));
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
        set_agent_thread_state(TERMINATED);
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   165
    /* finalize agent thread */
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
        /* gelete global ref for agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   168
        NSK_CPP_STUB2(DeleteGlobalRef, agentJNI, agentThread);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   169
        agentThread = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   170
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   171
}
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
/** Start wrapper for user agent thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   174
static jthread startAgentThreadWrapper(JNIEnv *jni_env, jvmtiEnv* jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   175
    const jint  THREAD_PRIORITY = JVMTI_THREAD_MAX_PRIORITY;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   176
    const char* THREAD_NAME = "JVMTI agent thread";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   177
    const char* THREAD_CLASS_NAME = "java/lang/Thread";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   178
    const char* THREAD_CTOR_NAME = "<init>";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   179
    const char* THREAD_CTOR_SIGNATURE = "(Ljava/lang/String;)V";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   180
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   181
    jobject threadName = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   182
    jclass threadClass = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   183
    jmethodID threadCtor = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   184
    jobject threadObject = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   185
    jobject threadGlobalRef = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   186
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   187
    if (!NSK_JNI_VERIFY(jni_env, (threadClass =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   188
            NSK_CPP_STUB2(FindClass, jni_env, THREAD_CLASS_NAME)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   189
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   190
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   191
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   192
    if (!NSK_JNI_VERIFY(jni_env, (threadCtor =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   193
            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
   194
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   195
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   196
    if (!NSK_JNI_VERIFY(jni_env, (threadName =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   197
            NSK_CPP_STUB2(NewStringUTF, jni_env, THREAD_NAME)) != NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   198
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   199
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   200
    if (!NSK_JNI_VERIFY(jni_env, (threadObject =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   201
            NSK_CPP_STUB4(NewObject, jni_env, threadClass, threadCtor, threadName)) != NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   202
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   203
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   204
    if (!NSK_JNI_VERIFY(jni_env, (threadGlobalRef =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   205
            NSK_CPP_STUB2(NewGlobalRef, jni_env, threadObject)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   206
        NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   207
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   208
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   209
    agentThread = (jthread)threadGlobalRef;
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
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   212
            NSK_CPP_STUB5(RunAgentThread, jvmti_env, agentThread,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   213
                            &agentThreadWrapper, agentThreadArg, THREAD_PRIORITY))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   214
        NSK_CPP_STUB2(DeleteGlobalRef, jni_env, threadGlobalRef);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   215
        NSK_CPP_STUB2(DeleteLocalRef, jni_env, threadObject);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   216
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   217
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   218
    return agentThread;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   221
/** Register user agent thread with arg. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   222
int nsk_jvmti_setAgentProc(jvmtiStartFunction proc, void* arg) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   223
    agentThreadProc = proc;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   224
    agentThreadArg = arg;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   225
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   226
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   227
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   228
/** Get agent thread ref. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   229
jthread nsk_jvmti_getAgentThread() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   230
    return agentThread;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   231
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   232
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   233
/** Run registered user agent thread via wrapper. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   234
static jthread nsk_jvmti_runAgentThread(JNIEnv *jni_env, jvmtiEnv* jvmti_env) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   235
    /* start agent thread wrapper */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   236
    jthread thread = startAgentThreadWrapper(jni_env, jvmti_env);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   237
    if (thread == NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   238
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   239
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   240
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   241
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   242
    return thread;
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
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
/** Sleep current thread. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   248
void nsk_jvmti_sleep(jlong timeout) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   249
    int seconds = (int)((timeout + 999) / 1000);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   250
    THREAD_sleep(seconds);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   251
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   252
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   253
/** Sync point called from Java code. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   254
static jint syncDebuggeeStatus(JNIEnv* jni_env, jvmtiEnv* jvmti_env, jint debuggeeStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   255
    jint result = NSK_STATUS_FAILED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   256
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   257
    rawMonitorEnter(jvmti_env, agent_data.monitor);
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
    /* save last debugee status */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   260
    agent_data.last_debuggee_status = debuggeeStatus;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   261
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   262
    /* we don't enter if-stmt in second call */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   263
    if (agent_data.thread_state == NEW) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   264
        if (nsk_jvmti_runAgentThread(jni_env, jvmti_env) == NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   265
            goto monitor_exit_and_return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   266
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   267
        /* SP2.2-w - wait for agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   268
        while (agent_data.thread_state == NEW) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   269
            rawMonitorWait(jvmti_env, agent_data.monitor, 0);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   270
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   271
    }
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
    /* wait for sync permit */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   274
    /* we don't enter loop in first call */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   275
    while (agent_data.thread_state != WAITING && agent_data.thread_state != TERMINATED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   276
        /* SP4.2-w - second wait for agent thread */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   277
        rawMonitorWait(jvmti_env, agent_data.monitor, 0);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   278
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   279
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   280
    if (agent_data.thread_state != TERMINATED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   281
        agent_data.thread_state = SUSPENDED;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   282
        /* SP3.2-n - notify to start test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   283
        /* SP6.2-n - notify to end test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   284
        rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   285
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   286
    else {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   287
        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
   288
        goto monitor_exit_and_return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   289
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   290
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   291
    /* update status from debuggee */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   292
    if (debuggeeStatus != NSK_STATUS_PASSED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   293
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   294
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   295
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   296
    while (agent_data.thread_state == SUSPENDED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   297
        /* SP5.2-w - wait while testing */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   298
        /* SP7.2 - wait for agent end */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   299
        rawMonitorWait(jvmti_env, agent_data.monitor, 0);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   300
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   301
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   302
    agent_data.last_debuggee_status = nsk_jvmti_getStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   303
    result = agent_data.last_debuggee_status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   304
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   305
monitor_exit_and_return:
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   306
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   307
    return result;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   308
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   309
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   310
/** Wait for sync point with Java code. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   311
int nsk_jvmti_waitForSync(jlong timeout) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   312
    static const int inc_timeout = 1000;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   313
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   314
    jlong t = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   315
    int result = NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   316
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   317
    rawMonitorEnter(jvmti_env, agent_data.monitor);
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
    agent_data.thread_state = WAITING;
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
    /* SP2.2-n - notify agent is waiting and wait */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   322
    /* SP4.1-n - notify agent is waiting and wait */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   323
    rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   324
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   325
    while (agent_data.thread_state == WAITING) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   326
        /* SP3.2-w - wait to start test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   327
        /* SP6.2-w - wait to end test */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   328
        rawMonitorWait(jvmti_env, agent_data.monitor, inc_timeout);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   329
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   330
        if (timeout == 0) continue;
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
        t += inc_timeout;
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
        if (t >= timeout) break;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   337
    if (agent_data.thread_state == WAITING) {
51551
e409244ce72e 8209611: use C++ compiler for hotspot tests
iignatyev
parents: 50156
diff changeset
   338
        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
   339
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   340
        result = NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   341
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   342
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   343
    rawMonitorExit(jvmti_env, agent_data.monitor);
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
    return result;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   348
/** Resume java code suspended on sync point. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   349
int nsk_jvmti_resumeSync() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   350
    int result;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   351
    rawMonitorEnter(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   352
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   353
    if (agent_data.thread_state == SUSPENDED) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   354
        result = NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   355
        agent_data.thread_state = RUNNABLE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   356
        /* SP5.2-n - notify suspend done */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   357
        /* SP7.2-n - notify agent end */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   358
        rawMonitorNotify(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   359
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   360
    else {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   361
        NSK_COMPLAIN0("Debuggee was not suspended on status sync\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   362
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   363
        result = NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   364
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   365
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   366
    rawMonitorExit(jvmti_env, agent_data.monitor);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   367
    return NSK_TRUE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   368
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   369
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   370
/** Native function for Java code to provide sync point. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   371
JNIEXPORT jint JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   372
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
   373
    jint status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   374
    NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   375
    return status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   376
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   377
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   378
/** Native function for Java code to reset agent data. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   379
JNIEXPORT void JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   380
Java_nsk_share_jvmti_DebugeeClass_resetAgentData(JNIEnv* jni_env, jclass cls) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   381
    NSK_TRACE(nsk_jvmti_resetAgentData());
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   382
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   383
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
/** Find loaded class by signature. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   387
jclass nsk_jvmti_classBySignature(const char signature[]) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   388
    jclass* classes = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   389
    jint count = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   390
    jclass foundClass = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   391
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   392
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   393
    if (!NSK_VERIFY(signature != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   394
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   395
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   396
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   397
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   398
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   399
            NSK_CPP_STUB3(GetLoadedClasses, jvmti_env, &count, &classes))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   400
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   401
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   402
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   403
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   404
    for (i = 0; i < count; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   405
        char* sig = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   406
        char* generic = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   407
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   408
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   409
                NSK_CPP_STUB4(GetClassSignature, jvmti_env, classes[i], &sig, &generic))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   410
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   411
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   412
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   413
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   414
        if (sig != NULL && strcmp(signature, sig) == 0) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   415
            foundClass = classes[i];
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   416
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   417
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   418
        if (!(NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   419
                    NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   420
                && 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*)generic)))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   422
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   423
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   424
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   425
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   426
        if (foundClass != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   427
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   428
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   429
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   430
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   431
                NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)classes))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   432
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   433
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   434
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   435
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   436
    if (!NSK_JNI_VERIFY(jni_env, (foundClass = (jclass)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   437
                NSK_CPP_STUB2(NewGlobalRef, jni_env, foundClass)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   438
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   439
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   440
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   441
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   442
    return foundClass;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   445
/** Find alive thread by name. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   446
jthread nsk_jvmti_threadByName(const char name[]) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   447
    jthread* threads = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   448
    jint count = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   449
    jthread foundThread = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   450
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   451
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   452
    if (!NSK_VERIFY(name != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   453
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   454
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   455
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   456
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   457
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   458
            NSK_CPP_STUB3(GetAllThreads, jvmti_env, &count, &threads))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   459
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   460
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   461
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   462
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   463
    for (i = 0; i < count; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   464
        jvmtiThreadInfo info;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   465
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   466
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   467
                NSK_CPP_STUB3(GetThreadInfo, jvmti_env, threads[i], &info))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   468
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   469
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   470
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   471
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   472
        if (info.name != NULL && strcmp(name, info.name) == 0) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   473
            foundThread = threads[i];
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   474
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   475
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   476
    }
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
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   479
                NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)threads))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   480
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   481
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   482
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   483
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   484
    if (!NSK_JNI_VERIFY(jni_env, (foundThread = (jthread)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   485
                NSK_CPP_STUB2(NewGlobalRef, jni_env, foundThread)) != NULL)) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   486
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   487
        return NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   488
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   489
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   490
    return foundThread;
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
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
/** Add all capabilities for finding line locations. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   497
int nsk_jvmti_addLocationCapabilities() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   498
    jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   499
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   500
    memset(&caps, 0, sizeof(caps));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   501
    caps.can_get_line_numbers = 1;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   502
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   503
            NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   504
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   505
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   506
    return NSK_TRUE;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   509
/** Add all capabilities for using breakpoints. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   510
int nsk_jvmti_addBreakpointCapabilities() {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   511
    jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   512
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   513
    if (!nsk_jvmti_addLocationCapabilities())
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   514
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   515
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   516
    memset(&caps, 0, sizeof(caps));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   517
    caps.can_generate_breakpoint_events = 1;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   518
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   519
            NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   520
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   521
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   522
    return NSK_TRUE;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   525
/** Find line location. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   526
jlocation nsk_jvmti_getLineLocation(jclass cls, jmethodID method, int line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   527
    jint count = 0;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   528
    jvmtiLineNumberEntry* table = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   529
    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   530
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   531
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   532
    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
   533
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   534
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   535
    for (i = 0; i < count; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   536
        if (table[i].line_number == line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   537
            location = table[i].start_location;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   538
            break;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   539
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   540
    }
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
    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
   543
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   544
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   545
    return location;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   548
/** Set breakpoint to a line. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   549
jlocation nsk_jvmti_setLineBreakpoint(jclass cls, jmethodID method, int line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   550
    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   551
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   552
    if (!NSK_VERIFY((location =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   553
            nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   554
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   555
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   556
    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
   557
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   558
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   559
    return location;
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
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   562
/** Remove breakpoint from a line. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   563
jlocation nsk_jvmti_clearLineBreakpoint(jclass cls, jmethodID method, int line) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   564
    jlocation location = NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   565
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   566
    if (!NSK_VERIFY((location =
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   567
            nsk_jvmti_getLineLocation(cls, method, line)) != NSK_JVMTI_INVALID_JLOCATION))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   568
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   569
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   570
    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
   571
        return NSK_JVMTI_INVALID_JLOCATION;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   572
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   573
    return location;
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
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
/** Enable or disable given events. */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   579
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
   580
    int i;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   581
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   582
    for (i = 0; i < size; i++) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   583
        if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   584
                NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, enable,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   585
                                                list[i], thread))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   586
            nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   587
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   588
        }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   589
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   590
    return NSK_TRUE;
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
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
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
   596
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   597
static checkStatus_type checkStatus_func = NULL;
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
/**
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   600
 * Proxy function to gain sequential access to checkStatus of each agent
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
JNIEXPORT jint JNICALL
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   603
MA_checkStatus(JNIEnv* jni_env, jclass cls, jint debuggeeStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   604
    jint status;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   605
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   606
    NSK_TRACE(status = syncDebuggeeStatus(jni_env, jvmti_env, debuggeeStatus));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   607
    return (*checkStatus_func)(jni_env, cls, status);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   608
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   609
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
 * nativeMethodBind callback:
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   612
 *      if needed, redirects checkStatus native method call
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   613
 */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   614
static void JNICALL nativeMethodBind(jvmtiEnv* jvmti_env, JNIEnv *jni_env,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   615
                              jthread thread, jmethodID mid,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   616
                              void* address, void** new_address_ptr) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   617
    const char* BIND_CLASS_NAME = "Lnsk/share/jvmti/DebugeeClass;";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   618
    const char* BIND_METHOD_NAME = "checkStatus";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   619
    const char* BIND_METHOD_SIGNATURE = "(I)I";
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   620
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   621
    jvmtiPhase phase;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   622
    jclass cls;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   623
    char *class_sig = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   624
    char *name = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   625
    char *sig = NULL;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   626
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   627
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetPhase, jvmti_env, &phase))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   628
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   629
        return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   630
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   631
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   632
    if (phase != JVMTI_PHASE_START && phase != JVMTI_PHASE_LIVE)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   633
        return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   634
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   635
    if (NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   636
            NSK_CPP_STUB5(GetMethodName, jvmti_env, mid, &name, &sig, NULL))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   637
        if (strcmp(name, BIND_METHOD_NAME) == 0 &&
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   638
                strcmp(sig, BIND_METHOD_SIGNATURE) == 0) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   639
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   640
            if (NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   641
                    NSK_CPP_STUB3(GetMethodDeclaringClass, jvmti_env, mid, &cls))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   642
             && NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   643
                    NSK_CPP_STUB4(GetClassSignature, jvmti_env, cls, &class_sig, NULL))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   644
             && strcmp(class_sig, BIND_CLASS_NAME) == 0
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   645
             && address != (void*)Java_nsk_share_jvmti_DebugeeClass_checkStatus) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   646
                checkStatus_func = (checkStatus_type)address;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   647
                NSK_TRACE(*new_address_ptr = (void*)MA_checkStatus);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   648
            }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   649
        }
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
    if (name != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   653
        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)name);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   654
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   655
    if (sig != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   656
        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)sig);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   657
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   658
    if (class_sig != NULL)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   659
        NSK_CPP_STUB2(Deallocate, jvmti_env, (unsigned char*)class_sig);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   660
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   661
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
 * Initialize multiple agent:
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   664
 *      establish processing of nativeMethodBind events
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   665
 */
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   666
int nsk_jvmti_init_MA(jvmtiEventCallbacks* callbacks) {
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
    if (callbacks == NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   669
        NSK_COMPLAIN0("callbacks should not be NULL\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   670
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   671
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   672
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   673
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   674
    if (callbacks->NativeMethodBind != NULL) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   675
        NSK_COMPLAIN0("callbacks.NativeMethodBind should be NULL\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   676
        nsk_jvmti_setFailStatus();
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   677
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   678
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   679
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
        jvmtiCapabilities caps;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   682
        memset(&caps, 0, sizeof(caps));
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   683
        caps.can_generate_native_method_bind_events = 1;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   684
        if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(AddCapabilities, jvmti_env, &caps)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   685
            return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   686
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   687
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   688
    callbacks->NativeMethodBind = nativeMethodBind;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   689
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   690
            NSK_CPP_STUB3(SetEventCallbacks, jvmti_env, callbacks,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   691
                sizeof(jvmtiEventCallbacks))))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   692
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   693
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   694
    if (!NSK_JVMTI_VERIFY(
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   695
            NSK_CPP_STUB4(SetEventNotificationMode, jvmti_env, JVMTI_ENABLE,
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   696
                JVMTI_EVENT_NATIVE_METHOD_BIND, NULL)))
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   697
        return NSK_FALSE;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   698
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   699
    return NSK_TRUE;
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
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
int nsk_jvmti_isOptionalEvent(jvmtiEvent event) {
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
    return (event == JVMTI_EVENT_EXCEPTION)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   707
        || (event == JVMTI_EVENT_EXCEPTION_CATCH)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   708
        || (event == JVMTI_EVENT_SINGLE_STEP)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   709
        || (event == JVMTI_EVENT_FRAME_POP)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   710
        || (event == JVMTI_EVENT_BREAKPOINT)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   711
        || (event == JVMTI_EVENT_FIELD_ACCESS)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   712
        || (event == JVMTI_EVENT_FIELD_MODIFICATION)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   713
        || (event == JVMTI_EVENT_METHOD_ENTRY)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   714
        || (event == JVMTI_EVENT_METHOD_EXIT)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   715
        || (event == JVMTI_EVENT_NATIVE_METHOD_BIND)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   716
        || (event == JVMTI_EVENT_COMPILED_METHOD_LOAD)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   717
        || (event == JVMTI_EVENT_COMPILED_METHOD_UNLOAD)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   718
        || (event == JVMTI_EVENT_MONITOR_WAIT)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   719
        || (event == JVMTI_EVENT_MONITOR_WAITED)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   720
        || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTER)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   721
        || (event == JVMTI_EVENT_MONITOR_CONTENDED_ENTERED)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   722
        || (event == JVMTI_EVENT_GARBAGE_COLLECTION_START)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   723
        || (event == JVMTI_EVENT_GARBAGE_COLLECTION_FINISH)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   724
        || (event == JVMTI_EVENT_OBJECT_FREE)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   725
        || (event == JVMTI_EVENT_VM_OBJECT_ALLOC);
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   726
}
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   727
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
void nsk_jvmti_showPossessedCapabilities(jvmtiEnv *jvmti_env) {
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
    jvmtiCapabilities caps;
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
    if (!NSK_JVMTI_VERIFY(NSK_CPP_STUB2(GetCapabilities, jvmti_env, &caps))) {
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   735
        return;
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   736
    }
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   737
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   738
    NSK_DISPLAY0("\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   739
    NSK_DISPLAY0("Possessed capabilities:\n");
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
    if (caps.can_tag_objects)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   742
        NSK_DISPLAY0("\tcan_tag_objects\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   743
    if (caps.can_generate_field_modification_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   744
        NSK_DISPLAY0("\tcan_generate_field_modification_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   745
    if (caps.can_generate_field_access_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   746
        NSK_DISPLAY0("\tcan_generate_field_access_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   747
    if (caps.can_get_bytecodes)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   748
        NSK_DISPLAY0("\tcan_get_bytecodes\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   749
    if (caps.can_get_synthetic_attribute)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   750
        NSK_DISPLAY0("\tcan_get_synthetic_attribute\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   751
    if (caps.can_get_owned_monitor_info)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   752
        NSK_DISPLAY0("\tcan_get_owned_monitor_info\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   753
    if (caps.can_get_current_contended_monitor)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   754
        NSK_DISPLAY0("\tcan_get_current_contended_monitor\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   755
    if (caps.can_get_monitor_info)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   756
        NSK_DISPLAY0("\tcan_get_monitor_info\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   757
    if (caps.can_pop_frame)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   758
        NSK_DISPLAY0("\tcan_pop_frame\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   759
    if (caps.can_redefine_classes)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   760
        NSK_DISPLAY0("\tcan_redefine_classes\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   761
    if (caps.can_signal_thread)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   762
        NSK_DISPLAY0("\tcan_signal_thread\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   763
    if (caps.can_get_source_file_name)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   764
        NSK_DISPLAY0("\tcan_get_source_file_name\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   765
    if (caps.can_get_line_numbers)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   766
        NSK_DISPLAY0("\tcan_get_line_numbers\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   767
    if (caps.can_get_source_debug_extension)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   768
        NSK_DISPLAY0("\tcan_get_source_debug_extension\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   769
    if (caps.can_access_local_variables)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   770
        NSK_DISPLAY0("\tcan_access_local_variables\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   771
    if (caps.can_maintain_original_method_order)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   772
        NSK_DISPLAY0("\tcan_maintain_original_method_order\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   773
    if (caps.can_generate_single_step_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   774
        NSK_DISPLAY0("\tcan_generate_single_step_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   775
    if (caps.can_generate_exception_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   776
        NSK_DISPLAY0("\tcan_generate_exception_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   777
    if (caps.can_generate_frame_pop_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   778
        NSK_DISPLAY0("\tcan_generate_frame_pop_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   779
    if (caps.can_generate_breakpoint_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   780
        NSK_DISPLAY0("\tcan_generate_breakpoint_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   781
    if (caps.can_suspend)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   782
        NSK_DISPLAY0("\tcan_suspend\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   783
    if (caps.can_get_current_thread_cpu_time)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   784
        NSK_DISPLAY0("\tcan_get_current_thread_cpu_time\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   785
    if (caps.can_get_thread_cpu_time)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   786
        NSK_DISPLAY0("\tcan_get_thread_cpu_time\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   787
    if (caps.can_generate_method_entry_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   788
        NSK_DISPLAY0("\tcan_generate_method_entry_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   789
    if (caps.can_generate_method_exit_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   790
        NSK_DISPLAY0("\tcan_generate_method_exit_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   791
    if (caps.can_generate_all_class_hook_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   792
        NSK_DISPLAY0("\tcan_generate_all_class_hook_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   793
    if (caps.can_generate_compiled_method_load_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   794
        NSK_DISPLAY0("\tcan_generate_compiled_method_load_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   795
    if (caps.can_generate_monitor_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   796
        NSK_DISPLAY0("\tcan_generate_monitor_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   797
    if (caps.can_generate_vm_object_alloc_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   798
        NSK_DISPLAY0("\tcan_generate_vm_object_alloc_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   799
    if (caps.can_generate_native_method_bind_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   800
        NSK_DISPLAY0("\tcan_generate_native_method_bind_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   801
    if (caps.can_generate_garbage_collection_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   802
        NSK_DISPLAY0("\tcan_generate_garbage_collection_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   803
    if (caps.can_generate_object_free_events)
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   804
        NSK_DISPLAY0("\tcan_generate_object_free_events\n");
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   805
6d6fe9416864 8199384: [TESTBUG] Open source VM testbase MLVM tests
iignatyev
parents:
diff changeset
   806
    NSK_DISPLAY0("\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
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
}