jvmti.cc (_Jv_JVMTI_GetLineNumberTable): New function.
* jvmti.cc (_Jv_JVMTI_GetLineNumberTable): New function. (_Jv_JVMTI_Interface): Define GetLineNumberTable. From-SVN: r118419
This commit is contained in:
parent
b68bcfff54
commit
081070150c
@ -1,3 +1,8 @@
|
||||
2006-11-02 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* jvmti.cc (_Jv_JVMTI_GetLineNumberTable): New function.
|
||||
(_Jv_JVMTI_Interface): Define GetLineNumberTable.
|
||||
|
||||
2006-11-01 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* gnu/gcj/jvmti/Location.java: New file.
|
||||
|
@ -506,6 +506,54 @@ _Jv_JVMTI_GetMethodModifiers (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
|
||||
return JVMTI_ERROR_NONE;
|
||||
}
|
||||
|
||||
static jvmtiError JNICALL
|
||||
_Jv_JVMTI_GetLineNumberTable (jvmtiEnv *env, jmethodID method,
|
||||
jint *entry_count_ptr,
|
||||
jvmtiLineNumberEntry **table_ptr)
|
||||
{
|
||||
NULL_CHECK (entry_count_ptr);
|
||||
NULL_CHECK (table_ptr);
|
||||
|
||||
jclass klass;
|
||||
jvmtiError jerr = env->GetMethodDeclaringClass (method, &klass);
|
||||
if (jerr != JVMTI_ERROR_NONE)
|
||||
return jerr;
|
||||
|
||||
_Jv_MethodBase *base = _Jv_FindInterpreterMethod (klass, method);
|
||||
if (base == NULL)
|
||||
return JVMTI_ERROR_INVALID_METHODID;
|
||||
|
||||
if (java::lang::reflect::Modifier::isNative (method->accflags)
|
||||
|| !_Jv_IsInterpretedClass (klass))
|
||||
return JVMTI_ERROR_NATIVE_METHOD;
|
||||
|
||||
_Jv_InterpMethod *imeth = reinterpret_cast<_Jv_InterpMethod *> (base);
|
||||
jlong start, end;
|
||||
jintArray lines = NULL;
|
||||
jlongArray indices = NULL;
|
||||
imeth->get_line_table (start, end, lines, indices);
|
||||
if (lines == NULL)
|
||||
return JVMTI_ERROR_ABSENT_INFORMATION;
|
||||
|
||||
jvmtiLineNumberEntry *table;
|
||||
jsize len = lines->length * sizeof (jvmtiLineNumberEntry);
|
||||
table = (jvmtiLineNumberEntry *) _Jv_MallocUnchecked (len);
|
||||
if (table == NULL)
|
||||
return JVMTI_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
jint *line = elements (lines);
|
||||
jlong *index = elements (indices);
|
||||
for (int i = 0; i < lines->length; ++i)
|
||||
{
|
||||
table[i].start_location = index[i];
|
||||
table[i].line_number = line[i];
|
||||
}
|
||||
|
||||
*table_ptr = table;
|
||||
*entry_count_ptr = lines->length;
|
||||
return JVMTI_ERROR_NONE;
|
||||
}
|
||||
|
||||
static jvmtiError JNICALL
|
||||
_Jv_JVMTI_IsMethodNative (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
|
||||
jboolean *result)
|
||||
@ -1380,7 +1428,7 @@ struct _Jv_jvmtiEnv _Jv_JVMTI_Interface =
|
||||
RESERVED, // reserved67
|
||||
UNIMPLEMENTED, // GetMaxLocals
|
||||
UNIMPLEMENTED, // GetArgumentsSize
|
||||
UNIMPLEMENTED, // GetLineNumberTable
|
||||
_Jv_JVMTI_GetLineNumberTable, // GetLineNumberTable
|
||||
UNIMPLEMENTED, // GetMethodLocation
|
||||
UNIMPLEMENTED, // GetLocalVariableTable
|
||||
RESERVED, // reserved73
|
||||
|
Loading…
Reference in New Issue
Block a user