1.1 --- a/src/sh4/xltcache.c Tue Sep 04 08:32:44 2007 +0000
1.2 +++ b/src/sh4/xltcache.c Wed Sep 12 09:16:47 2007 +0000
1.5 - * $Id: xltcache.c,v 1.2 2007-09-04 08:32:44 nkeynes Exp $
1.6 + * $Id: xltcache.c,v 1.3 2007-09-12 09:16:47 nkeynes Exp $
1.8 * Translation cache management. This part is architecture independent.
1.11 xlat_cache_block_t xlat_old_cache_ptr;
1.12 static void ***xlat_lut;
1.13 static void **xlat_lut2; /* second-tier page info */
1.14 +static gboolean xlat_initialized = FALSE;
1.16 void xlat_cache_init()
1.18 - xlat_new_cache = mmap( NULL, XLAT_NEW_CACHE_SIZE, PROT_EXEC|PROT_READ|PROT_WRITE,
1.19 - MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
1.20 - xlat_temp_cache = mmap( NULL, XLAT_TEMP_CACHE_SIZE, PROT_EXEC|PROT_READ|PROT_WRITE,
1.21 - MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
1.22 - xlat_old_cache = mmap( NULL, XLAT_OLD_CACHE_SIZE, PROT_EXEC|PROT_READ|PROT_WRITE,
1.23 - MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
1.24 - xlat_new_cache_ptr = xlat_new_cache;
1.25 - xlat_temp_cache_ptr = xlat_temp_cache;
1.26 - xlat_old_cache_ptr = xlat_old_cache;
1.27 - xlat_new_create_ptr = xlat_new_cache;
1.29 - xlat_lut = mmap( NULL, XLAT_LUT_PAGES*sizeof(void *), PROT_READ|PROT_WRITE,
1.30 - MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
1.31 - memset( xlat_lut, 0, XLAT_LUT_PAGES*sizeof(void *) );
1.33 + if( !xlat_initialized ) {
1.34 + xlat_initialized = TRUE;
1.35 + xlat_new_cache = mmap( NULL, XLAT_NEW_CACHE_SIZE, PROT_EXEC|PROT_READ|PROT_WRITE,
1.36 + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
1.37 + xlat_temp_cache = mmap( NULL, XLAT_TEMP_CACHE_SIZE, PROT_EXEC|PROT_READ|PROT_WRITE,
1.38 + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
1.39 + xlat_old_cache = mmap( NULL, XLAT_OLD_CACHE_SIZE, PROT_EXEC|PROT_READ|PROT_WRITE,
1.40 + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 );
1.41 + xlat_new_cache_ptr = xlat_new_cache;
1.42 + xlat_temp_cache_ptr = xlat_temp_cache;
1.43 + xlat_old_cache_ptr = xlat_old_cache;
1.44 + xlat_new_create_ptr = xlat_new_cache;
1.46 + xlat_lut = mmap( NULL, XLAT_LUT_PAGES*sizeof(void *), PROT_READ|PROT_WRITE,
1.47 + MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
1.48 + memset( xlat_lut, 0, XLAT_LUT_PAGES*sizeof(void *) );
1.53 @@ -351,3 +354,11 @@
1.54 xlat_check_cache_integrity( xlat_temp_cache, xlat_temp_cache_ptr, XLAT_TEMP_CACHE_SIZE );
1.55 xlat_check_cache_integrity( xlat_old_cache, xlat_old_cache_ptr, XLAT_OLD_CACHE_SIZE );
1.59 +void xlat_disasm_block( FILE *out, void *block )
1.61 + uint32_t buflen = xlat_get_block_size(block);
1.62 + x86_set_symtab( NULL, 0 );
1.63 + x86_disasm_block( out, block, buflen );