This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch rfc] Add NUM_REGS pseudo regs to MIPS


Andrew Cagney wrote:

[ ... ] This adds NUM_REGS pseudo registers to the MIPS [ ... ]


OK, not a direct reply to your rfc, but it's in the right part of the
forest to be causing my problem, so...

I've built a Linux cross MIPS toolchain from a combined source tree,
checked out of the sources.redhat.com tree yesterday (6 July), and when
I attempt to do anything in the sim with the register set, I hit an
assert:

../../combined/gdb/mips-tdep.c:5669: internal-error: mips_register_sim_regno: Assertion `regnum >= 0 && regnum < NUM_REGS' failed.

Setting breakpoints and doing a nested gdb on the thing reveals that
it's trying to display register 90.  The path there is kinda ugly,
but here's the trace into gdbarch_num_regs(), which is about to
return 90:

Ok, I can see what is happening, but not why.


For some reason mips_register_sim_regno is being called with a pseudo register value. I think that is just wrong. mips_pseudo_register_read/write should have converted that pseudo into a raw :-/

Unfortunatly the below backtrace doesn't explain why (notice how mips_register_sim_regno doesn't appear?). Run the gdb and when it internal errors, let it drop a core file, and then run gdb on that vis: gdb mips-linux-gnu-gdb core. Otherwize run gdb on gdb and set the breakpoint on `internal_error'.

Andrew


#0 gdbarch_num_regs (gdbarch=0x82fdc48) at ../../combined/gdb/gdbarch.c:3077
#1 0x080da346 in mips_print_registers_info (gdbarch=0x82fdc48, file=0x82fc890, frame=0x82e0f40, regnum=-1, all=0) at ../../combined/gdb/mips-tdep.c:4345
#2 0x080c9fb3 in gdbarch_print_registers_info (gdbarch=0x82fdc48, file=0x82fc890, frame=0x82e0f40, regnum=-1, all=0) at ../../combined/gdb/gdbarch.c:4007
#3 0x080b7e92 in registers_info (addr_exp=0x0, fpregs=0)
at ../../combined/gdb/infcmd.c:1620

Here's what the gdbarch structure looks like (well, the first bits, anyhow):

(top-gdb) print gdbarch
$8 = (struct gdbarch *) 0x82fdc48
(top-gdb) print *gdbarch
$9 = {initialized_p = 1, bfd_arch_info = 0x8286740, byte_order = 0, osabi = GDB_OSABI_UNKNOWN, tdep = 0x82fdc18, dump_tdep = 0x80dcc9c <mips_dump_tdep>, nr_data = 6, data = 0x82fded0, swap = 0x82fdef0, short_bit = 16, int_bit = 32, long_bit = 32, long_long_bit = 64, float_bit = 32, double_bit = 64, long_double_bit = 64, ptr_bit = 32, addr_bit = 32, bfd_vma_bit = 32, char_signed = 1, read_pc = 0x80d53c8 <mips_read_pc>, write_pc = 0x8095214 <generic_target_write_pc>, read_sp = 0x80d5204 <mips_read_sp>, virtual_frame_pointer = 0x80ce958 <legacy_virtual_frame_pointer>, pseudo_register_read = 0x80d4aec <mips_pseudo_register_read>, pseudo_register_write = 0x80d4b78 <mips_pseudo_register_write>, num_regs = 90, num_pseudo_regs = 90, sp_regnum = -1, pc_regnum = -1, ps_regnum = -1, fp0_regnum = -1, npc_regnum = -1, stab_reg_to_regnum = 0x80dbda4 <mips_stab_reg_to_regnum>, ecoff_reg_to_regnum = 0x80dbe0c <mips_dwarf_dwarf2_ecoff_reg_to_regnum>, dwarf_reg_to_regnum = 0x80dbe0c <mips_dwarf_dwarf2_ecoff_reg_to_regnum>, sdb_reg_to_regnum = 0x80ce8a4 <no_op_reg_to_regnum>, dwarf2_reg_to_regnum = 0x80dbe0c <mips_dwarf_dwarf2_ecoff_reg_to_regnum>, register_name = 0x80d48ec <mips_register_name>, register_type = 0x80d5178 <mips_register_type>, deprecated_register_virtual_type = 0, [ etc etc ]


Being rather weak in gdb-fu, I thought I'd defer to an expert.  Or at least someone
who's generated patches in the vicinity.

If you'd like me to try some other stuff or provide more data, that can easily
be arranged.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]