blob: f87ce40f9af03ab6923447f625369adb6ffe146f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _NCAI_DIRECT_H_
#define _NCAI_DIRECT_H_
#include "jvmti_direct.h"
#include "lock_manager.h"
#include "ncai.h"
#include "open/hythread.h"
struct ncaiEventThread
{
ncaiThread thread;
ncaiEventThread* next;
};
// ncaiThread=(_ncaiThread*) will be used as hythread_t=(HyThread*)
struct _ncaiThread
{
int dummy; // The structure will never be allocated
};
struct _ncaiModule{
ncaiModuleInfo* info;
_ncaiModule* next;
bool isAlive;
};
class VMBreakInterface;
struct NCAIEnv
{
const _ncai *functions;
TIEnv *ti_env;
Lock_Manager* env_lock;
ncaiModule modules;
ncaiEventCallbacks event_table;
VMBreakInterface* brpt_intf;
bool global_events[NCAI_MAX_EVENT_TYPE_VAL - NCAI_MIN_EVENT_TYPE_VAL + 1];
ncaiEventThread *event_threads[NCAI_MAX_EVENT_TYPE_VAL - NCAI_MIN_EVENT_TYPE_VAL + 1];
/**
* Returns pointer to a callback function that was set by SetEventCallbacks
* If no callback was set, this function returns NULL, in this case
* no event should be sent.
*/
void *get_event_callback(ncaiEventKind event_type)
{
return ((void **)&event_table)[event_type - NCAI_MIN_EVENT_TYPE_VAL];
}
};
#ifdef __cplusplus
extern "C" {
#endif
ncaiError JNICALL ncaiGetAllLoadedModules(ncaiEnv* env,
jint* count_ptr,
ncaiModule** modules_ptr);
ncaiError JNICALL ncaiGetModuleInfo(ncaiEnv* env,
ncaiModule module,
ncaiModuleInfo* info_ptr);
ncaiError JNICALL ncaiGetModuleClassLoader(ncaiEnv* env,
ncaiModule module,
jobject* classloader_ptr);
ncaiError JNICALL ncaiIsMethodCompiled(ncaiEnv* env,
jmethodID method,
jboolean* is_compiled_ptr);
ncaiError JNICALL ncaiGetMethodLocation(ncaiEnv* env,
jmethodID method,
void** address_ptr,
size_t* size_ptr);
ncaiError JNICALL ncaiFindJavaMethod(ncaiEnv* env,
void* address,
jmethodID* method_ptr);
ncaiError JNICALL ncaiGetBytcodeLocation(ncaiEnv* env,
void* address,
jmethodID* method,
jlocation* location_ptr);
ncaiError JNICALL ncaiGetNativeLocation(ncaiEnv* env,
jmethodID method,
jlocation location,
void** address_ptr);
ncaiError JNICALL ncaiGetAllThreads(ncaiEnv* env,
jint* count_ptr,
ncaiThread** threads_ptr);
ncaiError JNICALL ncaiGetThreadInfo(ncaiEnv* env,
ncaiThread thread,
ncaiThreadInfo* info_ptr);
ncaiError JNICALL ncaiGetThreadHandle(ncaiEnv* env,
jthread thread,
ncaiThread* thread_ptr);
ncaiError JNICALL ncaiGetThreadObject(ncaiEnv* env,
ncaiThread thread,
jthread* thread_ptr);
ncaiError JNICALL ncaiSuspendThread(ncaiEnv* env,
ncaiThread thread);
ncaiError JNICALL ncaiResumeThread(ncaiEnv* env,
ncaiThread thread);
ncaiError JNICALL ncaiTerminateThread(ncaiEnv* env,
ncaiThread thread);
ncaiError JNICALL ncaiGetThreadState(ncaiEnv* env,
ncaiThread thread,
jint* state_ptr);
ncaiError JNICALL ncaiGetFrameCount(ncaiEnv* env,
ncaiThread thread,
jint* count_ptr);
ncaiError JNICALL ncaiGetStackTrace(ncaiEnv* env,
ncaiThread thread,
jint depth,
ncaiFrameInfo* frame_buffer,
jint* count_ptr);
ncaiError JNICALL ncaiGetRegisterCount(ncaiEnv* env,
jint* count_ptr);
ncaiError JNICALL ncaiGetRegisterInfo(ncaiEnv* env,
jint reg_number,
ncaiRegisterInfo* info_ptr);
ncaiError JNICALL ncaiGetRegisterValue(ncaiEnv* env,
ncaiThread thread,
jint reg_number,
void* buf);
ncaiError JNICALL ncaiSetRegisterValue(ncaiEnv* env,
ncaiThread thread,
jint reg_number,
void* buf);
ncaiError JNICALL ncaiReadMemory(ncaiEnv* env,
void* addr,
size_t size,
void* buf);
ncaiError JNICALL ncaiWriteMemory(ncaiEnv* env,
void* addr,
size_t size,
void* buf);
ncaiError JNICALL ncaiGetSignalCount(ncaiEnv* env,
jint* count_ptr);
ncaiError JNICALL ncaiGetSignalInfo(ncaiEnv* env,
jint signal,
ncaiSignalInfo* info_ptr);
ncaiError JNICALL ncaiGetJvmtiEnv(ncaiEnv* env,
jvmtiEnv** jvmti_env_ptr);
ncaiError JNICALL ncaiGetVersion(ncaiEnv* env,
jint* version_ptr);
ncaiError JNICALL ncaiGetErrorName(ncaiEnv* env,
ncaiError err,
const char** name_ptr);
ncaiError JNICALL ncaiGetPotentialCapabilities(ncaiEnv* env,
ncaiCapabilities* caps_ptr);
ncaiError JNICALL ncaiGetCapabilities(ncaiEnv* env,
ncaiCapabilities* caps_ptr);
ncaiError JNICALL ncaiAddCapabilities(ncaiEnv* env,
ncaiCapabilities* caps_ptr);
ncaiError JNICALL ncaiRelinquishCapabilities(ncaiEnv* env,
ncaiCapabilities* caps_ptr);
ncaiError JNICALL ncaiGetEventCallbacks(ncaiEnv* env,
ncaiEventCallbacks* callbacks,
size_t size);
ncaiError JNICALL ncaiSetEventCallbacks(ncaiEnv* env,
ncaiEventCallbacks* callbacks,
size_t size);
ncaiError JNICALL ncaiSetEventNotificationMode(ncaiEnv* env,
ncaiEventMode mode,
ncaiEventKind event,
ncaiThread thread);
ncaiError JNICALL ncaiSetBreakpoint(ncaiEnv* env,
void* code_addr);
ncaiError JNICALL ncaiClearBreakpoint(ncaiEnv* env,
void* code_addr);
ncaiError JNICALL ncaiSetWatchpoint(ncaiEnv* env,
void* data_addr,
size_t len,
ncaiWatchpointMode mode);
ncaiError JNICALL ncaiClearWatchpoint(ncaiEnv* env,
void* data_addr);
ncaiError JNICALL ncaiSetStepMode(ncaiEnv* env,
ncaiThread thread,
ncaiStepMode mode);
ncaiError JNICALL ncaiNotifyFramePop(ncaiEnv* env,
ncaiThread thread,
void* frame_address);
/* void JNICALL ncaiStep(ncaiEnv* env,
ncaiThread thread,
void* addr);
void JNICALL ncaiBreakpoint(ncaiEnv* env,
ncaiThread thread,
void* addr);
void JNICALL ncaiWatchpoint(ncaiEnv* env,
ncaiThread thread,
void* code_addr,
void* data_addr);
void JNICALL ncaiSignal(ncaiEnv* env,
ncaiThread thread,
void* addr,
jint signal,
jboolean is_internal,
jboolean* is_handled);
void JNICALL ncaiException(ncaiEnv* env,
ncaiThread thread,
void* addr,
void* exception);
void JNICALL ncaiModuleLoad(ncaiEnv* env,
ncaiThread thread,
ncaiModule module);
void JNICALL ncaiModuleUnload(ncaiEnv* env,
ncaiThread thread,
ncaiModule module);
void JNICALL ncaiMethodEntry(ncaiEnv* env,
ncaiThread thread,
void* addr);
void JNICALL ncaiMethodExit(ncaiEnv* env,
ncaiThread thread,
void* addr);
void JNICALL ncaiFramePop(ncaiEnv* env,
ncaiThread thread,
void* addr);
void JNICALL ncaiConsoleInput(ncaiEnv* env, char** message);
void JNICALL ncaiConsoleOutput(ncaiEnv* env, char* message);
void JNICALL ncaiDebugMessage(ncaiEnv* env, char* message);*/
#ifdef __cplusplus
}
#endif
#endif /* _NCAI_DIRECT_H_ */