You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2008/05/13 10:32:12 UTC
svn commit: r655779 [2/2] - in /harmony/standard/site: docs/
docs/subcomponents/drlvm/ xdocs/ xdocs/subcomponents/drlvm/
Added: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.html
URL: http://svn.apache.org/viewvc/harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.html?rev=655779&view=auto
==============================================================================
--- harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.html (added)
+++ harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.html Tue May 13 01:32:11 2008
@@ -0,0 +1,264 @@
+<!--
+ 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.
+
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type"
+ content="text/html; charset=UTF-8" />
+ <link href="../../css/site.css" rel="stylesheet" type="text/css" />
+ <title>
+ Native Code Access Interface
+ </title>
+ </head>
+ <body>
+ <h1>
+ <a id="top" name="top"></a>Native Code Access Interface
+ </h1>
+ <ol id="TOC">
+ <li><a href="#About">About This Document</a></li>
+ <li><a href="#Overview">Overview</a>
+ <li><a href="#Key_Feature">Key Features</a></li>
+ <li><a href="#NCAI_in_VM">NCAI in VM</a></li>
+ <li><a href="#Issues">Known issues</a></li>
+ <li><a href="#References">References</a></li>
+ </ol>
+
+<!-- 1st chapter: About This Document -->
+ <h1>
+ <a id="About" name="About"></a>About This Document
+ </h1>
+ <p>
+ This document introduces the Native Code Access Interface and
+ its implementation inside the DRL virtual machine.
+ </p>
+
+<!-- 2nd chapter: Overview -->
+ <h1>
+ <a id="Overview" name="Overview"></a>Overview
+ </h1>
+ <p>
+ Some Java<a href="#*">*</a> applications need to access native code via the
+ Java<a href="#*">*</a> Native Interface (JNI) [<a href="#JNI_ref">1</a>]
+ to access native code.
+ Common Java<a href="#*">*</a> debuggers, such as Eclipse<a href="#*">*</a>
+ and NetBeans<a href="#*">*</a> debuggers, do not fully support debugging
+ native code written in programming languages like C/C++.
+ Some techniques, like the CDT plugin for Eclipse<a href="#*">*</a>,
+ are used for debugging native code in Java<a href="#*">*</a>
+ applications, but all of them have their own limitations.
+ </p>
+ <p>
+ Native Code Access Interface (NCAI) is a different approach to
+ debugging JNI code in Java<a href="#*">*</a> applications.
+ Together with JVMTI [<a href="#JVMTI_ref">2</a>] it provides in-process debugging
+ of both JIT-compiled and interpreted Java<a href="#*">*</a> bytecode,
+ and native JNI code.
+ </p>
+ <p>
+ NCAI interface is a JVMTI-like interface exposed by DRLVM
+ through a JVMTI extension. See detailed <a href="NCAI_spec.html">
+ NCAI description</a> for interface details.
+ </p>
+ <p>
+ The Eclipse<a href="#*">*</a>
+ <a href="http://softwarecommunity.intel.com/articles/eng/1435.htm">
+ plugin utilizing NCAI interface</a> is available at
+ Intel<a href="#*">*</a> What If site [<a href="#whatif_ref">3</a>].
+ This plugin supports Java<a href="#*">*</a> and C/C++, and builds
+ into Eclipse<a href="#*">*</a> IDE re-using JDT and CDT debug views.
+ </p>
+ <p>
+ Examples of NCAI usage can be found in NCAI tests sources:
+ <a href="http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/tests/ncai/">
+ drlvm/trunk/vm/tests/ncai</a>.
+ </p>
+
+ <p class="backtotop">
+ <a href="#top">Back to Top</a>
+ </p>
+
+<!-- 3rd chapter: Key Features -->
+ <h1>
+ <a id="Key_Feature" name="Key_Feature"></a>Key Features
+ </h1>
+ <p>
+ The current NCAI implementation supports x86 architecture;
+ some features are available on x86_64.
+ </p>
+ <p>
+ Main NCAI features implemented for now:
+ </p>
+ <ul>
+ <li>
+ Setting breakpoints in native code
+ </li>
+ <li>
+ Single-stepping through native code with 3 step modes:
+ <code>STEP_INTO</code>, <code>STEP_OVER</code> and <code>STEP_OUT</code>
+ </li>
+ <li>
+ Trapping native signals and exceptions
+ </li>
+ <li>
+ Trapping loading and unloading of native modules
+ </li>
+ <li>
+ Getting information on loaded native modules
+ </li>
+ <li>
+ Getting the list of threads running in a VM process
+ </li>
+ <li>
+ OS-level thread operations: suspend, resume, terminate
+ </li>
+ <li>
+ Inspection and modification of processor registers for
+ suspended threads
+ </li>
+ <li>
+ Getting the call stack with Java<a href="#*">*</a>
+ and native frames
+ </li>
+ <li>
+ Native memory inspection and modification
+ </li>
+ <li>
+ Getting information on native signals and exceptions
+ </li>
+ </ul>
+
+ <p class="backtotop">
+ <a href="#top">Back to Top</a>
+ </p>
+
+<!-- 4th chapter: NCAI in VM -->
+ <h1>
+ <a id="NCAI_in_VM" name="NCAI_in_VM"></a>NCAI in VM
+ </h1>
+ <p>
+ NCAI is implemented as a part of DRLVM. The source code is generally
+ located in the <a
+ href="http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/ncai/">
+ drlvm/trunk/vm/vmcore/src/ncai</a> directory,
+ with platform-dependent code in
+ <a href="http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/ncai/utils/">
+ 'utils'</a> subdirectory.
+ </p>
+ <p>
+ In addition to standalone code, NCAI includes code and changes
+ in other parts of DRLVM, specifically:
+ </p>
+ <ul>
+ <li>
+ In the VM Core subcomponent, NCAI extends JVMTI functionality,
+ signal handling and breakpoints processing.
+ </li>
+ <li>
+ <a href="TM.html">Thread Manager</a> contains thread operations
+ needed for NCAI operation.
+ </li>
+ <li>
+ The Porting Layer contains native modules enumeration
+ and memory access functions for NCAI needs (both are also used now
+ by <a href="crash_handler.html">Crash Handler</a>), and OS-level
+ thread operations including suspending and resuming of threads.
+ NOTE: On Linux* OS, the <code>SIGUSR2</code> signal is shared between
+ NCAI threading and <code>port_thread_yield_other()</code> function
+ implementation.
+ </li>
+ <li>
+ The encoder has been extended to enable the decoder to disassemble
+ native code; this functionality is used by NCAI single stepping
+ and by the <a href="crash_handler.html">Crash Handler</a>.
+ </li>
+ </ul>
+
+ <p class="backtotop">
+ <a href="#top">Back to Top</a>
+ </p>
+
+<!-- 5th chapter: NCAI in VM -->
+ <h1>
+ <a id="Issues" name="Issues"></a>Known issues
+ </h1>
+ <p>
+ Known issues and limitations in the current NCAI implementation include:
+ </p>
+ <ul>
+ <li>
+ Only threads attached to VM are reported.
+ </li>
+ <li>
+ The ModuleLoad and ModuleUnload events are reported only for JNI libraries.
+ </li>
+ <li>
+ The TerminateThread() function does not affect Java<a href="#*">*</a>
+ thread status.
+ </li>
+ <li>
+ The GetStackTrace() function works fine for debug build only.
+ On release build of either DRLVM or debugged library,
+ the function can return partial stack trace.
+ </li>
+ <li>
+ The thread context obtained in during Breakpoint and Single Step processing
+ is not synchronized with the thread context stored during thread suspension.
+ </li>
+ </ul>
+
+ <p class="backtotop">
+ <a href="#top">Back to Top</a>
+ </p>
+
+<!-- 6th chapter: References -->
+ <h1>
+ <a id="References" name="References"></a>References
+ </h1>
+ <p>
+ This section lists the resources used in this document and other
+ related documents.
+ </p>
+ <p>
+ [<a id="JNI_ref" name="JNI_ref"></a>1] Java<a href="#*">*</a> Native
+ Interface Specification, <a
+ href="http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html"
+ target="_blank">http://java.sun.com/j2se/1.5.0/docs/guide/jni/spec/jniTOC.html</a>
+ </p>
+ <p>
+ [<a id="JVMTI_ref" name="JVMTI_ref"></a>2] JVM Tool Interface
+ Specification, <a
+ href="http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html"
+ target="_blank">http://java.sun.com/j2se/1.5.0/docs/guide/jvmti/jvmti.html</a>
+ </p>
+ <p>
+ [<a id="whatif_ref" name="whatif_ref"></a>3] Intel<a href="#*">*</a> What If site, <a
+ href="http://whatif.intel.com"
+ target="_blank">http://whatif.intel.com</a>
+ </p>
+
+ <p class="backtotop">
+ <a href="#top">Back to Top</a>
+ </p>
+
+ <p>
+ <a id="*" name="*"></a>* Other brands and names are the property of
+ their respective owners.
+ </p>
+ </body>
+</html>
Propchange: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.html
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.xml
URL: http://svn.apache.org/viewvc/harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.xml?rev=655779&view=auto
==============================================================================
--- harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.xml (added)
+++ harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.xml Tue May 13 01:32:11 2008
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+
+-->
+
+<document>
+
+ <properties>
+ <title>Native Code Access Interface</title>
+ <author email="dev@harmony.apache.org">Harmony Documentation Team</author>
+
+ </properties>
+
+ <body>
+ <docinclude name="subcomponents/drlvm/NCAI.html"/>
+ </body>
+</document>
Propchange: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.html
URL: http://svn.apache.org/viewvc/harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.html?rev=655779&view=auto
==============================================================================
--- harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.html (added)
+++ harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.html Tue May 13 01:32:11 2008
@@ -0,0 +1,2189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <link href="../../css/site.css" rel="stylesheet" type="text/css" />
+ <title>Native Code Access Interface description</title>
+ <style type="text/css">
+ <!--
+ .indent { margin-left: 0.5in }
+ table { border-collapse: collapse }
+ -->
+ </style>
+</HEAD>
+
+<BODY>
+
+<h1><a id="top" name="top"></a>Native Code Access Interface</h1>
+
+<p><i>Revision 0.1</i></p>
+
+<ol id="TOC">
+<li><a href="#Overview">Overview</a>
+<li><a href="#Data_types">Data types</a>
+<li><a href="#Modules">Modules</a>
+<li><a href="#Methods">Methods</a>
+<li><a href="#Threads">Threads</a>
+<li><a href="#Frames">Frames</a>
+<li><a href="#Registers">Registers</a>
+<li><a href="#Memory">Memory</a>
+<li><a href="#Signals">Signals</a>
+<li><a href="#Miscellaneous">Miscellaneous</a>
+<li><a href="#Capabilities">Capabilities</a>
+<li><a href="#Event_Management">Event Management</a>
+<li><a href="#Event_Callbacks">Event Callbacks</a>
+<li><a href="#Error_codes">Error codes</a>
+<ol>
+<li><a href="#Universal_errors">Universal errors</a>
+<li><a href="#Function_specific_errors">Function specific errors</a>
+</ol>
+<li><a href="#Priorities">Appendix 1. Priorities</a>
+</ol>
+
+
+<h1><a name="Overview"></a>Overview</h1>
+
+<p>This document describes VM debug interface which extends JVMTI to support the debugging of
+mixed managed and native code, namely Native Code Access Interface - NCAI.</p>
+
+<p>The following cannot be done without knowing VM internals:</p>
+<ul>
+ <li>mapping of native thread to java thread
+ <li>mapping of native frame to java frame
+ <li>mapping of native code to java code
+ <li>mapping of native register or memory to java field
+</ul>
+
+<p>The following can be done behind the VM:</p>
+<ul>
+ <li>tracking of modules loaded into the VM process
+ <li>mapping of native virtual address/register/stack offset to address/offset within a
+ module, and finally to symbol (class, method, variable)
+</ul>
+
+<p>
+Processing of breakpoints/watchpoints/signals can be done behind the VM, but if
+VM use the same methods to implement java breakpoints/watchpoints
+over jitted code we get a conflict of interests, so we need common
+approach.</p>
+
+<p>
+NCAI features can be accessed via an interface pointer just like it can be
+done with JNI and JVMTI interface pointers. It is used to call it
+environment pointer, or briefly environment. A NCAI environment can
+be obtained via the following JVMTI extension function:</p>
+
+<p class="indent">
+<code>
+jvmtiError JNICALL GetExtensionEnv<br>
+
+(jvmtiEnv* jvmti_env, void** ncai_env_ptr, jint version);
+</code>
+</p>
+
+<p>where version is a NCAI version number like NCAI_VERSION_1_0.</p>
+
+<p>
+The function is provided by a standard JVMTI extension mechanism where it
+is identified as <code>org.apache.harmony.vm.GetExtensionEnv</code>. For
+example:</p>
+
+<p class="indent"><code>
+static const char* const GET_EXTENTION_ENV_FUNC =
+<br>
+
+"org.apache.harmony.vm.GetExtensionEnv";
+<br>
+jint extCount = 0;
+<br>
+jvmtiExtensionFunctionInfo* extensions = 0;
+<br>
+jvmtiError err = jvmti->GetExtensionFunctions(&extCount, &extensions);
+<br>
+jvmtiExtensionFunction
+<br>
+func = 0;
+<br>
+for (jint i = 0; i < extCount; i++) {
+<br>
+
+if (strcmp(extensions[i].id, GET_EXTENTION_ENV_FUNC) == 0) {
+<br>
+
+func = extensions[i].func;
+<br>
+
+}
+<br>
+
+jvmti->Deallocate(extensions[i].id);
+<br>
+
+jvmti->Deallocate(extensions[i].short_description);
+<br>
+
+for (jint j = 0; j < extensions[i].param_count; j++) {
+<br>
+
+jvmti->Deallocate(extensions[i].params[j].name);
+<br>
+
+}
+<br>
+
+jvmti->Deallocate(extensions[i].params);
+<br>
+
+jvmti->Deallocate(extensions[i].errors);
+<br>
+}
+<br>
+ncaiEnv* ncai = 0;
+<br>
+if (func != NULL) {
+<br>
+
+err = func(jvmti, &ncai, NCAI_VERSION_1_0);
+<br>
+}
+</code></p>
+
+<h1><a name="Data_types"></a>Data types</h1>
+
+<p><code>
+struct _ncai;
+<br>
+typedef _ncai* ncaiEnv;
+</code></p>
+
+<p class="indent">Interface pointer to structure containing the NCAI function table
+just like JNI and JVMTI do.</p>
+
+<p><code>
+typedef enum {...} ncaiError;
+</code></p>
+
+<p class="indent">An error code which every NCAI function returns.</p>
+
+<p><code>
+struct _ncaiModule;
+<br>
+typedef _ncaiModule* ncaiModule;
+</code></p>
+
+<p class="indent">Opaque reference to VM
+internal data structure which represents a loadable module.</p>
+
+<p><code>
+struct ncaiModuleInfo;
+<br>
+struct ncaiSegmentInfo;
+</code></p>
+
+<p class="indent">Structures containing module information. See the GetModuleInfo function.</p>
+
+<p><code>
+typedef enum {} ncaiModuleKind;
+</code></p>
+
+<p class="indent">An identifier for a module type. See the GetModuleInfo function.</p>
+
+<p><code>
+typedef enum {} ncaiSegmentKind;
+</code></p>
+
+<p class="indent">An identifier for a segment type. See the GetModuleInfo function.</p>
+
+<p><code>
+struct _ncaiThread;
+<br>
+typedef _ncaiThread* ncaiThread;
+</code></p>
+
+<p class="indent">Opaque reference to VM internal data structure
+which represents a thread attached to the VM process.</p>
+
+<p><code>
+struct ncaiThreadInfo;
+</code></p>
+
+<p class="indent">Structure containing thread information. See the GetThreadInfo function.</p>
+
+<p><code>
+typedef enum {} ncaiThreadKind;
+</code></p>
+
+<p class="indent">An identifier for a thread type. See the GetThreadInfo function.</p>
+
+<p><code>
+struct ncaiFrameInfo;
+</code></p>
+
+<p class="indent">Structure containing frame information. See the GetStackTrace function.</p>
+
+<p><code>
+struct ncaiRegisterInfo;
+</code></p>
+
+<p class="indent">Structure containing register information. See the GetRegisterInfo function.</p>
+
+<p><code>
+struct ncaiSignalInfo;
+</code></p>
+
+<p class="indent">Structure containing signal information. See the GetSignalInfo function.</p>
+
+<p><code>
+struct ncaiCapabilities;
+</code></p>
+
+<p class="indent">Capabilities of a NCAI environment. TBD.</p>
+
+<p><code>
+struct ncaiEventCallbacks;
+</code></p>
+
+<p class="indent">Structure containing the list of event callback functions.</p>
+
+<p><code>
+typedef enum {} ncaiEventMode;<br>
+<br>
+typedef enum {} ncaiEventKind;
+</code></p>
+
+<p class="indent">Identifiers for event mode and type. See the SetEventNotificationMode function.</p>
+
+<p><code>
+typedef enum {} ncaiWatchpointMode;
+</code></p>
+
+<p class="indent">An identifier for the Watchpoint event mode. See the SetWatchpoint function.</p>
+
+<p><code>
+typedef enum {} ncaiStepMode;
+</code></p>
+
+<p class="indent">An identifier for the Step event mode. See the SetStepMode function.</p>
+
+
+
+<h1><a name="Modules"></a>Modules</h1>
+
+<p><code>ncaiError JNICALL GetAllLoadedModules
+<br>
+
+(ncaiEnv* env, jint* count_ptr, ncaiModule** modules_ptr);
+</code></p>
+
+<p>
+Get a list of all modules which are loaded to the
+VM process. <i>All the returned module pointers remain valid at least
+till the next function call.</i></p>
+
+<p class="indent">
+Parameters:
+</p>
+<ul>
+ <li class="indent">count_ptr -
+ pointer to a jint which will be set on return with number of
+ modules.
+ <li class="indent">modules_ptr -
+ pointer to a ncaiModule* which will be set on return with
+ address of a newly allocated array of ncaiModule's. The array
+ should be freed by JVMTI function Deallocate.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors
+</ul>
+
+<p><code>
+ncaiError JNICALL GetModuleInfo
+<br>
+
+(ncaiEnv* env, ncaiModule module, ncaiModuleInfo* info_ptr);
+</code></p>
+
+<p>
+Get the module information. Fills the following
+structure:</p>
+
+<p class="indent"><code>
+typedef enum {
+<br>
+
+NCAI_MODULE _JNI_LIBRARY,
+<br>
+
+NCAI_MODULE _VM_INTERNAL,
+<br>
+
+NCAI_MODULE _OTHER
+<br>
+} ncaiModuleKind;
+</code></p>
+
+<p class="indent"><code>
+typedef struct {
+<br>
+
+ncaiModuleKind kind;
+<br>
+
+char* name;
+<br>
+
+char* filename;
+<br>
+
+ncaiSegmentInfo* segments;
+<br>
+
+size_t segment_count;
+<br>
+} ncaiModuleInfo;
+</code></p>
+
+<p>The
+kind field determines the module kind from the point of view of VM.
+The segments field will be set on return with a pointer to array of
+the following structures:</p>
+
+<p class="indent"><code>
+typedef enum {
+<br>
+
+NCAI_SEGMENT_UNKNOWN,
+<br>
+
+NCAI_SEGMENT_CODE,
+<br>
+
+NCAI_SEGMENT_DATA
+<br>
+} ncaiSegmentKind;
+</code></p>
+
+<p class="indent"><code>
+typedef struct {
+<br>
+
+ncaiSegmentKind kind;
+<br>
+
+void* base_address;
+<br>
+
+size_t size;
+<br>
+} ncaiSegmentInfo;
+</code></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">module - the module to analyze.
+ <li class="indent">info_ptr -
+ pointer to a ncaiModuleInfo whose fields will be set on return
+ with information which includes module kind and newly allocated
+ arrays of name, filename and segments. The arrays of name, filename
+ and segments should be freed by JVMTI function Deallocate.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_MODULE - module is not a valid ncaiModule.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetModuleClassLoader
+<br>
+
+(ncaiEnv* env, ncaiModule module, jobject* classloader_ptr);
+</code></p>
+
+<p>
+Get the JNI library module class loader. Returns
+NULL if the module was loaded by the bootstrap class loader. If the
+module is not of NCAI_MODULE _JNI_LIBRARY kind the function returns
+an error.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">module - the module to analyze.
+ <li class="indent">classloader_ptr - pointer to a jobject
+ which will be set on return with class loader object.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_MODULE - module is not a valid ncaiModule.
+</ul>
+</p>
+
+
+
+<h1><a name="Methods"></a>Methods</h1>
+
+<p><code>
+ncaiError JNICALL IsMethodCompiled
+<br>
+
+(ncaiEnv* env, jmethodID method, jboolean* is_compiled_ptr);
+</code></p>
+
+<p>
+Indicates if the java method is actually in
+compiled form.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">method - the method to analyze.
+ <li class="indent">is_compiled_ptr - pointer to a jboolean which will be set on return.
+</ul>
+
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_METHOD - method is not a valid java method id.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetMethodLocation
+<br>
+
+(ncaiEnv* env, jmethodID method, void** address_ptr, size_t* size_ptr);
+</code></p>
+
+<p>Get a native address where compiled method is loaded and the size of
+compiled code. <i>This is a convenience method corresponding to the
+CompiledMethodLoad event callback of JVMTI. So, the values returning
+in address_ptr and size_ptr should be the same as code_addr and
+code_size parameters of the callback.</i></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">method - the method to analyze.
+ <li class="indent">address_ptr - pointer to a void* which will be set on return
+ with starting address of compiled code.
+ <li class="indent">size_ptr - pointer to a zise_t which will be set on return
+ with size of compiled code.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_METHOD - method is not a valid java method id.
+ <li class="indent">NCAI_ERROR_NOT_COMPILED - method is not compiled yet.
+</ul>
+
+<p><code>
+ncaiError JNICALL FindJavaMethod
+<br>
+
+(ncaiEnv* env, void* address, jmethodID* method_ptr);
+</code></p>
+
+<p>Finds a compiled java
+method which corresponds to the given native address.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">address - the native address to analyze.
+ <li class="indent">method_ptr - pointer to a jmethodID which will be set on return with java
+ method id or 0 if such method does not exist.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_ADDRESS - address is not located inside a compiled java method.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetBytecodeLocation
+<br>
+
+(ncaiEnv* env, void* address, jmethodID method, jlocation* location_ptr);
+</code></p>
+
+<p>Get a bytecode location in compiled java method which corresponds to the
+given native address.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">address - the native address inside a compiled java method.
+ <li class="indent">method - the java method to analyze.
+ <li class="indent">location_ptr - pointer to a jlocation which will be set on return with index of
+ bytecode instruction corresponding to the native address.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_METHOD - method is not a valid java method id.
+ <li class="indent">NCAI_ERROR_INVALID_ADDRESS - address is not located inside the compiled java method.
+ <li class="indent">NCAI_ERROR_NOT_COMPILED - method is not compiled yet.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetNativeLocation
+<br>
+
+(ncaiEnv* env, jmethodID method, jlocation location, void** address_ptr);
+</code></p>
+
+<p>Get a native address which corresponds to the given bytecode location in
+compiled method. <i>This is a convenience method corresponding to the
+CompiledMethodLoad event callback of JVMTI. So, the value returning
+in address_ptr should be the same as start_address corresponding to
+the location in map parameter of the callback.</i></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">method - the java method to analyze.
+ <li class="indent">location - the index of the bytecode instruction inside the method.
+ <li class="indent">address_ptr - pointer to a void* which will be set on return with native address
+ of compiled code corresponding to the location.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_METHOD - method is not a valid java method id.
+ <li class="indent">NCAI_ERROR_INVALID_LOCATION - location is not a valid location.
+ <li class="indent">NCAI_ERROR_NOT_COMPILED - method is not compiled yet.
+</ul>
+
+
+
+<h1><a name="Threads"></a>Threads</h1>
+
+<p><code>
+ncaiError JNICALL GetAllThreads
+<br>
+
+(ncaiEnv* env, jint* count_ptr, ncaiThread** threads_ptr);
+</code></p>
+
+<p>Get a list of all known threads. <i>All the returned thread pointers
+remain valid at least till the next function call.</i></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">count_ptr - pointer to a jint which will be set on return with number of threads.
+ <li class="indent">threads_ptr - pointer to a ncaiThread * which will be set on return with address
+ of a newly allocated array of ncaiThreadâs. The array should be freed by JVMTI function Deallocate.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetThreadInfo
+<br>
+
+(ncaiEnv* env, ncaiThread thread, ncaiThreadInfo* info_ptr);
+</code></p>
+
+<p>
+Get the thread information. Fills the following structure:</p>
+
+<p><code>
+typedef enum {
+<br>
+
+NCAI_THREAD_JAVA,
+<br>
+
+NCAI_THREAD_VM_INTERNAL,
+<br>
+
+NCAI_THREAD_OTHER
+<br>
+} ncaiThreadKind;
+</code></p>
+
+<p><code>
+typedef struct {
+<br>
+
+ncaiThreadKind kind;
+<br>
+
+char* name;
+<br>
+} ncaiThreadInfo;
+</code></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to analyze.
+ <li class="indent">info_ptr - pointer to a ncaiThreadInfo whose fields will be set on return
+ with information which includes thread kind and newly allocated
+ array of name. The array of name should be freed by JVMTI function Deallocate.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetThreadHandle
+<br>
+
+(ncaiEnv* env, jthread thread, ncaiThread* thread_ptr);
+</code></p>
+
+<p>
+Get a thread handle for the given java thread
+object (0, if such object does not exist).</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to analyze.
+ <li class="indent">thread_ptr - pointer to a ncaiThread which will be set on return with appropriate value.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid jthread.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetThreadObject
+<br>
+
+(ncaiEnv* env, ncaiThread thread, jthread* thread_ptr);
+</code></p>
+
+<p>
+Get a java thread object for the given thread
+handle (0, if such object does not exist).</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the ncaiThread to analyze.
+ <li class="indent">thread_ptr - pointer to a jthread which will be set on return with appropriate value.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+</ul>
+
+<p><code>
+ncaiError JNICALL SuspendThread
+<br>
+
+(ncaiEnv* env, ncaiThread thread);
+</code></p>
+
+<p>
+Suspend the given thread. <i>This is really a hard
+suspend which means one should take care about possible deadlock if
+some thread will try to enter a monitor acquired by the suspended
+thread.</i></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to suspend.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_SUSPENDED - thread is already suspended.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+</ul>
+
+<p><code>
+ncaiError JNICALL ResumeThread
+<br>
+
+(ncaiEnv* env, ncaiThread thread);
+</code></p>
+
+<p>Resume the given thread.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to resume.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_SUSPENDED - thread is not suspended.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+</ul>
+
+<p><code>
+ncaiError JNICALL TerminateThread
+<br>
+
+(ncaiEnv* env, ncaiThread thread);
+</code></p>
+
+<p>
+Terminate the given thread. Not all acquired locks
+and owned JVMTI monitors could be released, so care must be taken to
+prevent a possible deadlock.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to terminate.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetThreadState
+<br>
+
+(ncaiEnv* env, jthread thread, jint* state_ptr);
+</code></p>
+
+<p>Get a state for the given thread. <i>TBD</i>.</p>
+
+
+
+<h1><a name="Frames"></a>Frames</h1>
+
+<p><code>
+ncaiError JNICALL GetFrameCount
+<br>
+
+(ncaiEnv* env, ncaiThread thread, jint* count_ptr);
+</code></p>
+
+<p>
+Get the total number of frames in the given
+thread. The thread needs to be either suspended or the current thread
+in breakpoint or step callback.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to analyze.
+ <li class="indent">count_ptr - pointer to a jint which will be set on return with number of stack frames.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_SUSPENDED - thread is not suspended or current.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetStackTrace
+<br>
+
+(ncaiEnv* env, ncaiThread thread, jint depth, ncaiFrameInfo* frame_buffer, jint* count_ptr);
+</code></p>
+
+<p>
+Get the stack frame information for the given
+thread. The depth specifies capacity of the frame_buffer. The thread
+needs to be either suspended or the current thread in breakpoint or
+step callback.</p>
+
+
+<p><code>
+typedef struct {
+<br>
+
+jint java_frame_depth;
+<br>
+
+void* pc_address;
+<br>
+
+void* return_address;
+<br>
+
+void* frame_address;
+<br>
+
+void* stack_address;
+<br>
+} ncaiFrameInfo;
+</code></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to analyze.
+ <li class="indent">depth - the maximum number of stack frames to retrieve.
+ <li class="indent">frame_buffer - preallocated buffer large enough to hold depth ncaiFrameInfo
+ objects which fields will be set on return with appropriate values.
+ <li class="indent">count_ptr - pointer to a jint which will be set on return with number of stack
+ frames passed to the buffer.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_SUSPENDED - thread is not suspended or current.
+</ul>
+
+
+
+<h1><a name="Registers"></a>Registers</h1>
+
+<p><code>
+ncaiError JNICALL GetRegisterCount
+<br>
+
+(ncaiEnv* env, jint* count_ptr);
+</code></p>
+
+<p>Get a number of native registers.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">count_ptr - pointer to a jint which will be set on return with number of registers.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.</p>
+</ul>
+
+<p><code>
+ncaiError JNICALL GetRegisterlInfo
+<br>
+
+(ncaiEnv* env, jint reg_number, ncaiRegisterInfo* info_ptr);
+</code></p>
+
+<p>Get the register information. Fills the following structure:</p>
+
+<p><code>
+typedef struct {
+<br>
+
+char* name;
+<br>
+
+jint size;
+<br>
+} ncaiRegisterInfo;
+</code></p>
+
+<p>
+Field name is the register name and size is the
+register size in bits.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">reg_number - the number of register to analyze.
+ <li class="indent">info_ptr - pointer to a ncaiRegisterInfo whose fields
+ will be set on return with information.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - reg_number is not a valid register number.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetRegisterValue
+<br>
+
+(ncaiEnv* env, ncaiThread thread, jint reg_number, void* buf);
+</code></p>
+
+<p>
+Get the register value for the given thread. The
+thread needs to be either suspended or the current thread in
+breakpoint or step callback.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">reg_number - the number of register.
+ <li class="indent">buf - preallocated buffer large enough to hold register value
+ which will be set on return.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - reg_number is not a valid register number.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_SUSPENDED - thread is not suspended or current.
+</ul>
+
+<p><code>
+ncaiError JNICALL SetRegisterValue
+<br>
+
+(ncaiEnv* env, ncaiThread thread, jint reg_number, void* buf);
+</code></p>
+
+<p>
+Set the register value for the given thread. The
+thread needs to be either suspended or the current thread in
+breakpoint or step callback.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">reg_number - the number of register.
+ <li class="indent">buf - buffer which contains a register value.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - reg_number is not a valid register number.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_SUSPENDED - thread is not suspended or current.
+</ul>
+
+
+
+<h1><a name="Memory"></a>Memory</h1>
+
+<p>The following functions
+should hide/preserve any instrumentation of a native code done by the
+VM</p>
+
+<p><code>
+ncaiError JNICALL ReadMemory
+<br>
+
+(ncaiEnv* env, void* addr, size_t size, void* buf);
+</code></p>
+
+<p>Read the memory block.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">addr - the address of memory block
+ <li class="indent">size - the size of memory block in bytes.
+ <li class="indent">buf - preallocated buffer large enough to hold a copy of memory block.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ACCESS_DENIED - access to the memory block is denied.
+</ul>
+
+<p><code>
+ncaiError JNICALL WriteMemory
+<br>
+
+(ncaiEnv* env, void* addr, size_t size, void* buf);
+</code></p>
+
+<p>Write the memory block.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">addr - the address of memory block.
+ <li class="indent">size - the size of memory block in bytes.
+ <li class="indent">buf - buffer which contains values which will be copied to memory block.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ACCESS_DENIED - access to the memory block is denied.
+</ul>
+
+
+
+<h1><a name="Signals"></a>Signals</h1>
+
+<p><code>
+ncaiError JNICALL GetSignalCount
+<br>
+
+(ncaiEnv* env, jint* count_ptr);
+</code></p>
+
+<p>Get a number of signals supported by the platform.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">count_ptr - pointer to a jint which will be set on return with number of signals.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetSignalInfo
+<br>
+
+(ncaiEnv* env, jint signal, ncaiSignalInfo* info_ptr);
+</code></p>
+
+<p>Get the signal information. Fills the following structure:</p>
+
+<p><code>
+typedef struct {
+<br>
+
+char* name;
+<br>
+} ncaiSignalInfo;
+</code></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">signal - the number of signal.
+ <li class="indent">info_ptr - pointer to a ncaiSignalInfo whose fields will be set on return with information.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - signal is not a valid signal number.
+</ul>
+
+
+
+<h1><a name="Miscellaneous"></a>Miscellaneous</h1>
+
+<p><code>
+ncaiError JNICALL GetJvmtiEnv
+<br>
+
+(ncaiEnv* env, jvmtiEnv** jvmti_env_ptr);
+</code></p>
+
+<p>Get JVMTI environment which NCAI environment extends.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">jvmti_env_ptr - pointer to a jvmtiEnv* which will be set on return with
+ appropriate JVMTI environment.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetVersion
+<br>
+
+(ncaiEnv* env, jint* version_ptr);
+</code></p>
+
+<p>Get the NCAI version number. The version number
+consists of major, minor and micro parts just like the JVMTI version
+identifier.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">version_ptr - pointer to a jint which will be set on return with actual version of
+ NCAI implementation.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetErrorName
+<br>
+
+(ncaiEnv* env, ncaiError err, const char** name_ptr);
+</code></p>
+
+<p>Get symbolic representation for the given error code.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">name_ptr - pointer to a char* which will be set on return with address of a
+ newly allocated array of characters. The array should be freed by
+ JVMTI function Deallocate.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - err is not a valid ncaiError.
+</ul>
+
+
+
+<h1><a name="Capabilities"></a>Capabilities</h1>
+
+<p><code>
+typedef struct {
+<br>
+
+// ...
+<br>
+} ncaiCapabilities;
+</code></p>
+
+<p><code>
+ncaiError JNICALL GetPotentialCapabilities
+<br>
+
+(ncaiEnv* env, ncaiCapabilities* caps_ptr);
+</code></p>
+
+<p>Get capabilities which the NCAI environment can potentially possess.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">caps_ptr - pointer to ncaiCapabilities which will be set on return with
+ potential capabilities.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL GetCapabilities
+<br>
+
+(ncaiEnv* env, ncaiCapabilities* caps_ptr);
+</code></p>
+
+<p>Get currently possessed capabilities.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">caps_ptr - pointer to ncaiCapabilities which will be set on return with
+ possessed capabilities.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL AddCapabilities
+<br>
+
+(ncaiEnv* env, ncaiCapabilities* caps_ptr);
+</code></p>
+
+<p>Add the specified capabilities.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">caps_ptr - pointer to ncaiCapabilities to add.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL RelinquishCapabilities
+<br>
+
+(ncaiEnv* env, ncaiCapabilities* caps_ptr);
+</code></p>
+
+<p>Relinquish the specified capabilities.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">caps_ptr - pointer to ncaiCapabilities to relinquish.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+
+
+<h1><a name="Event_Management"></a>Event Management</h1>
+
+<p><code>
+ncaiError JNICALL GetEventCallbacks
+<br>
+
+(ncaiEnv* env, ncaiEventCallbacks* callbacks, size_t size);
+</code></p>
+
+<p>Get the event callbacks.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">callbacks - pointer to ncaiEventCallbacks which will be set on return with
+ current event callbacks.
+ <li class="indent">size - the size of callbacks.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL SetEventCallbacks
+<br>
+
+(ncaiEnv* env, ncaiEventCallbacks* callbacks, size_t size);
+</code></p>
+
+<p>Set the event callbacks.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">callbacks - pointer to ncaiEventCallbacks to set.
+ <li class="indent">size - the size of callbacks.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">no function specific errors.
+</ul>
+
+<p><code>
+ncaiError JNICALL SetEventNotificationMode
+<br>
+
+(ncaiEnv* env, ncaiEventMode mode, ncaiEventKind event, ncaiThread thread);
+</code></p>
+
+<p>
+Set the event notification mode for the given
+thread. If thread is NULL, the mode is set for all the known threads.
+The ncaiEventMode and ncaiEventKind are the following:</p>
+
+<p class="indent"><code>
+typedef enum {
+<br>
+
+NCAI_ENABLE = 1,
+<br>
+
+NCAI_DISABLE = 0
+<br>
+} ncaiEventMode;
+</code></p>
+
+
+<p class="indent"><code>
+typedef enum {
+<br>
+
+NCAI_EVENT_THREAD_START = 1,
+<br>
+
+NCAI_EVENT_THREAD_END,
+<br>
+
+NCAI_EVENT_BREAKPOINT,
+<br>
+
+NCAI_EVENT_STEP,
+<br>
+
+NCAI_EVENT_WATCHPOINT,
+<br>
+
+NCAI_EVENT_METHOD_ENTRY,
+<br>
+
+NCAI_EVENT_METHOD_EXIT,
+<br>
+
+NCAI_EVENT_FRAME_POP,
+<br>
+
+NCAI_EVENT_SIGNAL,
+<br>
+
+NCAI_EVENT_EXCEPTION,
+<br>
+
+NCAI_EVENT_MODULE_LOAD,
+<br>
+
+NCAI_EVENT_MODULE_UNLOAD,
+<br>
+
+NCAI_EVENT_CONSOLE_INPUT,
+<br>
+
+NCAI_EVENT_CONSOLE_OUTPUT,
+<br>
+
+NCAI_EVENT_DEBUG_OUTPUT
+<br>
+} ncaiEventKind;
+</code></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">mode - the mode to set.
+ <li class="indent">event - the event to control.
+ <li class="indent">thread - the thread to control.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - mode or event is not valid.
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+</ul>
+
+<p><code>
+ncaiError JNICALL SetBreakpoint
+<br>
+
+(ncaiEnv* env, void* code_addr);
+</code></p>
+
+<p>Set a breakpoint at the given address code_addr.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">code_addr - the native address of the breakpoint.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_DUPLICATE - the designated breakpoint is already set.
+</ul>
+
+<p><code>
+ncaiError JNICALL ClearBreakpoint
+<br>
+
+(ncaiEnv* env, void* code_addr);
+</code></p>
+
+<p>Clear a breakpoint at the given address code_addr.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">code_addr - the native address of the breakpoint.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_NOT_FOUND - the designated breakpoint is not found.
+</ul>
+
+<p><code>
+ncaiError JNICALL SetWatchpoint
+<br>
+
+(ncaiEnv* env, void* data_addr, size_t len, ncaiWatchpointMode mode);
+</code></p>
+
+<p>Set a watchpoint starting at the given address data_addr for len bytes.</p>
+
+<p class="indent"><code>
+typedef enum {
+<br>
+
+NCAI_WATCHPOINT_READ,
+<br>
+
+NCAI_WATCHPOINT_WRITE,
+<br>
+
+NCAI_WATCHPOINT_ACCESS
+<br>
+} ncaiWatchpointMode;
+</code></p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">data_addr - the starting address of memory block to watch.
+ <li class="indent">len - the length in bytes of the memory block.
+ <li class="indent">mode - the mode to watch.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_DUPLICATE - the designated watchpoint is already set.
+</ul>
+
+<p><code>
+ncaiError JNICALL ClearWatchpoint
+<br>
+
+(ncaiEnv* env, void* data_addr);
+</code></p>
+
+<p>Clear a watchpoint starting at the given address data_addr.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">data_addr - the starting address of watching memory block.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_NOT_FOUND - the designated watchpoint is not found.
+</ul>
+
+<p><code>
+ncaiError JNICALL SetStepMode
+<br>
+
+(ncaiEnv* env, ncaiThread thread, ncaiStepMode mode);
+</code></p>
+
+<p>Set the step mode for the given thread. If thread is NULL, the mode is set for all the known threads.</p>
+
+<p class="indent"><code>
+typedef enum {
+<br>
+
+NCAI_STEP_OFF,
+<br>
+
+NCAI_STEP_INTO,
+<br>
+
+NCAI_STEP_OVER,
+<br>
+
+NCAI_STEP_OUT
+<br>
+} ncaiStepMode;
+</code></p>
+
+<p>NCAI_STEP_OFF disables generating step events for the given thread, NCAI_STEP_INTO
+enables generating step event for each CPU instruction,
+NCAI_STEP_OVER enables generating step event for each CPU instruction
+skipping function calls, NCAI_STEP_OUT disables generating step
+event untill the function returns.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to control.
+ <li class="indent">mode - the mode to set.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_ILLEGAL_ARGUMENT - mode is not valid.
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+</ul>
+
+<p><code>
+ncaiError JNICALL NotifyFramePop
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* frame_address);
+</code></p>
+
+<p>Set a trigger to notify when the frame of the given address is popped from the given thread stack.</p>
+
+<p class="indent">Parameters:</p>
+<ul>
+ <li class="indent">thread - the thread to watch.
+ <li class="indent">frame_addr - the address of frame to watch.
+</ul>
+
+<p class="indent">Errors:</p>
+<ul>
+ <li class="indent">NCAI_ERROR_INVALID_THREAD - thread is not a valid ncaiThread.
+ <li class="indent">NCAI_ERROR_THREAD_NOT_ALIVE - the thread is not alive.
+ <li class="indent">NCAI_ERROR_NOT_FOUND - the designated frame is not found.
+</ul>
+
+
+
+<h1><a name="Event_Callbacks"></a>Event Callbacks</h1>
+
+<p>The following callbacks are called from within an appropriate application thread
+and are not queued by the VM.</p>
+
+<p><code>
+void JNICALL ThreadStart
+<br>
+
+(ncaiEnv* env, ncaiThread thread);
+</code></p>
+
+<p>This callback is invoked when the thread is about to enter its initial method.</p>
+
+<p><code>
+void JNICALL ThreadEnd
+<br>
+
+(ncaiEnv* env, ncaiThread thread);
+</code></p>
+
+<p>This callback is invoked just after the thread exits its initial method.</p>
+
+<p><code>
+void JNICALL Step
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr);
+</code></p>
+
+<p>This callback is invoked when the native thread specified in SetStepMode
+request reaches a new native instruction address according to the
+specified step mode.</p>
+
+
+<p><code>
+void JNICALL Breakpoint
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr);
+</code></p>
+
+<p>
+This callback is invoked when the native thread
+specified in SetBreakpoint request reaches the specified native
+instruction address.</p>
+
+<p><code>
+void JNICALL Watchpoint
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* code_addr, void* data_addr);
+</code></p>
+
+<p>
+This callback is invoked when the native thread
+specified in SetWatchpoint request accesses the specified native data
+address according to the specified watchpoint mode.</p>
+
+<p><code>
+void JNICALL Signal
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr, jint signal, jboolean is_internal, jboolean* is_handled);
+</code></p>
+
+<p>
+This callback is invoked when OS notifies the VM
+process about a raised signal. is_internal indicates whether the VM
+raises the signal for internal use. is_handled is in/out flag which
+indicates whether the VM will handle the signal or not. The actual
+set of possible signals depends on platform.</p>
+
+<p><code>
+void JNICALL Exception
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr, void* exception);
+</code></p>
+
+<p>This callback is invoked when C++ exception is thrown. <i>TBD</i>.</p>
+
+<p><code>
+void JNICALL ModuleLoad
+<br>
+
+(ncaiEnv* env, ncaiThread thread, ncaiModule module);
+</code></p>
+
+<p>This callback is invoked when the VM process loads an executable module.</p>
+
+<p><code>
+void JNICALL ModuleUnload
+<br>
+
+(ncaiEnv* env, ncaiThread thread, ncaiModule module);
+</code></p>
+
+<p>This callback is invoked when the VM process is about to unload an executable module.</p>
+
+<p><code>
+void JNICALL MethodEntry
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr);
+</code></p>
+
+<p>This callback is invoked when the thread is about to enter a method.</p>
+
+<p><code>
+void JNICALL MethodExit
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr);
+</code></p>
+
+<p>This callback is invoked when the thread is about to exit a method.</p>
+
+<p><code>
+void JNICALL FramePop
+<br>
+
+(ncaiEnv* env, ncaiThread thread, void* addr);
+</code></p>
+
+<p>This callback is invoked when the thread is about to exit a frame
+specified in NotifyFramePop request.</p>
+
+<p><code>
+void JNICALL ConsoleInput
+<br>
+
+(ncaiEnv* env, char** message);
+</code></p>
+
+<p> This callback is invoked when the VM process tries to read data from standard input. <i>TBD</i>.</p>
+
+<p><code>
+void JNICALL ConsoleOutput
+<br>
+
+(ncaiEnv* env, char* message);
+</code></p>
+
+<p>This callback is invoked when the VM process is about to write a message to standard output. <i>TBD</i>.</p>
+
+<p><code>
+void JNICALL DebugMessage
+<br>
+
+(ncaiEnv* env, char* message);
+</code></p>
+
+<p>This callback is invoked when the VM process sends a debug message. <i>TBD</i>.</p>
+
+
+
+<h1><a name="Error_codes"></a>Error codes</h1>
+
+<p>The following is a list of possible error codes which can be returned by
+NCAI functions. <i>Universal errors</i> can be returned by any
+function and so they are not specified in the above function error
+lists. On the contrary <i>function specific errors</i> can be
+returned only by the functions which include them in the function
+errors specification.</p>
+
+
+<h2><a name="Universal_errors"></a>Universal errors</h2>
+
+<p>
+NCAI_ERROR_NONE
+<br>
+<span class="indent">Indicates a successful completion of the function.</span>
+</p>
+
+<p>
+NCAI_ERROR_NULL_POINTER
+<br>
+<span class="indent">A pointer argument is equal to 0 which is not acceptable for the function.</span>
+</p>
+
+<p>NCAI_ERROR_OUT_OF_MEMORY
+<br>
+<span class="indent">Not enough allocatable memory available to process the function.</span>
+</p>
+
+<p>NCAI_ERROR_ACCESS_DENIED
+<br>
+<span class="indent">Access is denied.</span>
+</p>
+
+<p>NCAI_ERROR_UNATTACHED_THREAD
+<br>
+<span class="indent">The calling thread is not attached to the VM.</span>
+</p>
+
+<p>NCAI_ERROR_INVALID_ENVIRONMENT
+<br>
+<span class="indent">The NCAI environment is not valid.</span>
+</p>
+
+<p>NCAI_ERROR_INTERNAL
+<br>
+<span class="indent">An unexpected internal error.</span>
+</p>
+
+<p>NCAI_ERROR_ILLEGAL_ARGUMENT
+<br>
+<span class="indent">Illegal value of argument.</span>
+</p>
+
+
+<h2><a name="Function_specific_errors"></a>Function specific errors</h2>
+
+<p>NCAI_ERROR_NOT_AVAILABLE
+<br>
+<span class="indent">Function is not implemented.</span>
+</p>
+
+<p>NCAI_ERROR_INVALID_MODULE
+<br>
+<span class="indent">The module specified by argument is not a valid ncaiModule.</span>
+</p>
+
+<p>NCAI_ERROR_INVALID_METHOD
+<br>
+<span class="indent">The method specified by argument is not a valid jmethodID.</span>
+</p>
+
+<p>NCAI_ERROR_INVALID_LOCATION
+<br>
+<span class="indent">The location specified by argument is not a valid location.</span>
+</p>
+
+<p>NCAI_ERROR_INVALID_ADDRESS
+<br>
+<span class="indent">The address specified by argument is not valid.</span>
+</p>
+
+<p>NCAI_ERROR_INVALID_THREAD
+<br>
+<span class="indent">The thread specified by argument is not a valid ncaiThread.</span>
+</p>
+
+<p>NCAI_ERROR_THREAD_SUSPENDED
+<br>
+<span class="indent">The thread specified by argument is suspended.</span>
+</p>
+
+<p>NCAI_ERROR_THREAD_NOT_SUSPENDED
+<br>
+<span class="indent">The thread specified by argument is not suspended.</span>
+</p>
+
+<p>NCAI_ERROR_THREAD_NOT_ALIVE
+<br>
+<span class="indent">The thread specified by argument is not alive.</span>
+</p>
+
+<p>NCAI_ERROR_INTERPRETER_USED
+<br>
+<span class="indent">VM was started in interpreter mode.</span>
+</p>
+
+<p>NCAI_ERROR_NOT_COMPILED
+<br>
+<span class="indent">The method is not compiled yet.</span>
+</p>
+
+<p>NCAI_ERROR_DUPLICATE
+<br>
+<span class="indent">The designated breakpoint is already set.</span>
+</p>
+
+<p>NCAI_ERROR_NOT_FOUND
+<br>
+<span class="indent">The designated breakpoint is not found.</span>
+</p>
+
+
+
+<h1><a name="Priorities"></a>Appendix 1. Priorities</h1>
+
+<p>The following table reflects our view on implementation priorities.</p>
+
+<table width=450 border="1" bordercolor="#000000" cellpadding="3" cellspacing="0">
+ <col width="40%">
+ <col width="16%">
+ <col width="24%">
+ <col width="20%">
+ <tr>
+ <th class="TableHeading">
+ Function Name
+ <th class="TableHeading">
+ Priority
+ <th class="TableHeading">
+ Comments
+ <th class="TableHeading">
+ Capability
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Modules</b>
+ </tr>
+ <tr>
+ <td><code>GetAllLoadedModules
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetModuleInfo
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetModuleClassLoader
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Methods</b>
+ </tr>
+ <tr>
+ <td><code>IsMethodCompiled
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetMethodLocation
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>FindJavaMethod
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetBytecodeLocation
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetNativeLocation
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Threads</b>
+ </tr>
+ <tr>
+ <td><code>GetAllThreads
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetThreadInfo
+ <td>Medium
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetThreadHandle
+ <td>Medium
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetThreadObject
+ <td>Medium
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>SuspendThread
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ResumeThread
+ <td>High
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>TerminateThread
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetThreadState
+ <td>Medium
+ <td><i>TBD</i>
+ <td>Required
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Frames</b>
+ </tr>
+ <tr>
+ <td><code>GetFrameCount
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetStackTrace
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Registers</b>
+ </tr>
+ <tr>
+ <td><code>GetRegisterCount
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetRegisterInfo
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetRegisterValue
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>SetRegisterValue
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Memory</b>
+ </tr>
+ <tr>
+ <td><code>ReadMemory
+ <td>High
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>WriteMemory
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Signals</b>
+ </tr>
+ <tr>
+ <td><code>GetSignalCount
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>GetSignalInfo
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Miscellaneous</b>
+ </tr>
+ <tr>
+ <td><code>GetJvmtiEnv
+ <td>Low
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetVersion
+ <td>Low
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetErrorName
+ <td>Low
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Capabilities</b>
+ </tr>
+ <tr>
+ <td><code>GetPotentialCapabilities
+ <td>Medium
+ <td><i>TBD</i>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>AddCapabilities
+ <td>Medium
+ <td><i>TBD</i>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>RelinquishCapabilities
+ <td>Medium
+ <td><i>TBD</i>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>GetCapabilities
+ <td>Medium
+ <td><i>TBD</i>
+ <td>Required
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Event Management</b>
+ </tr>
+ <tr>
+ <td><code>GetEventCallbacks
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>SetEventCallbacks
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>SetEventNotificationMode
+ <td>High
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>SetBreakpoint
+ <td>High
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ClearBreakpoint
+ <td>High
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>SetWatchpoint
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ClearWatchpoint
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>SetStepMode
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>NotifyFramePop
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td colspan="4">
+ <b>Event Callbacks</b>
+ </tr>
+ <tr>
+ <td><code>ThreadStart
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ThreadEnd
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>Step
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>Breakpoint
+ <td>High
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>Watchpoint
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>Signal
+ <td>Medium
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>Exception
+ <td>Low
+ <td><i>TBD</i>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ModuleLoad
+ <td>Medium
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>ModuleUnload
+ <td>Medium
+ <td>
+ <td>Required
+ </tr>
+ <tr>
+ <td><code>MethodEntry
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>MethodExit
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>FramePop
+ <td>Low
+ <td>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ConsoleInput
+ <td>Low
+ <td><i>TBD</i>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>ConsoleOutput
+ <td>Low
+ <td><i>TBD</i>
+ <td>Optional
+ </tr>
+ <tr>
+ <td><code>DebugMessage
+ <td>Low
+ <td><i>TBD</i>
+ <td>Optional
+ </tr>
+</table>
+
+
+</BODY>
+</HTML>
Propchange: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.html
------------------------------------------------------------------------------
svn:eol-style = native
Added: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.xml
URL: http://svn.apache.org/viewvc/harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.xml?rev=655779&view=auto
==============================================================================
--- harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.xml (added)
+++ harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.xml Tue May 13 01:32:11 2008
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+
+-->
+
+<document>
+
+ <properties>
+ <title>Native Code Access Interface description</title>
+ <author email="dev@harmony.apache.org">Harmony Documentation Team</author>
+
+ </properties>
+
+ <body>
+ <docinclude name="subcomponents/drlvm/NCAI_spec.html"/>
+ </body>
+</document>
Propchange: harmony/standard/site/xdocs/subcomponents/drlvm/NCAI_spec.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/standard/site/xdocs/subcomponents/drlvm/index.xml
URL: http://svn.apache.org/viewvc/harmony/standard/site/xdocs/subcomponents/drlvm/index.xml?rev=655779&r1=655778&r2=655779&view=diff
==============================================================================
--- harmony/standard/site/xdocs/subcomponents/drlvm/index.xml (original)
+++ harmony/standard/site/xdocs/subcomponents/drlvm/index.xml Tue May 13 01:32:11 2008
@@ -176,6 +176,21 @@
gives info on specifics of the current implementation.
</li>
</ul>
+ <li>
+ Native Code Access Interface (NCAI) Implementation
+ </li>
+ <ul>
+ <li>
+ <a href="NCAI.html">NCAI Implementation</a>
+ <br/>
+ Details of NCAI implementation in DRLVM.
+ </li>
+ <li>
+ <a href="NCAI_spec.html">NCAI Description</a>
+ <br/>
+ Description of NCAI interface partially implemented in DRLVM.
+ </li>
+ </ul>
</ul>
<li><a href="DoxygenStart.html">DRLVM Source Code Generated Documentation Index</a>