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] Use read_memory_unsigned_integer when reading to CORE_ADDR


Perhaps something along the lines of the following?

{
  unsigned char buf[sizeof (CORE_ADDR)];
  if (target_read_memory (memaddr, buf, TYPE_LENGTH (builtin_type_void_data_ptr)) != 0)
    error ("Unable to determine lower bound of array.");
  *lower_bound = extract_typed_address (buf, builtin_type_void_data_ptr);
}

That's a bit verbose, and it's not clear to me if sizeof (CORE_ADDR) is guaranteed to be large enough to contain a raw target pointer, but I can't really think of any better alternatives.

Aside from the intimidating comments in findvar.c, this would seem a good candidate for extract_address ... though a similar modification would have to be made to it to handle the sign-extension as well.

Or alternately, I could just leave well-enough alone, and be careful to truncate CORE_ADDRs to 32 bits in our target xfer_memory code (or the MIPS code could sign-extend it in the same place).
Just FYI, the MIPS tried to do this, and it lost badly! It also turned out that the MIPS case was just a simplification of the more generic harvard case and hence the core of GDB is being modified, as people notice, to use the pointer to address and address to pointer functions.

Andrew


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