47 #define LOCALREFTABLE (THREADOBJECT->_localref_table)
52 # define DEBUGLOCALREF(message, index) \
54 if (opt_DebugLocalReferences) { \
55 localref_table *dlrt = LOCALREFTABLE; \
57 log_print("[local reference %-12s: lrt=%016p frame=%d capacity=%d used=%d hwm=%d", message, dlrt, dlrt->localframes, dlrt->capacity, dlrt->used, dlrt->hwm); \
59 log_print(" localref=%p object=%p", &(dlrt->refs[index]), dlrt->refs[index]); \
65 # define DEBUGLOCALREF(message, index)
89 #if !defined(ENABLE_GC_BOEHM)
116 #if !defined(ENABLE_GC_BOEHM)
121 assert(lrt->
prev == NULL);
126 #if !defined(ENABLE_GC_BOEHM)
203 int32_t additionalrefs;
209 assert(capacity > 0);
219 #if !defined(ENABLE_GC_BOEHM)
259 #if !defined(ENABLE_GC_BOEHM)
260 int32_t additionalrefs;
274 if (localframes == 1)
279 for (; localframes > 1; localframes--) {
288 #if !defined(ENABLE_GC_BOEHM)
355 log_println(
"localref_add: WARNING: unable to add localref for %p", o);
365 #if defined(ENABLE_HANDLES)
394 assert(localref != NULL);
401 for (; localframes > 0; localframes--) {
405 for (i = 0; i < lrt->
hwm; i++) {
406 #if defined(ENABLE_HANDLES)
428 log_println(
"localref_del: WARNING: unable to find localref %p", localref);
443 #if defined(ENABLE_HANDLES)
467 #if !defined(ENABLE_HANDLES)
495 #if defined(ENABLE_HANDLES)
523 ret.
a = (
void *) h->heap_object;
526 #if !defined(NDEBUG) && 0
544 # define LOCALREF_DUMP_REFS_PER_LINE 4
554 log_println(
"--------- Local Reference Tables Dump ---------");
556 while (lrt != NULL) {
559 if (lrt->
used != 0) {
562 for (i = dlrt.
firstfree; i >= 0; i = j) {
570 for (i = 0; i < dlrt.
hwm; i++) {
571 if (dlrt.
refs[i].
ptr != NULL) {
601 int32_t lrt_uncleared;
615 for (; localframes > 0; localframes--) {
616 lrt_used += lrt->
used;
618 lrt_uncleared += lrt->
hwm;
625 if (lrt_uncleared != lrt_used) {
627 vm_abort(
"localref_check_uncleared: (uncleared=%d) != (used=%d)", lrt_uncleared, lrt_used);
630 if (lrt_uncleared <= 1)
bool localref_table_init(void)
void localref_del(java_handle_t *localref)
#define GCMNEW(type, num)
imm_union argument_jitreturn_load(methoddesc *md, uint64_t *return_regs)
void localref_native_exit(methodinfo *m, uint64_t *return_regs)
imm_union argument_jitarray_load(methoddesc *md, int32_t index, uint64_t *arg_regs, uint64_t *stack)
void localref_table_remove()
void localref_native_enter(methodinfo *m, uint64_t *argument_regs, uint64_t *argument_stack)
void argument_jitarray_store(methoddesc *md, int32_t index, uint64_t *arg_regs, uint64_t *stack, imm_union param)
void log_println(const char *text,...)
#define TRACESUBSYSTEMINITIALIZATION(text)
void vm_abort(const char *text,...)
bool localref_frame_push(int32_t capacity)
void log_print(const char *text,...)
java_handle_t * localref_add(java_object_t *o)
static bool localref_check_uncleared()
bool localref_table_destroy(void)
void localref_frame_pop_all(void)
void argument_jitreturn_store(methoddesc *md, uint64_t *return_regs, imm_union ret)
#define DEBUGLOCALREF(message, index)
#define LOCALREFTABLE_CAPACITY
void localref_table_add(localref_table *lrt)
union localref_table::@1 refs[LOCALREFTABLE_CAPACITY]
#define MFREE(ptr, type, num)
#define LOCALREF_DUMP_REFS_PER_LINE