Revision 986a2998 target-sparc/gdbstub.c
b/target-sparc/gdbstub.c | ||
---|---|---|
19 | 19 |
*/ |
20 | 20 |
|
21 | 21 |
#ifdef TARGET_ABI32 |
22 |
#define GET_REGA(val) GET_REG32(val)
|
|
22 |
#define gdb_get_rega(buf, val) gdb_get_reg32(buf, val)
|
|
23 | 23 |
#else |
24 |
#define GET_REGA(val) GET_REGL(val)
|
|
24 |
#define gdb_get_rega(buf, val) gdb_get_regl(buf, val)
|
|
25 | 25 |
#endif |
26 | 26 |
|
27 | 27 |
static int cpu_gdb_read_register(CPUSPARCState *env, uint8_t *mem_buf, int n) |
28 | 28 |
{ |
29 | 29 |
if (n < 8) { |
30 | 30 |
/* g0..g7 */ |
31 |
GET_REGA(env->gregs[n]);
|
|
31 |
return gdb_get_rega(mem_buf, env->gregs[n]);
|
|
32 | 32 |
} |
33 | 33 |
if (n < 32) { |
34 | 34 |
/* register window */ |
35 |
GET_REGA(env->regwptr[n - 8]);
|
|
35 |
return gdb_get_rega(mem_buf, env->regwptr[n - 8]);
|
|
36 | 36 |
} |
37 | 37 |
#if defined(TARGET_ABI32) || !defined(TARGET_SPARC64) |
38 | 38 |
if (n < 64) { |
39 | 39 |
/* fprs */ |
40 | 40 |
if (n & 1) { |
41 |
GET_REG32(env->fpr[(n - 32) / 2].l.lower);
|
|
41 |
return gdb_get_reg32(mem_buf, env->fpr[(n - 32) / 2].l.lower);
|
|
42 | 42 |
} else { |
43 |
GET_REG32(env->fpr[(n - 32) / 2].l.upper);
|
|
43 |
return gdb_get_reg32(mem_buf, env->fpr[(n - 32) / 2].l.upper);
|
|
44 | 44 |
} |
45 | 45 |
} |
46 | 46 |
/* Y, PSR, WIM, TBR, PC, NPC, FPSR, CPSR */ |
47 | 47 |
switch (n) { |
48 | 48 |
case 64: |
49 |
GET_REGA(env->y);
|
|
49 |
return gdb_get_rega(mem_buf, env->y);
|
|
50 | 50 |
case 65: |
51 |
GET_REGA(cpu_get_psr(env));
|
|
51 |
return gdb_get_rega(mem_buf, cpu_get_psr(env));
|
|
52 | 52 |
case 66: |
53 |
GET_REGA(env->wim);
|
|
53 |
return gdb_get_rega(mem_buf, env->wim);
|
|
54 | 54 |
case 67: |
55 |
GET_REGA(env->tbr);
|
|
55 |
return gdb_get_rega(mem_buf, env->tbr);
|
|
56 | 56 |
case 68: |
57 |
GET_REGA(env->pc);
|
|
57 |
return gdb_get_rega(mem_buf, env->pc);
|
|
58 | 58 |
case 69: |
59 |
GET_REGA(env->npc);
|
|
59 |
return gdb_get_rega(mem_buf, env->npc);
|
|
60 | 60 |
case 70: |
61 |
GET_REGA(env->fsr);
|
|
61 |
return gdb_get_rega(mem_buf, env->fsr);
|
|
62 | 62 |
case 71: |
63 |
GET_REGA(0); /* csr */
|
|
63 |
return gdb_get_rega(mem_buf, 0); /* csr */
|
|
64 | 64 |
default: |
65 |
GET_REGA(0);
|
|
65 |
return gdb_get_rega(mem_buf, 0);
|
|
66 | 66 |
} |
67 | 67 |
#else |
68 | 68 |
if (n < 64) { |
69 | 69 |
/* f0-f31 */ |
70 | 70 |
if (n & 1) { |
71 |
GET_REG32(env->fpr[(n - 32) / 2].l.lower);
|
|
71 |
return gdb_get_reg32(mem_buf, env->fpr[(n - 32) / 2].l.lower);
|
|
72 | 72 |
} else { |
73 |
GET_REG32(env->fpr[(n - 32) / 2].l.upper);
|
|
73 |
return gdb_get_reg32(mem_buf, env->fpr[(n - 32) / 2].l.upper);
|
|
74 | 74 |
} |
75 | 75 |
} |
76 | 76 |
if (n < 80) { |
77 | 77 |
/* f32-f62 (double width, even numbers only) */ |
78 |
GET_REG64(env->fpr[(n - 32) / 2].ll);
|
|
78 |
return gdb_get_reg64(mem_buf, env->fpr[(n - 32) / 2].ll);
|
|
79 | 79 |
} |
80 | 80 |
switch (n) { |
81 | 81 |
case 80: |
82 |
GET_REGL(env->pc);
|
|
82 |
return gdb_get_regl(mem_buf, env->pc);
|
|
83 | 83 |
case 81: |
84 |
GET_REGL(env->npc);
|
|
84 |
return gdb_get_regl(mem_buf, env->npc);
|
|
85 | 85 |
case 82: |
86 |
GET_REGL((cpu_get_ccr(env) << 32) |
|
|
87 |
((env->asi & 0xff) << 24) | |
|
88 |
((env->pstate & 0xfff) << 8) | |
|
89 |
cpu_get_cwp64(env)); |
|
86 |
return gdb_get_regl(mem_buf, (cpu_get_ccr(env) << 32) |
|
|
87 |
((env->asi & 0xff) << 24) |
|
|
88 |
((env->pstate & 0xfff) << 8) |
|
|
89 |
cpu_get_cwp64(env));
|
|
90 | 90 |
case 83: |
91 |
GET_REGL(env->fsr);
|
|
91 |
return gdb_get_regl(mem_buf, env->fsr);
|
|
92 | 92 |
case 84: |
93 |
GET_REGL(env->fprs);
|
|
93 |
return gdb_get_regl(mem_buf, env->fprs);
|
|
94 | 94 |
case 85: |
95 |
GET_REGL(env->y);
|
|
95 |
return gdb_get_regl(mem_buf, env->y);
|
|
96 | 96 |
} |
97 | 97 |
#endif |
98 | 98 |
return 0; |
Also available in: Unified diff