Revision 2f937732

b/gdbstub.c
558 558

  
559 559
#elif defined (TARGET_SH4)
560 560

  
561
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
562
/* FIXME: We should use XML for this.  */
561
#include "target-sh4/gdbstub.c"
563 562

  
564
static int cpu_gdb_read_register(CPUSH4State *env, uint8_t *mem_buf, int n)
565
{
566
    switch (n) {
567
    case 0 ... 7:
568
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
569
            GET_REGL(env->gregs[n + 16]);
570
        } else {
571
            GET_REGL(env->gregs[n]);
572
        }
573
    case 8 ... 15:
574
        GET_REGL(env->gregs[n]);
575
    case 16:
576
        GET_REGL(env->pc);
577
    case 17:
578
        GET_REGL(env->pr);
579
    case 18:
580
        GET_REGL(env->gbr);
581
    case 19:
582
        GET_REGL(env->vbr);
583
    case 20:
584
        GET_REGL(env->mach);
585
    case 21:
586
        GET_REGL(env->macl);
587
    case 22:
588
        GET_REGL(env->sr);
589
    case 23:
590
        GET_REGL(env->fpul);
591
    case 24:
592
        GET_REGL(env->fpscr);
593
    case 25 ... 40:
594
        if (env->fpscr & FPSCR_FR) {
595
            stfl_p(mem_buf, env->fregs[n - 9]);
596
        } else {
597
            stfl_p(mem_buf, env->fregs[n - 25]);
598
        }
599
        return 4;
600
    case 41:
601
        GET_REGL(env->ssr);
602
    case 42:
603
        GET_REGL(env->spc);
604
    case 43 ... 50:
605
        GET_REGL(env->gregs[n - 43]);
606
    case 51 ... 58:
607
        GET_REGL(env->gregs[n - (51 - 16)]);
608
    }
609

  
610
    return 0;
611
}
612

  
613
static int cpu_gdb_write_register(CPUSH4State *env, uint8_t *mem_buf, int n)
614
{
615
    switch (n) {
616
    case 0 ... 7:
617
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
618
            env->gregs[n + 16] = ldl_p(mem_buf);
619
        } else {
620
            env->gregs[n] = ldl_p(mem_buf);
621
        }
622
        break;
623
    case 8 ... 15:
624
        env->gregs[n] = ldl_p(mem_buf);
625
        break;
626
    case 16:
627
        env->pc = ldl_p(mem_buf);
628
        break;
629
    case 17:
630
        env->pr = ldl_p(mem_buf);
631
        break;
632
    case 18:
633
        env->gbr = ldl_p(mem_buf);
634
        break;
635
    case 19:
636
        env->vbr = ldl_p(mem_buf);
637
        break;
638
    case 20:
639
        env->mach = ldl_p(mem_buf);
640
        break;
641
    case 21:
642
        env->macl = ldl_p(mem_buf);
643
        break;
644
    case 22:
645
        env->sr = ldl_p(mem_buf);
646
        break;
647
    case 23:
648
        env->fpul = ldl_p(mem_buf);
649
        break;
650
    case 24:
651
        env->fpscr = ldl_p(mem_buf);
652
        break;
653
    case 25 ... 40:
654
        if (env->fpscr & FPSCR_FR) {
655
            env->fregs[n - 9] = ldfl_p(mem_buf);
656
        } else {
657
            env->fregs[n - 25] = ldfl_p(mem_buf);
658
        }
659
        break;
660
    case 41:
661
        env->ssr = ldl_p(mem_buf);
662
        break;
663
    case 42:
664
        env->spc = ldl_p(mem_buf);
665
        break;
666
    case 43 ... 50:
667
        env->gregs[n - 43] = ldl_p(mem_buf);
668
        break;
669
    case 51 ... 58:
670
        env->gregs[n - (51 - 16)] = ldl_p(mem_buf);
671
        break;
672
    default:
673
        return 0;
674
    }
675

  
676
    return 4;
677
}
678 563
#elif defined (TARGET_MICROBLAZE)
679 564

  
680 565
static int cpu_gdb_read_register(CPUMBState *env, uint8_t *mem_buf, int n)
b/target-sh4/gdbstub.c
1
/*
2
 * SuperH gdb server stub
3
 *
4
 * Copyright (c) 2003-2005 Fabrice Bellard
5
 * Copyright (c) 2013 SUSE LINUX Products GmbH
6
 *
7
 * This library is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2 of the License, or (at your option) any later version.
11
 *
12
 * This library is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19
 */
20

  
21
/* Hint: Use "set architecture sh4" in GDB to see fpu registers */
22
/* FIXME: We should use XML for this.  */
23

  
24
static int cpu_gdb_read_register(CPUSH4State *env, uint8_t *mem_buf, int n)
25
{
26
    switch (n) {
27
    case 0 ... 7:
28
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
29
            GET_REGL(env->gregs[n + 16]);
30
        } else {
31
            GET_REGL(env->gregs[n]);
32
        }
33
    case 8 ... 15:
34
        GET_REGL(env->gregs[n]);
35
    case 16:
36
        GET_REGL(env->pc);
37
    case 17:
38
        GET_REGL(env->pr);
39
    case 18:
40
        GET_REGL(env->gbr);
41
    case 19:
42
        GET_REGL(env->vbr);
43
    case 20:
44
        GET_REGL(env->mach);
45
    case 21:
46
        GET_REGL(env->macl);
47
    case 22:
48
        GET_REGL(env->sr);
49
    case 23:
50
        GET_REGL(env->fpul);
51
    case 24:
52
        GET_REGL(env->fpscr);
53
    case 25 ... 40:
54
        if (env->fpscr & FPSCR_FR) {
55
            stfl_p(mem_buf, env->fregs[n - 9]);
56
        } else {
57
            stfl_p(mem_buf, env->fregs[n - 25]);
58
        }
59
        return 4;
60
    case 41:
61
        GET_REGL(env->ssr);
62
    case 42:
63
        GET_REGL(env->spc);
64
    case 43 ... 50:
65
        GET_REGL(env->gregs[n - 43]);
66
    case 51 ... 58:
67
        GET_REGL(env->gregs[n - (51 - 16)]);
68
    }
69

  
70
    return 0;
71
}
72

  
73
static int cpu_gdb_write_register(CPUSH4State *env, uint8_t *mem_buf, int n)
74
{
75
    switch (n) {
76
    case 0 ... 7:
77
        if ((env->sr & (SR_MD | SR_RB)) == (SR_MD | SR_RB)) {
78
            env->gregs[n + 16] = ldl_p(mem_buf);
79
        } else {
80
            env->gregs[n] = ldl_p(mem_buf);
81
        }
82
        break;
83
    case 8 ... 15:
84
        env->gregs[n] = ldl_p(mem_buf);
85
        break;
86
    case 16:
87
        env->pc = ldl_p(mem_buf);
88
        break;
89
    case 17:
90
        env->pr = ldl_p(mem_buf);
91
        break;
92
    case 18:
93
        env->gbr = ldl_p(mem_buf);
94
        break;
95
    case 19:
96
        env->vbr = ldl_p(mem_buf);
97
        break;
98
    case 20:
99
        env->mach = ldl_p(mem_buf);
100
        break;
101
    case 21:
102
        env->macl = ldl_p(mem_buf);
103
        break;
104
    case 22:
105
        env->sr = ldl_p(mem_buf);
106
        break;
107
    case 23:
108
        env->fpul = ldl_p(mem_buf);
109
        break;
110
    case 24:
111
        env->fpscr = ldl_p(mem_buf);
112
        break;
113
    case 25 ... 40:
114
        if (env->fpscr & FPSCR_FR) {
115
            env->fregs[n - 9] = ldfl_p(mem_buf);
116
        } else {
117
            env->fregs[n - 25] = ldfl_p(mem_buf);
118
        }
119
        break;
120
    case 41:
121
        env->ssr = ldl_p(mem_buf);
122
        break;
123
    case 42:
124
        env->spc = ldl_p(mem_buf);
125
        break;
126
    case 43 ... 50:
127
        env->gregs[n - 43] = ldl_p(mem_buf);
128
        break;
129
    case 51 ... 58:
130
        env->gregs[n - (51 - 16)] = ldl_p(mem_buf);
131
        break;
132
    default:
133
        return 0;
134
    }
135

  
136
    return 4;
137
}

Also available in: Unified diff