typedef struct MonoAotStats {
int ccount, mcount, lmfcount, abscount, gcount, ocount, genericcount;
- int code_size, info_size, ex_info_size, unwind_info_size, got_size, class_info_size, got_info_size;
+ int code_size, info_size, ex_info_size, unwind_info_size, got_size, class_info_size, got_info_size, plt_size;
int methods_without_got_slots, direct_calls, all_calls, llvm_count;
int got_slots, offsets_size;
int got_slot_types [MONO_PATCH_INFO_NONE];
emit_symbol_diff (acfg, acfg->got_symbol, ".", ((acfg->plt_got_offset_base + index) * sizeof (gpointer)) -4);
/* Used by mono_aot_get_plt_info_offset */
emit_int32 (acfg, acfg->plt_got_info_offsets [index]);
+ acfg->stats.plt_size += 10;
#elif defined(__native_client_codegen__)
guint8 buf [256];
guint8 *buf_aligned = ALIGN_TO(buf, kNaClAlignment);
mono_compile_assembly (MonoAssembly *ass, guint32 opts, const char *aot_options)
{
MonoImage *image = ass->image;
- int i, res;
+ int i, res, all_sizes;
MonoAotCompile *acfg;
char *outfile_name, *tmp_outfile_name, *p;
char llvm_stats_msg [256];
sprintf (llvm_stats_msg, ", LLVM: %d (%d%%)", acfg->stats.llvm_count, acfg->stats.mcount ? (acfg->stats.llvm_count * 100) / acfg->stats.mcount : 100);
else
strcpy (llvm_stats_msg, "");
- printf ("Code: %d Info: %d Ex Info: %d Unwind Info: %d Class Info: %d PLT: %d GOT Info: %d GOT: %d Offsets: %d\n", acfg->stats.code_size, acfg->stats.info_size, acfg->stats.ex_info_size, acfg->stats.unwind_info_size, acfg->stats.class_info_size, acfg->plt_offset, acfg->stats.got_info_size, (int)(acfg->got_offset * sizeof (gpointer)), acfg->stats.offsets_size);
+
+ all_sizes = acfg->stats.code_size + acfg->stats.info_size + acfg->stats.ex_info_size + acfg->stats.unwind_info_size + acfg->stats.class_info_size + acfg->stats.got_info_size + acfg->stats.offsets_size + acfg->stats.plt_size;
+
+ printf ("Code: %d(%d%%) Info: %d(%d%%) Ex Info: %d(%d%%) Unwind Info: %d(%d%%) Class Info: %d(%d%%) PLT: %d(%d%%) GOT Info: %d(%d%%) Offsets: %d(%d%%) GOT: %d\n",
+ acfg->stats.code_size, acfg->stats.code_size * 100 / all_sizes,
+ acfg->stats.info_size, acfg->stats.info_size * 100 / all_sizes,
+ acfg->stats.ex_info_size, acfg->stats.ex_info_size * 100 / all_sizes,
+ acfg->stats.unwind_info_size, acfg->stats.unwind_info_size * 100 / all_sizes,
+ acfg->stats.class_info_size, acfg->stats.class_info_size * 100 / all_sizes,
+ acfg->stats.plt_size ? acfg->stats.plt_size : acfg->plt_offset, acfg->stats.plt_size ? acfg->stats.plt_size * 100 / all_sizes : 0,
+ acfg->stats.got_info_size, acfg->stats.got_info_size * 100 / all_sizes,
+ acfg->stats.offsets_size, acfg->stats.offsets_size * 100 / all_sizes,
+ (int)(acfg->got_offset * sizeof (gpointer)));
printf ("Compiled: %d/%d (%d%%)%s, No GOT slots: %d (%d%%), Direct calls: %d (%d%%)\n",
acfg->stats.ccount, acfg->stats.mcount, acfg->stats.mcount ? (acfg->stats.ccount * 100) / acfg->stats.mcount : 100,
llvm_stats_msg,