GDB broken on MIPS targets with unmarked binaries
Andrew Cagney
ac131313@cygnus.com
Wed Jun 5 13:44:00 GMT 2002
> There's an interesting crash on startup in a mips-elf GDB nowadays... the
> code reads:
>
> default:
> tdep->mips_abi_string = "default";
> tdep->mips_default_saved_regsize = MIPS_REGSIZE;
> tdep->mips_default_stack_argsize = MIPS_REGSIZE;
> tdep->mips_fp_register_double = (REGISTER_VIRTUAL_SIZE (FP0_REGNUM) == 8);
> tdep->mips_last_arg_regnum = A0_REGNUM + 8 - 1;
> tdep->mips_last_fp_arg_regnum = FPA0_REGNUM + 8 - 1;
> tdep->mips_regs_have_home_p = 1;
> tdep->gdb_target_is_mips64 = 0;
> tdep->default_mask_address_p = 0;
> set_gdbarch_long_bit (gdbarch, 32);
> set_gdbarch_ptr_bit (gdbarch, 32);
> set_gdbarch_long_long_bit (gdbarch, 64);
> break;
>
> Something brought in recently, probably by the OS ABI changes if I had to
> guess, is causing the check of REGISTER_VIRTUAL_SIZE to fail. I've no idea
> why. Compiling a mips-elf (not mips-linux, which sets MIPS_DEFAULT_ABI) and
> running gdb on an unmarked ELF binary reproduces this.
I'd suspect this:
2002-05-08 Andrew Cagney <ac131313@redhat.com>
* gdbarch.sh (init_gdbarch_swap): Do not clear the swap section.
(clear_gdbarch_swap): New function.
(initialize_non_multiarch): Call.
(gdbarch_update_p): Before calling init(), swap out and clear the
existing architecture.
* gdbarch.c: Regenerate.
The comment from arm-tdep.c should help explain why the above code is
broken:
/* We can't use NUM_REGS nor NUM_PSEUDO_REGS here, since that still
references the old architecture vector, not the one we are
building here. */
prologue_cache.saved_regs = (CORE_ADDR *)
xcalloc (1, (sizeof (CORE_ADDR)
* (gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch))));
As far as I can tell though, REGISTER_VIRTUAL_SIZE expands to
REGISTER_VIRTUAL_TYPE which is still a macro?
Andrew
More information about the Gdb
mailing list