@@ -594,6 +594,34 @@ static int parse_args(int argc, char **argv)
594594 return optind ;
595595}
596596
597+
598+ static void save_memory_areas (void * env , struct image_info * info ){
599+ FILE * f = fopen ("/tmp/symqemu_addresses.json" , "w" );
600+ if (f == NULL ) {
601+ printf ("Error opening addresses file\n" );
602+ return ;
603+ }
604+
605+ const char * format = "{\"name\":\"%s\",\"address\":%lu},\n" ;
606+ fprintf (f , "[\n" );
607+
608+ for (TCGTemp * temp = tcg_ctx -> temps ; temp != tcg_ctx -> temps + tcg_ctx -> nb_globals ; temp ++ ){
609+ if (temp -> mem_allocated ) {
610+ // we do not support memory allocated temps whose base is not env
611+ tcg_debug_assert (!temp -> indirect_reg );
612+ void * temp_mem_address = env + temp -> mem_offset ;
613+ fprintf (f , format , temp -> name , temp_mem_address );
614+ }
615+ }
616+ fprintf (f , format , "xmm_t0" , env + offsetof(CPUX86State , xmm_t0 ));
617+
618+ fprintf (f , format , "stack" , info -> start_stack );
619+
620+ fseek (f , -2 , SEEK_CUR );
621+ fprintf (f , "\n]" );
622+ fclose (f );
623+ }
624+
597625int main (int argc , char * * argv , char * * envp )
598626{
599627 struct target_pt_regs regs1 , * regs = & regs1 ;
@@ -840,6 +868,9 @@ int main(int argc, char **argv, char **envp)
840868 }
841869 gdb_handlesig (cpu , 0 );
842870 }
871+
872+ save_memory_areas ((void * ) env , info );
873+
843874 cpu_loop (env );
844875 /* never exits */
845876 return 0 ;
0 commit comments