GDB broken on MIPS targets with unmarked binaries

Andrew Cagney ac131313@cygnus.com
Fri Jun 7 12:55:00 GMT 2002


> 
> How about setting something in each header that redefines
> REGISTER_VIRTUAL_TYPE, instead?  I think that's much clearer, and when
> we multi-arch the targets which do this it will transition more
> naturally to setting it at gdbarch_init time.  gdbarch_data() is a very
> nice tool, but this is the wrong kind of nail, IMO.
> 
> I'm testing this patch.  Yes, it's a little bit of a step backwards for
> multi-arching, but I still think it's correct; rather than "reverse
> engineer the header files to figure out the default", let's have the
> header files tell us what it is.
> 
> It works fine in my testing; OK to commit, or would you prefer a
> different way?

try something like:

-/* Do not use "TARGET_IS_MIPS64" to test the size of floating point 
registers */
-#ifndef FP_REGISTER_DOUBLE
-#define FP_REGISTER_DOUBLE (REGISTER_VIRTUAL_SIZE(FP0_REGNUM) == 8)
-#endif

#define FP_REGISTER_DOUBLE mip_fp_register-double ()

mips_fp_register_double ()
{
   if (current_gdbarch->tdep->fp_register_double < 0)
     ...->fp_register_double = REGISTER_VIRTUAL_SIZE(FP0_REGNUM) == 8;
   return gdbarch->tdep->fp_register_double;
}

And:

-      tdep->mips_fp_register_double = (REGISTER_VIRTUAL_SIZE 
(FP0_REGNUM) == 8);

   tdep->mips_fp_register_double = -1;

It delays the computation until it is needed.  It also happens to keep 
the old code working without having to add more macros :-)

enjoy,
Andrew




More information about the Gdb mailing list