Revision e18231a3

b/exec-all.h
331 331
    pd = env1->tlb_table[mmu_idx][page_index].addr_code & ~TARGET_PAGE_MASK;
332 332
    if (pd > IO_MEM_ROM && !(pd & IO_MEM_ROMD)) {
333 333
#if defined(TARGET_SPARC) || defined(TARGET_MIPS)
334
        do_unassigned_access(addr, 0, 1, 0);
334
        do_unassigned_access(addr, 0, 1, 0, 4);
335 335
#else
336 336
        cpu_abort(env1, "Trying to execute code outside RAM or ROM at 0x" TARGET_FMT_lx "\n", addr);
337 337
#endif
b/exec.c
2302 2302
#ifdef DEBUG_UNASSIGNED
2303 2303
    printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
2304 2304
#endif
2305
#ifdef TARGET_SPARC
2306
    do_unassigned_access(addr, 0, 0, 0);
2307
#elif defined(TARGET_CRIS)
2308
    do_unassigned_access(addr, 0, 0, 0);
2305
#if defined(TARGET_SPARC) || defined(TARGET_CRIS)
2306
    do_unassigned_access(addr, 0, 0, 0, 1);
2307
#endif
2308
    return 0;
2309
}
2310

  
2311
static uint32_t unassigned_mem_readw(void *opaque, target_phys_addr_t addr)
2312
{
2313
#ifdef DEBUG_UNASSIGNED
2314
    printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
2315
#endif
2316
#if defined(TARGET_SPARC) || defined(TARGET_CRIS)
2317
    do_unassigned_access(addr, 0, 0, 0, 2);
2318
#endif
2319
    return 0;
2320
}
2321

  
2322
static uint32_t unassigned_mem_readl(void *opaque, target_phys_addr_t addr)
2323
{
2324
#ifdef DEBUG_UNASSIGNED
2325
    printf("Unassigned mem read " TARGET_FMT_plx "\n", addr);
2326
#endif
2327
#if defined(TARGET_SPARC) || defined(TARGET_CRIS)
2328
    do_unassigned_access(addr, 0, 0, 0, 4);
2309 2329
#endif
2310 2330
    return 0;
2311 2331
}
......
2315 2335
#ifdef DEBUG_UNASSIGNED
2316 2336
    printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);
2317 2337
#endif
2318
#ifdef TARGET_SPARC
2319
    do_unassigned_access(addr, 1, 0, 0);
2320
#elif defined(TARGET_CRIS)
2321
    do_unassigned_access(addr, 1, 0, 0);
2338
#if defined(TARGET_SPARC) || defined(TARGET_CRIS)
2339
    do_unassigned_access(addr, 1, 0, 0, 1);
2340
#endif
2341
}
2342

  
2343
static void unassigned_mem_writew(void *opaque, target_phys_addr_t addr, uint32_t val)
2344
{
2345
#ifdef DEBUG_UNASSIGNED
2346
    printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);
2347
#endif
2348
#if defined(TARGET_SPARC) || defined(TARGET_CRIS)
2349
    do_unassigned_access(addr, 1, 0, 0, 2);
2350
#endif
2351
}
2352

  
2353
static void unassigned_mem_writel(void *opaque, target_phys_addr_t addr, uint32_t val)
2354
{
2355
#ifdef DEBUG_UNASSIGNED
2356
    printf("Unassigned mem write " TARGET_FMT_plx " = 0x%x\n", addr, val);
2357
#endif
2358
#if defined(TARGET_SPARC) || defined(TARGET_CRIS)
2359
    do_unassigned_access(addr, 1, 0, 0, 4);
2322 2360
#endif
2323 2361
}
2324 2362

  
2325 2363
static CPUReadMemoryFunc *unassigned_mem_read[3] = {
2326 2364
    unassigned_mem_readb,
2327
    unassigned_mem_readb,
2328
    unassigned_mem_readb,
2365
    unassigned_mem_readw,
2366
    unassigned_mem_readl,
2329 2367
};
2330 2368

  
2331 2369
static CPUWriteMemoryFunc *unassigned_mem_write[3] = {
2332 2370
    unassigned_mem_writeb,
2333
    unassigned_mem_writeb,
2334
    unassigned_mem_writeb,
2371
    unassigned_mem_writew,
2372
    unassigned_mem_writel,
2335 2373
};
2336 2374

  
2337 2375
static void notdirty_mem_writeb(void *opaque, target_phys_addr_t ram_addr,
b/target-cris/cpu.h
168 168
int cpu_cris_signal_handler(int host_signum, void *pinfo,
169 169
                           void *puc);
170 170
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
171
                          int is_asi);
171
                          int is_asi, int size);
172 172

  
173 173
enum {
174 174
    CC_OP_DYNAMIC, /* Use env->cc_op  */
b/target-cris/op_helper.c
237 237
}
238 238

  
239 239
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
240
                          int is_asi)
240
                          int is_asi, int size)
241 241
{
242
	D(printf("%s addr=%x w=%d ex=%d asi=%d\n", 
243
		__func__, addr, is_write, is_exec, is_asi));
242
	D(printf("%s addr=%x w=%d ex=%d asi=%d, size=%d\n",
243
		__func__, addr, is_write, is_exec, is_asi, size));
244 244
}
245 245

  
246 246
static void evaluate_flags_writeback(uint32_t flags)
b/target-mips/cpu.h
470 470
void mips_cpu_list (FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...));
471 471

  
472 472
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
473
                          int unused);
473
                          int unused, int size);
474 474

  
475 475
#define CPUState CPUMIPSState
476 476
#define cpu_init cpu_mips_init
b/target-mips/op_helper.c
1911 1911
}
1912 1912

  
1913 1913
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
1914
                          int unused)
1914
                          int unused, int size)
1915 1915
{
1916 1916
    if (is_exec)
1917 1917
        do_raise_exception(EXCP_IBE);
b/target-sparc/cpu.h
430 430

  
431 431
/* cpu-exec.c */
432 432
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
433
                          int is_asi);
433
                          int is_asi, int size);
434 434
int cpu_sparc_signal_handler(int host_signum, void *pinfo, void *puc);
435 435

  
436 436
#define CPUState CPUSPARCState
b/target-sparc/op_helper.c
950 950
        break;
951 951
    case 8: /* User code access, XXX */
952 952
    default:
953
        do_unassigned_access(addr, 0, 0, asi);
953
        do_unassigned_access(addr, 0, 0, asi, size);
954 954
        ret = 0;
955 955
        break;
956 956
    }
......
1284 1284
    case 8: /* User code access, XXX */
1285 1285
    case 9: /* Supervisor code access, XXX */
1286 1286
    default:
1287
        do_unassigned_access(addr, 1, 0, asi);
1287
        do_unassigned_access(addr, 1, 0, asi, size);
1288 1288
        break;
1289 1289
    }
1290 1290
#ifdef DEBUG_ASI
......
1464 1464
    case 0x8a: // Primary no-fault LE, RO
1465 1465
    case 0x8b: // Secondary no-fault LE, RO
1466 1466
    default:
1467
        do_unassigned_access(addr, 1, 0, 1);
1467
        do_unassigned_access(addr, 1, 0, 1, size);
1468 1468
        return;
1469 1469
    }
1470 1470
}
......
1675 1675
    case 0x5f: // D-MMU demap, WO
1676 1676
    case 0x77: // Interrupt vector, WO
1677 1677
    default:
1678
        do_unassigned_access(addr, 0, 0, 1);
1678
        do_unassigned_access(addr, 0, 0, 1, size);
1679 1679
        ret = 0;
1680 1680
        break;
1681 1681
    }
......
2082 2082
    case 0x8a: // Primary no-fault LE, RO
2083 2083
    case 0x8b: // Secondary no-fault LE, RO
2084 2084
    default:
2085
        do_unassigned_access(addr, 1, 0, 1);
2085
        do_unassigned_access(addr, 1, 0, 1, size);
2086 2086
        return;
2087 2087
    }
2088 2088
}
......
3025 3025

  
3026 3026
#ifndef TARGET_SPARC64
3027 3027
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
3028
                          int is_asi)
3028
                          int is_asi, int size)
3029 3029
{
3030 3030
    CPUState *saved_env;
3031 3031

  
......
3035 3035
    env = cpu_single_env;
3036 3036
#ifdef DEBUG_UNASSIGNED
3037 3037
    if (is_asi)
3038
        printf("Unassigned mem %s access to " TARGET_FMT_plx
3038
        printf("Unassigned mem %s access of %d byte%s to " TARGET_FMT_plx
3039 3039
               " asi 0x%02x from " TARGET_FMT_lx "\n",
3040
               is_exec ? "exec" : is_write ? "write" : "read", addr, is_asi,
3041
               env->pc);
3040
               is_exec ? "exec" : is_write ? "write" : "read", size,
3041
               size == 1 ? "" : "s", addr, is_asi, env->pc);
3042 3042
    else
3043
        printf("Unassigned mem %s access to " TARGET_FMT_plx " from "
3044
               TARGET_FMT_lx "\n",
3045
               is_exec ? "exec" : is_write ? "write" : "read", addr, env->pc);
3043
        printf("Unassigned mem %s access of %d byte%s to " TARGET_FMT_plx
3044
               " from " TARGET_FMT_lx "\n",
3045
               is_exec ? "exec" : is_write ? "write" : "read", size,
3046
               size == 1 ? "" : "s", addr, env->pc);
3046 3047
#endif
3047 3048
    if (env->mmuregs[3]) /* Fault status register */
3048 3049
        env->mmuregs[3] = 1; /* overflow (not read before another fault) */
......
3066 3067
}
3067 3068
#else
3068 3069
void do_unassigned_access(target_phys_addr_t addr, int is_write, int is_exec,
3069
                          int is_asi)
3070
                          int is_asi, int size)
3070 3071
{
3071 3072
#ifdef DEBUG_UNASSIGNED
3072 3073
    CPUState *saved_env;

Also available in: Unified diff