java-interp.h (_Jv_LocalVarTableEntry): Add union for bytecode_pc and direct-threaded pc.
* include/java-interp.h (_Jv_LocalVarTableEntry): Add union for bytecode_pc and direct-threaded pc. Add field descriptions inline. * defineclass.cc (read_one_code_attribute): Change from bytecode_start_pc to bytecode_pc. Remove unused variable "len". * interpret.cc (compile): Remap the variable table, too. (get_local_var_table) [DIRECT_THREADED]: Use insn_index on the start location to map from pc_t to code index. From-SVN: r125734
This commit is contained in:
parent
e89993b3f2
commit
7dace0ca51
4 changed files with 56 additions and 13 deletions
|
@ -947,6 +947,25 @@ _Jv_InterpMethod::compile (const void * const *insn_targets)
|
|||
|
||||
prepared = insns;
|
||||
|
||||
// Now remap the variable table for this method.
|
||||
for (int i = 0; i < local_var_table_len; ++i)
|
||||
{
|
||||
int start_byte = local_var_table[i].bytecode_pc;
|
||||
if (start_byte < 0 || start_byte >= code_length)
|
||||
start_byte = 0;
|
||||
jlocation start = pc_mapping[start_byte];
|
||||
|
||||
int end_byte = start_byte + local_var_table[i].length;
|
||||
if (end_byte < 0)
|
||||
end_byte = 0;
|
||||
jlocation end = ((end_byte >= code_length)
|
||||
? number_insn_slots
|
||||
: pc_mapping[end_byte]);
|
||||
|
||||
local_var_table[i].pc = &insns[start];
|
||||
local_var_table[i].length = end - start + 1;
|
||||
}
|
||||
|
||||
if (breakpoint_insn == NULL)
|
||||
{
|
||||
bp_insn_slot.insn = const_cast<void *> (insn_targets[op_breakpoint]);
|
||||
|
@ -1526,12 +1545,15 @@ _Jv_InterpMethod::get_local_var_table (char **name, char **sig,
|
|||
*sig = local_var_table[table_slot].descriptor;
|
||||
*generic_sig = local_var_table[table_slot].descriptor;
|
||||
|
||||
*startloc = static_cast<jlong>
|
||||
(local_var_table[table_slot].bytecode_start_pc);
|
||||
#ifdef DIRECT_THREADED
|
||||
*startloc = insn_index (local_var_table[table_slot].pc);
|
||||
#else
|
||||
*startloc = static_cast<jlong> (local_var_table[table_slot].bytecode_pc);
|
||||
#endif
|
||||
*length = static_cast<jint> (local_var_table[table_slot].length);
|
||||
*slot = static_cast<jint> (local_var_table[table_slot].slot);
|
||||
}
|
||||
return local_var_table_len - table_slot -1;
|
||||
return local_var_table_len - table_slot - 1;
|
||||
}
|
||||
|
||||
pc_t
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue