Commit eac8b355 authored by Andreas Färber's avatar Andreas Färber
Browse files

cpu: Move gdb_regs field from CPU_COMMON to CPUState



Prepares for changing gdb_register_coprocessor() argument to CPUState.

Signed-off-by: default avatarAndreas Färber <afaerber@suse.de>
parent 2e0f2cfb
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -1840,7 +1840,7 @@ static const char *get_feature_xml(const char *p, const char **newp)
        /* Generate the XML description for this CPU.  */
        if (!target_xml[0]) {
            GDBRegisterState *r;
            CPUArchState *env = first_cpu->env_ptr;
            CPUState *cpu = first_cpu;

            snprintf(target_xml, sizeof(target_xml),
                     "<?xml version=\"1.0\"?>"
@@ -1849,7 +1849,7 @@ static const char *get_feature_xml(const char *p, const char **newp)
                     "<xi:include href=\"%s\"/>",
                     GDB_CORE_XML);

            for (r = env->gdb_regs; r; r = r->next) {
            for (r = cpu->gdb_regs; r; r = r->next) {
                pstrcat(target_xml, sizeof(target_xml), "<xi:include href=\"");
                pstrcat(target_xml, sizeof(target_xml), r->xml);
                pstrcat(target_xml, sizeof(target_xml), "\"/>");
@@ -1875,7 +1875,7 @@ static int gdb_read_register(CPUState *cpu, uint8_t *mem_buf, int reg)
    if (reg < NUM_CORE_REGS)
        return cpu_gdb_read_register(env, mem_buf, reg);

    for (r = env->gdb_regs; r; r = r->next) {
    for (r = cpu->gdb_regs; r; r = r->next) {
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
            return r->get_reg(env, mem_buf, reg - r->base_reg);
        }
@@ -1891,7 +1891,7 @@ static int gdb_write_register(CPUState *cpu, uint8_t *mem_buf, int reg)
    if (reg < NUM_CORE_REGS)
        return cpu_gdb_write_register(env, mem_buf, reg);

    for (r = env->gdb_regs; r; r = r->next) {
    for (r = cpu->gdb_regs; r; r = r->next) {
        if (r->base_reg <= reg && reg < r->base_reg + r->num_regs) {
            return r->set_reg(env, mem_buf, reg - r->base_reg);
        }
@@ -1910,11 +1910,12 @@ void gdb_register_coprocessor(CPUArchState * env,
                             gdb_reg_cb get_reg, gdb_reg_cb set_reg,
                             int num_regs, const char *xml, int g_pos)
{
    CPUState *cpu = ENV_GET_CPU(env);
    GDBRegisterState *s;
    GDBRegisterState **p;
    static int last_reg = NUM_CORE_REGS;

    p = &env->gdb_regs;
    p = &cpu->gdb_regs;
    while (*p) {
        /* Check for duplicates.  */
        if (strcmp((*p)->xml, xml) == 0)
+0 −2
Original line number Diff line number Diff line
@@ -174,8 +174,6 @@ typedef struct CPUWatchpoint {
    QTAILQ_HEAD(watchpoints_head, CPUWatchpoint) watchpoints;            \
    CPUWatchpoint *watchpoint_hit;                                      \
                                                                        \
    struct GDBRegisterState *gdb_regs;                                  \
                                                                        \
    /* Core interrupt code */                                           \
    sigjmp_buf jmp_env;                                                 \
    int exception_index;                                                \
+2 −0
Original line number Diff line number Diff line
@@ -141,6 +141,7 @@ struct kvm_run;
 * @singlestep_enabled: Flags for single-stepping.
 * @env_ptr: Pointer to subclass-specific CPUArchState field.
 * @current_tb: Currently executing TB.
 * @gdb_regs: Additional GDB registers.
 * @next_cpu: Next CPU sharing TB cache.
 * @kvm_fd: vCPU file descriptor for KVM.
 *
@@ -175,6 +176,7 @@ struct CPUState {

    void *env_ptr; /* CPUArchState */
    struct TranslationBlock *current_tb;
    struct GDBRegisterState *gdb_regs;
    CPUState *next_cpu;

    int kvm_fd;