@ -1528,68 +1528,75 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
if ( qemu_loglevel_mask ( CPU_LOG_TB_OUT_ASM ) & &
qemu_log_in_addr_range ( tb - > pc ) ) {
FILE * logfile = qemu_log_trylock ( ) ;
int code_size , data_size ;
const tcg_target_ulong * rx_data_gen_ptr ;
size_t chunk_start ;
int insn = 0 ;
if ( tcg_ctx - > data_gen_ptr ) {
rx_data_gen_ptr = tcg_splitwx_to_rx ( tcg_ctx - > data_gen_ptr ) ;
code_size = ( const void * ) rx_data_gen_ptr - tb - > tc . ptr ;
data_size = gen_code_size - code_size ;
} else {
rx_data_gen_ptr = 0 ;
code_size = gen_code_size ;
data_size = 0 ;
}
if ( logfile ) {
int code_size , data_size ;
const tcg_target_ulong * rx_data_gen_ptr ;
size_t chunk_start ;
int insn = 0 ;
if ( tcg_ctx - > data_gen_ptr ) {
rx_data_gen_ptr = tcg_splitwx_to_rx ( tcg_ctx - > data_gen_ptr ) ;
code_size = ( const void * ) rx_data_gen_ptr - tb - > tc . ptr ;
data_size = gen_code_size - code_size ;
} else {
rx_data_gen_ptr = 0 ;
code_size = gen_code_size ;
data_size = 0 ;
}
/* Dump header and the first instruction */
qemu_log ( " OUT: [size=%d] \n " , gen_code_size ) ;
qemu_log ( " -- guest addr 0x " TARGET_FMT_lx " + tb prologue \n " ,
tcg_ctx - > gen_insn_data [ insn ] [ 0 ] ) ;
chunk_start = tcg_ctx - > gen_insn_end_off [ insn ] ;
log_disas ( tb - > tc . ptr , chunk_start ) ;
/* Dump header and the first instruction */
fprintf ( logfile , " OUT: [size=%d] \n " , gen_code_size ) ;
fprintf ( logfile ,
" -- guest addr 0x " TARGET_FMT_lx " + tb prologue \n " ,
tcg_ctx - > gen_insn_data [ insn ] [ 0 ] ) ;
chunk_start = tcg_ctx - > gen_insn_end_off [ insn ] ;
disas ( logfile , tb - > tc . ptr , chunk_start ) ;
/*
* Dump each instruction chunk , wrapping up empty chunks into
* the next instruction . The whole array is offset so the
* first entry is the beginning of the 2 nd instruction .
*/
while ( insn < tb - > icount ) {
size_t chunk_end = tcg_ctx - > gen_insn_end_off [ insn ] ;
if ( chunk_end > chunk_start ) {
qemu_log ( " -- guest addr 0x " TARGET_FMT_lx " \n " ,
tcg_ctx - > gen_insn_data [ insn ] [ 0 ] ) ;
log_disas ( tb - > tc . ptr + chunk_start , chunk_end - chunk_start ) ;
chunk_start = chunk_end ;
/*
* Dump each instruction chunk , wrapping up empty chunks into
* the next instruction . The whole array is offset so the
* first entry is the beginning of the 2 nd instruction .
*/
while ( insn < tb - > icount ) {
size_t chunk_end = tcg_ctx - > gen_insn_end_off [ insn ] ;
if ( chunk_end > chunk_start ) {
fprintf ( logfile , " -- guest addr 0x " TARGET_FMT_lx " \n " ,
tcg_ctx - > gen_insn_data [ insn ] [ 0 ] ) ;
disas ( logfile , tb - > tc . ptr + chunk_start ,
chunk_end - chunk_start ) ;
chunk_start = chunk_end ;
}
insn + + ;
}
insn + + ;
}
if ( chunk_start < code_size ) {
qemu_log ( " -- tb slow paths + alignment \n " ) ;
log_disas ( tb - > tc . ptr + chunk_start , code_size - chunk_start ) ;
}
if ( chunk_start < code_size ) {
fprintf ( logfile , " -- tb slow paths + alignment \n " ) ;
disas ( logfile , tb - > tc . ptr + chunk_start ,
code_size - chunk_start ) ;
}
/* Finally dump any data we may have after the block */
if ( data_size ) {
int i ;
qemu_log ( " data: [size=%d] \n " , data_size ) ;
for ( i = 0 ; i < data_size / sizeof ( tcg_target_ulong ) ; i + + ) {
if ( sizeof ( tcg_target_ulong ) = = 8 ) {
qemu_log ( " 0x%08 " PRIxPTR " : .quad 0x%016 " TCG_PRIlx " \n " ,
( uintptr_t ) & rx_data_gen_ptr [ i ] , rx_data_gen_ptr [ i ] ) ;
} else if ( sizeof ( tcg_target_ulong ) = = 4 ) {
qemu_log ( " 0x%08 " PRIxPTR " : .long 0x%08 " TCG_PRIlx " \n " ,
( uintptr_t ) & rx_data_gen_ptr [ i ] , rx_data_gen_ptr [ i ] ) ;
} else {
qemu_build_not_reached ( ) ;
/* Finally dump any data we may have after the block */
if ( data_size ) {
int i ;
fprintf ( logfile , " data: [size=%d] \n " , data_size ) ;
for ( i = 0 ; i < data_size / sizeof ( tcg_target_ulong ) ; i + + ) {
if ( sizeof ( tcg_target_ulong ) = = 8 ) {
fprintf ( logfile ,
" 0x%08 " PRIxPTR " : .quad 0x%016 " TCG_PRIlx " \n " ,
( uintptr_t ) & rx_data_gen_ptr [ i ] , rx_data_gen_ptr [ i ] ) ;
} else if ( sizeof ( tcg_target_ulong ) = = 4 ) {
fprintf ( logfile ,
" 0x%08 " PRIxPTR " : .long 0x%08 " TCG_PRIlx " \n " ,
( uintptr_t ) & rx_data_gen_ptr [ i ] , rx_data_gen_ptr [ i ] ) ;
} else {
qemu_build_not_reached ( ) ;
}
}
}
fprintf ( logfile , " \n " ) ;
qemu_log_flush ( ) ;
qemu_log_unlock ( logfile ) ;
}
qemu_log ( " \n " ) ;
qemu_log_flush ( ) ;
qemu_log_unlock ( logfile ) ;
}
# endif