[RFA] mips 32/64 register/stack fix

Michael Snyder msnyder@redhat.com
Thu Apr 22 22:49:00 GMT 2004


Andrew Cagney wrote:
>> #0  register_size (gdbarch=0x84093e8, regnum=120)
> 
> 
> 120 looks large enough to be cooked (but to confirm this can you look at 
> "maint print raw-registers".  This will also tell us the register's 
> type, and hence confirm the size.

Yes, raw is from 0 to 89, and cooked is from 90 to 179.
regcache->descr->sizeof_register is as follows:
8 for all raw
8 for the first 70 cooked
4 for the last 20 cooked

register_type looks like:
raw:
38 @ int64
32 @ double64
20 @ int64
cooked:
38 @ int64
32 @ double64
20 @ int32

> Given that you see 8, this suggests that the register's type is wrong 
> (see mips_register_type).

It looks to me as if mips_register_type relies on mips_regsize.
Which returns 8.  Yep, and mips_register_type (120) returns int64_t.

But mips_saved_regsize (tdep) returns 4 (as it should, I guess).

> Also, what information is available in the object file header?

Can you be more specific?

Here's the bfd_arch_info:
{bits_per_word = 64, bits_per_address = 64, bits_per_byte = 8,
   arch = bfd_arch_mips, mach = 64, arch_name = 0x8382960 "mips",
   printable_name = 0x8382a50 "mips:isa64", section_align_power = 3,
   the_default = 0, compatible = 0x82c36a4 <mips_compatible>,
   scan = 0x825f3c3 <bfd_default_scan>, next = 0x8382f00}

Here's your tdep info:
{elf_flags = 1610625025, mips_abi = MIPS_ABI_EABI32,
   found_abi = MIPS_ABI_EABI32, mips_fpu_type = MIPS_FPU_DOUBLE,
   mips_last_arg_regnum = 11, mips_last_fp_arg_regnum = 57,
   mips_default_saved_regsize = 4, mips_fp_register_double = 0,
   mips_default_stack_argsize = 4, default_mask_address_p = 0,
   mips64_transfers_32bit_regs_p = 0, regnum = 0x840968c,
   mips_processor_reg_names = 0x83995c0}
(GDB) p /x tdep.elf_flags
$10 = 0x60003001





More information about the Gdb-patches mailing list