On Thu, Feb 16, 2023 at 12:56 AM Richard Henderson < richard.hender...@linaro.org> wrote:
> Alex, Edgar, this has been reviewed. Will either of you take it with your > trees, or shall > I just queue it through tcg-next? > > Hi Richard, yeah if you don't mind, please take it through your tree! Thanks, Edgar > r~ > > On 12/30/22 06:24, Richard Henderson wrote: > > Mirroring the upstream gdb xml files, the two stack boundary > > registers are separated out. > > > > Signed-off-by: Richard Henderson <richard.hender...@linaro.org> > > --- > > > > I did this thinking I would be fixing: > > > > TEST basic gdbstub support on microblaze > > Truncated register 35 in remote 'g' packet > > Traceback (most recent call last): > > File "/home/rth/qemu/src/tests/tcg/multiarch/gdbstub/sha1.py", > > line 71, in <module> if gdb.parse_and_eval('$pc') == 0: > > gdb.error: No registers. > > > > but in the end it turned out that the gdb-multiarch supplied > > by ubuntu 22.04 simply doesn't support MicroBlaze, as can be > > seen with the "set architecture" command within gdb. > > > > (I built gdb from source, to try and debug why this still wasn't > > working, only to find that it did. :-P) > > > > Alex, any way to modify our gdb test to fail gracefully here? > > > > Regardless, having proper xml for all of our targets seems > > like the correct way forward. > > > > > > r~ > > > > Cc: Alex Bennée <alex.ben...@linaro.org> > > Cc: Edgar E. Iglesias <edgar.igles...@gmail.com> > > --- > > configs/targets/microblaze-linux-user.mak | 1 + > > configs/targets/microblaze-softmmu.mak | 1 + > > configs/targets/microblazeel-linux-user.mak | 1 + > > configs/targets/microblazeel-softmmu.mak | 1 + > > target/microblaze/cpu.h | 2 + > > target/microblaze/cpu.c | 7 ++- > > target/microblaze/gdbstub.c | 51 +++++++++++----- > > gdb-xml/microblaze-core.xml | 67 +++++++++++++++++++++ > > gdb-xml/microblaze-stack-protect.xml | 12 ++++ > > 9 files changed, 128 insertions(+), 15 deletions(-) > > create mode 100644 gdb-xml/microblaze-core.xml > > create mode 100644 gdb-xml/microblaze-stack-protect.xml > > > > diff --git a/configs/targets/microblaze-linux-user.mak > b/configs/targets/microblaze-linux-user.mak > > index 4249a37f65..0a2322c249 100644 > > --- a/configs/targets/microblaze-linux-user.mak > > +++ b/configs/targets/microblaze-linux-user.mak > > @@ -3,3 +3,4 @@ TARGET_SYSTBL_ABI=common > > TARGET_SYSTBL=syscall.tbl > > TARGET_BIG_ENDIAN=y > > TARGET_HAS_BFLT=y > > +TARGET_XML_FILES=gdb-xml/microblaze-core.xml > gdb-xml/microblaze-stack-protect.xml > > diff --git a/configs/targets/microblaze-softmmu.mak > b/configs/targets/microblaze-softmmu.mak > > index 8385e2d333..e84c0cc728 100644 > > --- a/configs/targets/microblaze-softmmu.mak > > +++ b/configs/targets/microblaze-softmmu.mak > > @@ -2,3 +2,4 @@ TARGET_ARCH=microblaze > > TARGET_BIG_ENDIAN=y > > TARGET_SUPPORTS_MTTCG=y > > TARGET_NEED_FDT=y > > +TARGET_XML_FILES=gdb-xml/microblaze-core.xml > gdb-xml/microblaze-stack-protect.xml > > diff --git a/configs/targets/microblazeel-linux-user.mak > b/configs/targets/microblazeel-linux-user.mak > > index d0e775d840..270743156a 100644 > > --- a/configs/targets/microblazeel-linux-user.mak > > +++ b/configs/targets/microblazeel-linux-user.mak > > @@ -2,3 +2,4 @@ TARGET_ARCH=microblaze > > TARGET_SYSTBL_ABI=common > > TARGET_SYSTBL=syscall.tbl > > TARGET_HAS_BFLT=y > > +TARGET_XML_FILES=gdb-xml/microblaze-core.xml > gdb-xml/microblaze-stack-protect.xml > > diff --git a/configs/targets/microblazeel-softmmu.mak > b/configs/targets/microblazeel-softmmu.mak > > index af40391f2f..9b688036bd 100644 > > --- a/configs/targets/microblazeel-softmmu.mak > > +++ b/configs/targets/microblazeel-softmmu.mak > > @@ -1,3 +1,4 @@ > > TARGET_ARCH=microblaze > > TARGET_SUPPORTS_MTTCG=y > > TARGET_NEED_FDT=y > > +TARGET_XML_FILES=gdb-xml/microblaze-core.xml > gdb-xml/microblaze-stack-protect.xml > > diff --git a/target/microblaze/cpu.h b/target/microblaze/cpu.h > > index 1e84dd8f47..e541fbb0b3 100644 > > --- a/target/microblaze/cpu.h > > +++ b/target/microblaze/cpu.h > > @@ -367,6 +367,8 @@ hwaddr mb_cpu_get_phys_page_attrs_debug(CPUState > *cpu, vaddr addr, > > MemTxAttrs *attrs); > > int mb_cpu_gdb_read_register(CPUState *cpu, GByteArray *buf, int reg); > > int mb_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); > > +int mb_cpu_gdb_read_stack_protect(CPUArchState *cpu, GByteArray *buf, > int reg); > > +int mb_cpu_gdb_write_stack_protect(CPUArchState *cpu, uint8_t *buf, int > reg); > > > > static inline uint32_t mb_cpu_read_msr(const CPUMBState *env) > > { > > diff --git a/target/microblaze/cpu.c b/target/microblaze/cpu.c > > index 817681f9b2..a2d2f5c340 100644 > > --- a/target/microblaze/cpu.c > > +++ b/target/microblaze/cpu.c > > @@ -28,6 +28,7 @@ > > #include "qemu/module.h" > > #include "hw/qdev-properties.h" > > #include "exec/exec-all.h" > > +#include "exec/gdbstub.h" > > #include "fpu/softfloat-helpers.h" > > > > static const struct { > > @@ -294,6 +295,9 @@ static void mb_cpu_initfn(Object *obj) > > CPUMBState *env = &cpu->env; > > > > cpu_set_cpustate_pointers(cpu); > > + gdb_register_coprocessor(CPU(cpu), mb_cpu_gdb_read_stack_protect, > > + mb_cpu_gdb_write_stack_protect, 2, > > + "microblaze-stack-protect.xml", 0); > > > > set_float_rounding_mode(float_round_nearest_even, &env->fp_status); > > > > @@ -422,7 +426,8 @@ static void mb_cpu_class_init(ObjectClass *oc, void > *data) > > cc->sysemu_ops = &mb_sysemu_ops; > > #endif > > device_class_set_props(dc, mb_properties); > > - cc->gdb_num_core_regs = 32 + 27; > > + cc->gdb_num_core_regs = 32 + 25; > > + cc->gdb_core_xml_file = "microblaze-core.xml"; > > > > cc->disas_set_info = mb_disas_set_info; > > cc->tcg_ops = &mb_tcg_ops; > > diff --git a/target/microblaze/gdbstub.c b/target/microblaze/gdbstub.c > > index 2e6e070051..8143fcae88 100644 > > --- a/target/microblaze/gdbstub.c > > +++ b/target/microblaze/gdbstub.c > > @@ -39,8 +39,11 @@ enum { > > GDB_PVR0 = 32 + 6, > > GDB_PVR11 = 32 + 17, > > GDB_EDR = 32 + 18, > > - GDB_SLR = 32 + 25, > > - GDB_SHR = 32 + 26, > > +}; > > + > > +enum { > > + GDB_SP_SHL, > > + GDB_SP_SHR, > > }; > > > > int mb_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n) > > @@ -83,12 +86,6 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray > *mem_buf, int n) > > case GDB_EDR: > > val = env->edr; > > break; > > - case GDB_SLR: > > - val = env->slr; > > - break; > > - case GDB_SHR: > > - val = env->shr; > > - break; > > default: > > /* Other SRegs aren't modeled, so report a value of 0 */ > > val = 0; > > @@ -97,6 +94,23 @@ int mb_cpu_gdb_read_register(CPUState *cs, GByteArray > *mem_buf, int n) > > return gdb_get_reg32(mem_buf, val); > > } > > > > +int mb_cpu_gdb_read_stack_protect(CPUMBState *env, GByteArray *mem_buf, > int n) > > +{ > > + uint32_t val; > > + > > + switch (n) { > > + case GDB_SP_SHL: > > + val = env->slr; > > + break; > > + case GDB_SP_SHR: > > + val = env->shr; > > + break; > > + default: > > + return 0; > > + } > > + return gdb_get_reg32(mem_buf, val); > > +} > > + > > int mb_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) > > { > > MicroBlazeCPU *cpu = MICROBLAZE_CPU(cs); > > @@ -135,12 +149,21 @@ int mb_cpu_gdb_write_register(CPUState *cs, > uint8_t *mem_buf, int n) > > case GDB_EDR: > > env->edr = tmp; > > break; > > - case GDB_SLR: > > - env->slr = tmp; > > - break; > > - case GDB_SHR: > > - env->shr = tmp; > > - break; > > + } > > + return 4; > > +} > > + > > +int mb_cpu_gdb_write_stack_protect(CPUMBState *env, uint8_t *mem_buf, > int n) > > +{ > > + switch (n) { > > + case GDB_SP_SHL: > > + env->slr = ldl_p(mem_buf); > > + break; > > + case GDB_SP_SHR: > > + env->shr = ldl_p(mem_buf); > > + break; > > + default: > > + return 0; > > } > > return 4; > > } > > diff --git a/gdb-xml/microblaze-core.xml b/gdb-xml/microblaze-core.xml > > new file mode 100644 > > index 0000000000..becf77c89c > > --- /dev/null > > +++ b/gdb-xml/microblaze-core.xml > > @@ -0,0 +1,67 @@ > > +<?xml version="1.0"?> > > +<!-- Copyright (C) 2008 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.microblaze.core"> > > + <reg name="r0" bitsize="32" regnum="0"/> > > + <reg name="r1" bitsize="32" type="data_ptr"/> > > + <reg name="r2" bitsize="32"/> > > + <reg name="r3" bitsize="32"/> > > + <reg name="r4" bitsize="32"/> > > + <reg name="r5" bitsize="32"/> > > + <reg name="r6" bitsize="32"/> > > + <reg name="r7" bitsize="32"/> > > + <reg name="r8" bitsize="32"/> > > + <reg name="r9" bitsize="32"/> > > + <reg name="r10" bitsize="32"/> > > + <reg name="r11" bitsize="32"/> > > + <reg name="r12" bitsize="32"/> > > + <reg name="r13" bitsize="32"/> > > + <reg name="r14" bitsize="32"/> > > + <reg name="r15" bitsize="32"/> > > + <reg name="r16" bitsize="32"/> > > + <reg name="r17" bitsize="32"/> > > + <reg name="r18" bitsize="32"/> > > + <reg name="r19" bitsize="32"/> > > + <reg name="r20" bitsize="32"/> > > + <reg name="r21" bitsize="32"/> > > + <reg name="r22" bitsize="32"/> > > + <reg name="r23" bitsize="32"/> > > + <reg name="r24" bitsize="32"/> > > + <reg name="r25" bitsize="32"/> > > + <reg name="r26" bitsize="32"/> > > + <reg name="r27" bitsize="32"/> > > + <reg name="r28" bitsize="32"/> > > + <reg name="r29" bitsize="32"/> > > + <reg name="r30" bitsize="32"/> > > + <reg name="r31" bitsize="32"/> > > + <reg name="rpc" bitsize="32" type="code_ptr"/> > > + <reg name="rmsr" bitsize="32"/> > > + <reg name="rear" bitsize="32"/> > > + <reg name="resr" bitsize="32"/> > > + <reg name="rfsr" bitsize="32"/> > > + <reg name="rbtr" bitsize="32"/> > > + <reg name="rpvr0" bitsize="32"/> > > + <reg name="rpvr1" bitsize="32"/> > > + <reg name="rpvr2" bitsize="32"/> > > + <reg name="rpvr3" bitsize="32"/> > > + <reg name="rpvr4" bitsize="32"/> > > + <reg name="rpvr5" bitsize="32"/> > > + <reg name="rpvr6" bitsize="32"/> > > + <reg name="rpvr7" bitsize="32"/> > > + <reg name="rpvr8" bitsize="32"/> > > + <reg name="rpvr9" bitsize="32"/> > > + <reg name="rpvr10" bitsize="32"/> > > + <reg name="rpvr11" bitsize="32"/> > > + <reg name="redr" bitsize="32"/> > > + <reg name="rpid" bitsize="32"/> > > + <reg name="rzpr" bitsize="32"/> > > + <reg name="rtlbx" bitsize="32"/> > > + <reg name="rtlbsx" bitsize="32"/> > > + <reg name="rtlblo" bitsize="32"/> > > + <reg name="rtlbhi" bitsize="32"/> > > +</feature> > > diff --git a/gdb-xml/microblaze-stack-protect.xml > b/gdb-xml/microblaze-stack-protect.xml > > new file mode 100644 > > index 0000000000..997301e8a2 > > --- /dev/null > > +++ b/gdb-xml/microblaze-stack-protect.xml > > @@ -0,0 +1,12 @@ > > +<?xml version="1.0"?> > > +<!-- Copyright (C) 2008 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.microblaze.stack-protect"> > > + <reg name="rslr" bitsize="32"/> > > + <reg name="rshr" bitsize="32"/> > > +</feature> > >