target/i386/gdbstub: Expose orig_ax
Copy XML files describing orig_ax from GDB and glue them with CPUX86State.orig_ax. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Message-ID: <20240912093012.402366-5-iii@linux.ibm.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
e7a4427aec
commit
ac2fb86a0e
@ -1,4 +1,4 @@
|
|||||||
TARGET_ARCH=i386
|
TARGET_ARCH=i386
|
||||||
TARGET_SYSTBL_ABI=i386
|
TARGET_SYSTBL_ABI=i386
|
||||||
TARGET_SYSTBL=syscall_32.tbl
|
TARGET_SYSTBL=syscall_32.tbl
|
||||||
TARGET_XML_FILES= gdb-xml/i386-32bit.xml
|
TARGET_XML_FILES= gdb-xml/i386-32bit.xml gdb-xml/i386-32bit-linux.xml
|
||||||
|
@ -2,4 +2,4 @@ TARGET_ARCH=x86_64
|
|||||||
TARGET_BASE_ARCH=i386
|
TARGET_BASE_ARCH=i386
|
||||||
TARGET_SYSTBL_ABI=common,64
|
TARGET_SYSTBL_ABI=common,64
|
||||||
TARGET_SYSTBL=syscall_64.tbl
|
TARGET_SYSTBL=syscall_64.tbl
|
||||||
TARGET_XML_FILES= gdb-xml/i386-64bit.xml
|
TARGET_XML_FILES= gdb-xml/i386-64bit.xml gdb-xml/i386-64bit-linux.xml
|
||||||
|
11
gdb-xml/i386-32bit-linux.xml
Normal file
11
gdb-xml/i386-32bit-linux.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- Copyright (C) 2010-2024 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved. -->
|
||||||
|
|
||||||
|
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||||
|
<feature name="org.gnu.gdb.i386.linux">
|
||||||
|
<reg name="orig_eax" bitsize="32" type="int"/>
|
||||||
|
</feature>
|
11
gdb-xml/i386-64bit-linux.xml
Normal file
11
gdb-xml/i386-64bit-linux.xml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<!-- Copyright (C) 2010-2024 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Copying and distribution of this file, with or without modification,
|
||||||
|
are permitted in any medium without royalty provided the copyright
|
||||||
|
notice and this notice are preserved. -->
|
||||||
|
|
||||||
|
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
||||||
|
<feature name="org.gnu.gdb.i386.linux">
|
||||||
|
<reg name="orig_rax" bitsize="64" type="int"/>
|
||||||
|
</feature>
|
@ -7831,6 +7831,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
|
|||||||
|
|
||||||
mce_init(cpu);
|
mce_init(cpu);
|
||||||
|
|
||||||
|
x86_cpu_gdb_init(cs);
|
||||||
qemu_init_vcpu(cs);
|
qemu_init_vcpu(cs);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2226,6 +2226,7 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, int flags);
|
|||||||
|
|
||||||
int x86_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
int x86_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg);
|
||||||
int x86_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
int x86_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||||
|
void x86_cpu_gdb_init(CPUState *cs);
|
||||||
|
|
||||||
void x86_cpu_list(void);
|
void x86_cpu_list(void);
|
||||||
int cpu_x86_support_mca_broadcast(CPUX86State *env);
|
int cpu_x86_support_mca_broadcast(CPUX86State *env);
|
||||||
|
@ -18,8 +18,13 @@
|
|||||||
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
#include "qemu/osdep.h"
|
#include "qemu/osdep.h"
|
||||||
|
#include "accel/tcg/vcpu-state.h"
|
||||||
#include "cpu.h"
|
#include "cpu.h"
|
||||||
|
#include "exec/gdbstub.h"
|
||||||
#include "gdbstub/helpers.h"
|
#include "gdbstub/helpers.h"
|
||||||
|
#ifdef CONFIG_LINUX_USER
|
||||||
|
#include "linux-user/qemu.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef TARGET_X86_64
|
#ifdef TARGET_X86_64
|
||||||
static const int gpr_map[16] = {
|
static const int gpr_map[16] = {
|
||||||
@ -406,3 +411,49 @@ int x86_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
|
|||||||
/* Unrecognised register. */
|
/* Unrecognised register. */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_LINUX_USER
|
||||||
|
|
||||||
|
#define IDX_ORIG_AX 0
|
||||||
|
|
||||||
|
static int x86_cpu_gdb_read_linux_register(CPUState *cs, GByteArray *mem_buf,
|
||||||
|
int n)
|
||||||
|
{
|
||||||
|
X86CPU *cpu = X86_CPU(cs);
|
||||||
|
CPUX86State *env = &cpu->env;
|
||||||
|
|
||||||
|
switch (n) {
|
||||||
|
case IDX_ORIG_AX:
|
||||||
|
return gdb_get_reg(env, mem_buf, get_task_state(cs)->orig_ax);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int x86_cpu_gdb_write_linux_register(CPUState *cs, uint8_t *mem_buf,
|
||||||
|
int n)
|
||||||
|
{
|
||||||
|
X86CPU *cpu = X86_CPU(cs);
|
||||||
|
CPUX86State *env = &cpu->env;
|
||||||
|
|
||||||
|
switch (n) {
|
||||||
|
case IDX_ORIG_AX:
|
||||||
|
return gdb_write_reg(env, mem_buf, &get_task_state(cs)->orig_ax);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void x86_cpu_gdb_init(CPUState *cs)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_LINUX_USER
|
||||||
|
gdb_register_coprocessor(cs, x86_cpu_gdb_read_linux_register,
|
||||||
|
x86_cpu_gdb_write_linux_register,
|
||||||
|
#ifdef TARGET_X86_64
|
||||||
|
gdb_find_static_feature("i386-64bit-linux.xml"),
|
||||||
|
#else
|
||||||
|
gdb_find_static_feature("i386-32bit-linux.xml"),
|
||||||
|
#endif
|
||||||
|
0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user