mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2006-11-01 Keith Seitz <keiths@redhat.com>
|
||||||
|
|
||||||
* gnu/gcj/jvmti/Location.java: New file.
|
* gnu/gcj/jvmti/Location.java: New file.
|
||||||
|
|
|
||||||
|
|
@ -506,6 +506,54 @@ _Jv_JVMTI_GetMethodModifiers (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
|
||||||
return JVMTI_ERROR_NONE;
|
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
|
static jvmtiError JNICALL
|
||||||
_Jv_JVMTI_IsMethodNative (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
|
_Jv_JVMTI_IsMethodNative (MAYBE_UNUSED jvmtiEnv *env, jmethodID method,
|
||||||
jboolean *result)
|
jboolean *result)
|
||||||
|
|
@ -1380,7 +1428,7 @@ struct _Jv_jvmtiEnv _Jv_JVMTI_Interface =
|
||||||
RESERVED, // reserved67
|
RESERVED, // reserved67
|
||||||
UNIMPLEMENTED, // GetMaxLocals
|
UNIMPLEMENTED, // GetMaxLocals
|
||||||
UNIMPLEMENTED, // GetArgumentsSize
|
UNIMPLEMENTED, // GetArgumentsSize
|
||||||
UNIMPLEMENTED, // GetLineNumberTable
|
_Jv_JVMTI_GetLineNumberTable, // GetLineNumberTable
|
||||||
UNIMPLEMENTED, // GetMethodLocation
|
UNIMPLEMENTED, // GetMethodLocation
|
||||||
UNIMPLEMENTED, // GetLocalVariableTable
|
UNIMPLEMENTED, // GetLocalVariableTable
|
||||||
RESERVED, // reserved73
|
RESERVED, // reserved73
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue