int generateJvmOffsets(GEN_variant gen_variant) { int index = 0; /* It is used to generate JvmOffsetsIndex.h */ int pointer_size = sizeof(void *); int data_model = (pointer_size == 4) ? PR_MODEL_ILP32 : PR_MODEL_LP64; gen_prologue(gen_variant); GEN_VALUE(DATA_MODEL, data_model); GEN_VALUE(POINTER_SIZE, pointer_size); #if defined(TIERED) GEN_VALUE(COMPILER, 3); #elif COMPILER1 GEN_VALUE(COMPILER, 1); #elif COMPILER2 GEN_VALUE(COMPILER, 2); #else GEN_VALUE(COMPILER, 0); #endif // COMPILER1 && COMPILER2 printf("\n"); GEN_OFFS(CollectedHeap, _reserved); GEN_OFFS(MemRegion, _start); GEN_OFFS(MemRegion, _word_size); GEN_SIZE(HeapWord); printf("\n"); GEN_OFFS(VMStructEntry, typeName); GEN_OFFS(VMStructEntry, fieldName); GEN_OFFS(VMStructEntry, address); GEN_SIZE(VMStructEntry); printf("\n"); GEN_VALUE(MAX_METHOD_CODE_SIZE, max_method_code_size); #if defined(sparc) || defined(__sparc) GEN_VALUE(OFFSET_interpreter_frame_method, 2 * pointer_size); /* L2 in saved window */ GEN_VALUE(OFFSET_interpreter_frame_sender_sp, 13 * pointer_size); /* I5 in saved window */ // Fake value for consistency. It is not going to be used. GEN_VALUE(OFFSET_interpreter_frame_bcx_offset, 0xFFFF); #elif defined(i386) || defined(__i386) || defined(__amd64) GEN_VALUE(OFFSET_interpreter_frame_sender_sp, -1 * pointer_size); GEN_VALUE(OFFSET_interpreter_frame_method, -3 * pointer_size); GEN_VALUE(OFFSET_interpreter_frame_bcx_offset, -7 * pointer_size); #endif GEN_OFFS(Klass, _name); GEN_OFFS(constantPoolOopDesc, _pool_holder); printf("\n"); GEN_VALUE(OFFSET_HeapBlockHeader_used, offset_of(HeapBlock::Header, _used)); GEN_OFFS(oopDesc, _metadata); printf("\n"); GEN_VALUE(AccessFlags_NATIVE, JVM_ACC_NATIVE); GEN_VALUE(constMethodOopDesc_has_linenumber_table, constMethodOopDesc::_has_linenumber_table); GEN_OFFS(AccessFlags, _flags); GEN_OFFS(symbolOopDesc, _length); GEN_OFFS(symbolOopDesc, _body); printf("\n"); GEN_OFFS(methodOopDesc, _constMethod); GEN_OFFS(methodOopDesc, _constants); GEN_OFFS(methodOopDesc, _access_flags); printf("\n"); GEN_OFFS(constMethodOopDesc, _flags); GEN_OFFS(constMethodOopDesc, _code_size); GEN_OFFS(constMethodOopDesc, _name_index); GEN_OFFS(constMethodOopDesc, _signature_index); printf("\n"); GEN_OFFS(CodeHeap, _memory); GEN_OFFS(CodeHeap, _segmap); GEN_OFFS(CodeHeap, _log2_segment_size); printf("\n"); GEN_OFFS(VirtualSpace, _low_boundary); GEN_OFFS(VirtualSpace, _high_boundary); GEN_OFFS(VirtualSpace, _low); GEN_OFFS(VirtualSpace, _high); printf("\n"); GEN_OFFS(CodeBlob, _name); GEN_OFFS(CodeBlob, _header_size); GEN_OFFS(CodeBlob, _instructions_offset); GEN_OFFS(CodeBlob, _data_offset); GEN_OFFS(CodeBlob, _oops_offset); GEN_OFFS(CodeBlob, _oops_length); GEN_OFFS(CodeBlob, _frame_size); printf("\n"); GEN_OFFS(nmethod, _method); GEN_OFFS(nmethod, _scopes_data_offset); GEN_OFFS(nmethod, _scopes_pcs_offset); GEN_OFFS(nmethod, _handler_table_offset); GEN_OFFS(nmethod, _deoptimize_offset); GEN_OFFS(nmethod, _orig_pc_offset); GEN_OFFS(PcDesc, _pc_offset); GEN_OFFS(PcDesc, _scope_decode_offset); printf("\n"); GEN_OFFS(NarrowOopStruct, _base); GEN_OFFS(NarrowOopStruct, _shift); printf("\n"); GEN_VALUE(SIZE_HeapBlockHeader, sizeof(HeapBlock::Header)); GEN_SIZE(oopDesc); GEN_SIZE(constantPoolOopDesc); printf("\n"); GEN_SIZE(PcDesc); GEN_SIZE(methodOopDesc); GEN_SIZE(constMethodOopDesc); GEN_SIZE(nmethod); GEN_SIZE(CodeBlob); GEN_SIZE(BufferBlob); GEN_SIZE(SingletonBlob); GEN_SIZE(RuntimeStub); GEN_SIZE(SafepointBlob); gen_epilogue(gen_variant); printf("\n"); fflush(stdout); return 0; }
void newfunc_typed(int storage, char *n, int type) { int idx; SYMBOL *symbol; char an[NAMESIZE]; fexitlab = getlabel(); if ((idx = find_global(n)) > -1) { symbol = &symbol_table[idx]; if (symbol->identity != FUNCTION) multidef(n); } else { /* extern implies global scope */ idx = add_global(n, FUNCTION, CINT, 0, storage == EXTERN ? PUBLIC : storage); symbol = &symbol_table[idx]; } local_table_index = NUMBER_OF_GLOBALS; //locptr = STARTLOC; argstk = 0; // ANSI style argument declaration if (doAnsiArguments()) { if (storage == EXTERN) { need_semicolon(); return; } /* No body .. just a definition */ if (match(";")) return; } else { // K&R style argument declaration while (!match(")")) { if (symname(an)) { if (find_locale(an) > -1) multidef(an); else { /* FIXME: struct */ add_local(an, 0, 0, argstk, AUTO); argstk = argstk + INTSIZE; } } else { error("illegal argument name"); junk(); } blanks(); if (!streq(line + lptr, ")")) { if (!match(",")) error("expected comma"); } if (endst()) break; } if (storage == EXTERN) { need_semicolon(); return; } /* No body .. just a definition */ if (match(";")) return; stkp = 0; argtop = argstk; while (argstk) { if ((type = get_type()) != -1) { notvoid(type); getarg(type); need_semicolon(); } else { error("wrong number args"); break; } } } if (symbol->offset == FUNCTION) multidef(n); symbol->offset = FUNCTION; output_string(n); output_label_terminator(); newline(); gen_prologue(); statement(YES); print_label(fexitlab); output_label_terminator(); newline(); gen_epilogue(); gen_modify_stack(0); gen_ret(); stkp = 0; local_table_index = NUMBER_OF_GLOBALS; //locptr = STARTLOC; }