mirror of
https://github.com/qemu/qemu.git
synced 2024-11-23 10:53:37 +08:00
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_SYSTBL_ABI=i386
|
||||
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_SYSTBL_ABI=common,64
|
||||
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);
|
||||
|
||||
x86_cpu_gdb_init(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_write_register(CPUState *cpu, uint8_t *buf, int reg);
|
||||
void x86_cpu_gdb_init(CPUState *cs);
|
||||
|
||||
void x86_cpu_list(void);
|
||||
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/>.
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "accel/tcg/vcpu-state.h"
|
||||
#include "cpu.h"
|
||||
#include "exec/gdbstub.h"
|
||||
#include "gdbstub/helpers.h"
|
||||
#ifdef CONFIG_LINUX_USER
|
||||
#include "linux-user/qemu.h"
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_X86_64
|
||||
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. */
|
||||
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