Revision 7c5a90dd gdbstub.c

b/gdbstub.c
1343 1343
}
1344 1344
#elif defined (TARGET_ALPHA)
1345 1345

  
1346
#define NUM_CORE_REGS 65
1346
#define NUM_CORE_REGS 67
1347 1347

  
1348 1348
static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
1349 1349
{
1350
    if (n < 31) {
1351
       GET_REGL(env->ir[n]);
1352
    }
1353
    else if (n == 31) {
1354
       GET_REGL(0);
1355
    }
1356
    else if (n<63) {
1357
       uint64_t val;
1350
    uint64_t val;
1351
    CPU_DoubleU d;
1358 1352

  
1359
       val = *((uint64_t *)&env->fir[n-32]);
1360
       GET_REGL(val);
1361
    }
1362
    else if (n==63) {
1363
       GET_REGL(env->fpcr);
1364
    }
1365
    else if (n==64) {
1366
       GET_REGL(env->pc);
1367
    }
1368
    else {
1369
       GET_REGL(0);
1353
    switch (n) {
1354
    case 0 ... 30:
1355
        val = env->ir[n];
1356
        break;
1357
    case 32 ... 62:
1358
        d.d = env->fir[n - 32];
1359
        val = d.ll;
1360
        break;
1361
    case 63:
1362
        val = cpu_alpha_load_fpcr(env);
1363
        break;
1364
    case 64:
1365
        val = env->pc;
1366
        break;
1367
    case 66:
1368
        val = env->unique;
1369
        break;
1370
    case 31:
1371
    case 65:
1372
        /* 31 really is the zero register; 65 is unassigned in the
1373
           gdb protocol, but is still required to occupy 8 bytes. */
1374
        val = 0;
1375
        break;
1376
    default:
1377
        return 0;
1370 1378
    }
1371

  
1372
    return 0;
1379
    GET_REGL(val);
1373 1380
}
1374 1381

  
1375 1382
static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
1376 1383
{
1377
    target_ulong tmp;
1378
    tmp = ldtul_p(mem_buf);
1384
    target_ulong tmp = ldtul_p(mem_buf);
1385
    CPU_DoubleU d;
1379 1386

  
1380
    if (n < 31) {
1387
    switch (n) {
1388
    case 0 ... 30:
1381 1389
        env->ir[n] = tmp;
1390
        break;
1391
    case 32 ... 62:
1392
        d.ll = tmp;
1393
        env->fir[n - 32] = d.d;
1394
        break;
1395
    case 63:
1396
        cpu_alpha_store_fpcr(env, tmp);
1397
        break;
1398
    case 64:
1399
        env->pc = tmp;
1400
        break;
1401
    case 66:
1402
        env->unique = tmp;
1403
        break;
1404
    case 31:
1405
    case 65:
1406
        /* 31 really is the zero register; 65 is unassigned in the
1407
           gdb protocol, but is still required to occupy 8 bytes. */
1408
        break;
1409
    default:
1410
        return 0;
1382 1411
    }
1383

  
1384
    if (n > 31 && n < 63) {
1385
        env->fir[n - 32] = ldfl_p(mem_buf);
1386
    }
1387

  
1388
    if (n == 64 ) {
1389
       env->pc=tmp;
1390
    }
1391

  
1392 1412
    return 8;
1393 1413
}
1394 1414
#elif defined (TARGET_S390X)

Also available in: Unified diff