CACAO
Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
bytecode_escape.cpp File Reference

Go to the source code of this file.

Data Structures

struct  op_stack_slot_t
 
struct  op_stack_t
 
struct  bit_vector_t
 
struct  basicblock_work_item
 
struct  basicblock_work_list_t
 
struct  jcode_t
 
struct  bc_escape_analysis_t
 

Macros

#define BC_ESCAPE_VERBOSE   !defined(NDEBUG)
 
#define dprintf(x,...)   printf(__VA_ARGS__)
 
#define FOR_EACH_BASICBLOCK_WORK_LIST(lst, it)   for ((it) = (lst)->first; (it); (it) = (it)->next)
 

Typedefs

typedef struct basicblock_work_item basicblock_work_item_t
 

Enumerations

enum  op_stack_slot_type_t { OP_STACK_SLOT_TYPE_PARAM = 0, OP_STACK_SLOT_TYPE_UNKNOWN = 1 }
 
enum  value_category_t { VALUE_CATEGORY_1, VALUE_CATEGORY_2 }
 

Functions

static op_stack_slot_t op_stack_slot_create_param (s4 index)
 
static bool op_stack_slot_is_unknown (const op_stack_slot_t slot)
 
static bool op_stack_slot_is_param (const op_stack_slot_t slot)
 
static bool op_stack_test_position (op_stack_t *stack, op_stack_slot_t *pos)
 
static void op_stack_init (op_stack_t *stack, unsigned max, bool *perror_flag)
 
static void op_stack_set_error (op_stack_t *stack)
 
static void op_stack_reset (op_stack_t *stack)
 
static op_stack_slot_t op_stack_pop (op_stack_t *stack)
 
static void op_stack_push (op_stack_t *stack, op_stack_slot_t element)
 
static op_stack_slot_t op_stack_get (op_stack_t *stack, int offset)
 
static void op_stack_set (op_stack_t *stack, int offset, op_stack_slot_t value)
 
static void op_stack_push_unknown (op_stack_t *stack)
 
static void op_stack_print (const op_stack_t *stack, FILE *f)
 
static bool op_stack_is_empty (const op_stack_t *stack)
 
static s4 op_stack_element_count (const op_stack_t *stack)
 
static void bit_vector_init (bit_vector_t *bv, s4 size)
 
static s4 bit_vector_size (const bit_vector_t *bv)
 
static void bit_vector_set (bit_vector_t *bv, s4 bit)
 
static bool bit_vector_get (const bit_vector_t *bv, s4 bit)
 
void basicblock_work_list_init (basicblock_work_list_t *lst)
 
void basicblock_work_list_insert (basicblock_work_list_t *lst, s4 bytecode_index)
 
static void jcode_init (jcode_t *jc, u1 *start, s4 length, s4 offset, bool *perror_flag)
 
static void jcode_set_error (jcode_t *jc)
 
static void jcode_move_to_index (jcode_t *jc, s4 index)
 
static bool jcode_end (const jcode_t *jc)
 
static void jcode_record_instruction_start (jcode_t *jc)
 
static void jcode_rewind_instruction (jcode_t *jc)
 
static s4 jcode_get_instruction_length (const jcode_t *jc)
 
static void jcode_align_bytecode_index (jcode_t *jc, s4 align)
 
static void jcode_forward_instruction_relative (jcode_t *jc, s4 n)
 
static s4 jcode_get_index (const jcode_t *jc)
 
bool jcode_test_has_bytes (jcode_t *jc, s4 n)
 
static u1 jcode_get_u1 (jcode_t *jc)
 
static ByteCode jcode_get_bytecode (jcode_t *jc)
 
static s2 jcode_get_s2 (jcode_t *jc)
 
static u2 jcode_get_u2 (jcode_t *jc)
 
static s4 jcode_get_s4 (jcode_t *jc)
 
static s4 jcode_get_branch_target (jcode_t *jc)
 
static s4 jcode_get_branch_target_wide (jcode_t *jc)
 
static s4 jcode_get_fall_through_target (jcode_t *jc)
 
static void bc_escape_analysis_perform_intern (methodinfo *m, int depth)
 
static void bc_escape_analysis_init (bc_escape_analysis_t *be, methodinfo *m, bool verbose, int depth)
 
static void bc_escape_analysis_branch_target (bc_escape_analysis_t *be, s4 branch_target)
 
static void bc_escape_analysis_adjust_state (bc_escape_analysis_t *be, op_stack_slot_t adr_param, escape_state_t escape_state)
 
static void bc_escape_analysis_dirty (bc_escape_analysis_t *be, s4 local)
 
static void bc_escape_analysis_dirty_2 (bc_escape_analysis_t *be, s4 local)
 
static void bc_escape_analysis_returned (bc_escape_analysis_t *be, op_stack_slot_t value)
 
op_stack_slot_t bc_escape_analysis_address_local (bc_escape_analysis_t *be, s4 local)
 
value_category_t bc_escape_analysis_value_category (bc_escape_analysis_t *be, s4 index)
 
static void bc_escape_analysis_push_return_value (bc_escape_analysis_t *be, methoddesc *md)
 
static void bc_escape_analysis_adjust_invoke_parameters (bc_escape_analysis_t *be, methodinfo *mi)
 
static void bc_escape_analysis_escape_invoke_parameters (bc_escape_analysis_t *be, methoddesc *md)
 
static void bc_escape_analysis_parse_invoke (bc_escape_analysis_t *be, jcode_t *jc)
 
static void bc_escape_analysis_parse_tableswitch (bc_escape_analysis_t *be, jcode_t *jc)
 
static void bc_escape_analysis_parse_lookupswitch (bc_escape_analysis_t *be, jcode_t *jc)
 
static void bc_escape_analysis_process_basicblock (bc_escape_analysis_t *be, jcode_t *jc)
 
static void bc_escape_analysis_adjust_return_value (bc_escape_analysis_t *be)
 
static void bc_escape_analysis_analyze (bc_escape_analysis_t *be)
 
void bc_escape_analysis_perform (methodinfo *m)
 

Variables

const op_stack_slot_t OP_STACK_SLOT_UNKNOWN
 

Macro Definition Documentation

#define BC_ESCAPE_VERBOSE   !defined(NDEBUG)

Definition at line 47 of file bytecode_escape.cpp.

#define dprintf (   x,
  ... 
)    printf(__VA_ARGS__)

Definition at line 66 of file bytecode_escape.cpp.

#define FOR_EACH_BASICBLOCK_WORK_LIST (   lst,
  it 
)    for ((it) = (lst)->first; (it); (it) = (it)->next)

Definition at line 293 of file bytecode_escape.cpp.

Typedef Documentation

Enumeration Type Documentation

Enumerator
OP_STACK_SLOT_TYPE_PARAM 
OP_STACK_SLOT_TYPE_UNKNOWN 

Definition at line 70 of file bytecode_escape.cpp.

Enumerator
VALUE_CATEGORY_1 
VALUE_CATEGORY_2 

Definition at line 322 of file bytecode_escape.cpp.

Function Documentation

void basicblock_work_list_init ( basicblock_work_list_t lst)

Definition at line 288 of file bytecode_escape.cpp.

void basicblock_work_list_insert ( basicblock_work_list_t lst,
s4  bytecode_index 
)

Definition at line 296 of file bytecode_escape.cpp.

op_stack_slot_t bc_escape_analysis_address_local ( bc_escape_analysis_t be,
s4  local 
)

Definition at line 636 of file bytecode_escape.cpp.

static void bc_escape_analysis_adjust_invoke_parameters ( bc_escape_analysis_t be,
methodinfo mi 
)
static

Definition at line 681 of file bytecode_escape.cpp.

static void bc_escape_analysis_adjust_return_value ( bc_escape_analysis_t be)
static

Definition at line 1713 of file bytecode_escape.cpp.

static void bc_escape_analysis_adjust_state ( bc_escape_analysis_t be,
op_stack_slot_t  adr_param,
escape_state_t  escape_state 
)
static

Definition at line 577 of file bytecode_escape.cpp.

static void bc_escape_analysis_analyze ( bc_escape_analysis_t be)
static

Definition at line 1739 of file bytecode_escape.cpp.

static void bc_escape_analysis_branch_target ( bc_escape_analysis_t be,
s4  branch_target 
)
static

Definition at line 573 of file bytecode_escape.cpp.

static void bc_escape_analysis_dirty ( bc_escape_analysis_t be,
s4  local 
)
static

Definition at line 606 of file bytecode_escape.cpp.

static void bc_escape_analysis_dirty_2 ( bc_escape_analysis_t be,
s4  local 
)
static

Definition at line 617 of file bytecode_escape.cpp.

static void bc_escape_analysis_escape_invoke_parameters ( bc_escape_analysis_t be,
methoddesc md 
)
static

Definition at line 741 of file bytecode_escape.cpp.

static void bc_escape_analysis_init ( bc_escape_analysis_t be,
methodinfo m,
bool  verbose,
int  depth 
)
static

Definition at line 493 of file bytecode_escape.cpp.

static void bc_escape_analysis_parse_invoke ( bc_escape_analysis_t be,
jcode_t jc 
)
static

Definition at line 753 of file bytecode_escape.cpp.

static void bc_escape_analysis_parse_lookupswitch ( bc_escape_analysis_t be,
jcode_t jc 
)
static

Definition at line 863 of file bytecode_escape.cpp.

static void bc_escape_analysis_parse_tableswitch ( bc_escape_analysis_t be,
jcode_t jc 
)
static

Definition at line 837 of file bytecode_escape.cpp.

void bc_escape_analysis_perform ( methodinfo m)

Definition at line 1865 of file bytecode_escape.cpp.

static void bc_escape_analysis_perform_intern ( methodinfo m,
int  depth 
)
static

Definition at line 1787 of file bytecode_escape.cpp.

static void bc_escape_analysis_process_basicblock ( bc_escape_analysis_t be,
jcode_t jc 
)
static

Definition at line 898 of file bytecode_escape.cpp.

static void bc_escape_analysis_push_return_value ( bc_escape_analysis_t be,
methoddesc md 
)
static

Definition at line 662 of file bytecode_escape.cpp.

static void bc_escape_analysis_returned ( bc_escape_analysis_t be,
op_stack_slot_t  value 
)
static

Definition at line 622 of file bytecode_escape.cpp.

value_category_t bc_escape_analysis_value_category ( bc_escape_analysis_t be,
s4  index 
)

Definition at line 644 of file bytecode_escape.cpp.

static bool bit_vector_get ( const bit_vector_t bv,
s4  bit 
)
static

Definition at line 271 of file bytecode_escape.cpp.

static void bit_vector_init ( bit_vector_t bv,
s4  size 
)
static

Definition at line 257 of file bytecode_escape.cpp.

static void bit_vector_set ( bit_vector_t bv,
s4  bit 
)
static

Definition at line 266 of file bytecode_escape.cpp.

static s4 bit_vector_size ( const bit_vector_t bv)
static

Definition at line 262 of file bytecode_escape.cpp.

static void jcode_align_bytecode_index ( jcode_t jc,
s4  align 
)
static

Definition at line 373 of file bytecode_escape.cpp.

static bool jcode_end ( const jcode_t jc)
static

Definition at line 357 of file bytecode_escape.cpp.

static void jcode_forward_instruction_relative ( jcode_t jc,
s4  n 
)
static

Definition at line 382 of file bytecode_escape.cpp.

static s4 jcode_get_branch_target ( jcode_t jc)
static

Definition at line 447 of file bytecode_escape.cpp.

static s4 jcode_get_branch_target_wide ( jcode_t jc)
static

Definition at line 452 of file bytecode_escape.cpp.

static ByteCode jcode_get_bytecode ( jcode_t jc)
static

Definition at line 410 of file bytecode_escape.cpp.

static s4 jcode_get_fall_through_target ( jcode_t jc)
static

Definition at line 457 of file bytecode_escape.cpp.

static s4 jcode_get_index ( const jcode_t jc)
static

Definition at line 386 of file bytecode_escape.cpp.

static s4 jcode_get_instruction_length ( const jcode_t jc)
static

Definition at line 369 of file bytecode_escape.cpp.

static s2 jcode_get_s2 ( jcode_t jc)
static

Definition at line 414 of file bytecode_escape.cpp.

static s4 jcode_get_s4 ( jcode_t jc)
static

Definition at line 436 of file bytecode_escape.cpp.

static u1 jcode_get_u1 ( jcode_t jc)
static

Definition at line 399 of file bytecode_escape.cpp.

static u2 jcode_get_u2 ( jcode_t jc)
static

Definition at line 425 of file bytecode_escape.cpp.

static void jcode_init ( jcode_t jc,
u1 start,
s4  length,
s4  offset,
bool *  perror_flag 
)
static

Definition at line 338 of file bytecode_escape.cpp.

static void jcode_move_to_index ( jcode_t jc,
s4  index 
)
static

Definition at line 353 of file bytecode_escape.cpp.

static void jcode_record_instruction_start ( jcode_t jc)
static

Definition at line 361 of file bytecode_escape.cpp.

static void jcode_rewind_instruction ( jcode_t jc)
static

Definition at line 365 of file bytecode_escape.cpp.

static void jcode_set_error ( jcode_t jc)
static

Definition at line 346 of file bytecode_escape.cpp.

bool jcode_test_has_bytes ( jcode_t jc,
s4  n 
)

Definition at line 390 of file bytecode_escape.cpp.

static s4 op_stack_element_count ( const op_stack_t stack)
static

Definition at line 246 of file bytecode_escape.cpp.

static op_stack_slot_t op_stack_get ( op_stack_t stack,
int  offset 
)
static

Definition at line 204 of file bytecode_escape.cpp.

static void op_stack_init ( op_stack_t stack,
unsigned  max,
bool *  perror_flag 
)
static

Definition at line 132 of file bytecode_escape.cpp.

static bool op_stack_is_empty ( const op_stack_t stack)
static

Definition at line 242 of file bytecode_escape.cpp.

static op_stack_slot_t op_stack_pop ( op_stack_t stack)
static

Definition at line 184 of file bytecode_escape.cpp.

static void op_stack_print ( const op_stack_t stack,
FILE *  f 
)
static

Definition at line 222 of file bytecode_escape.cpp.

static void op_stack_push ( op_stack_t stack,
op_stack_slot_t  element 
)
static

Definition at line 197 of file bytecode_escape.cpp.

static void op_stack_push_unknown ( op_stack_t stack)
inlinestatic

Definition at line 218 of file bytecode_escape.cpp.

static void op_stack_reset ( op_stack_t stack)
static

Definition at line 169 of file bytecode_escape.cpp.

static void op_stack_set ( op_stack_t stack,
int  offset,
op_stack_slot_t  value 
)
static

Definition at line 212 of file bytecode_escape.cpp.

static void op_stack_set_error ( op_stack_t stack)
static

Definition at line 150 of file bytecode_escape.cpp.

static op_stack_slot_t op_stack_slot_create_param ( s4  index)
inlinestatic

Definition at line 85 of file bytecode_escape.cpp.

static bool op_stack_slot_is_param ( const op_stack_slot_t  slot)
inlinestatic

Definition at line 96 of file bytecode_escape.cpp.

static bool op_stack_slot_is_unknown ( const op_stack_slot_t  slot)
inlinestatic

Definition at line 92 of file bytecode_escape.cpp.

static bool op_stack_test_position ( op_stack_t stack,
op_stack_slot_t pos 
)
static

Definition at line 157 of file bytecode_escape.cpp.

Variable Documentation

const op_stack_slot_t OP_STACK_SLOT_UNKNOWN
Initial value:

Definition at line 80 of file bytecode_escape.cpp.