gdb dies:

(gdb) x/10i args_done
../../gdb-mips/gdb/findvar.c:282: gdb-internal-error:
store_typed_address: type is not a pointer or reference
An internal GDB error was detected.  This may make further
debugging unreliable.  Continue this debugging session? (y or n) n


The chain of events:

The binary is Elf32 on a 64-bit architecture (MIPS64).
args_done is a label, that would make it an Elf32_Addr
symbol right?  Anyway gdb's symbol reader seems to assign
it TYPE_CODE_INT.  If that's wrong please say so.

The "x" command evaluates its argument and we arrive in
findvar.c:read_var_value

    case LOC_LABEL:
      /* Put the constant back in target format.  */
... 
        store_typed_address (VALUE_CONTENTS_RAW (v), type,
                              SYMBOL_VALUE_ADDRESS (var));


store_typed_address hates arguments of TYPE_CODE_INT so
we die.  


/* Store the address ADDR as a pointer of type TYPE at BUF, in target
   form.  */
void
store_typed_address (void *buf, struct type *type, CORE_ADDR addr)
{
  if (TYPE_CODE (type) != TYPE_CODE_PTR
      && TYPE_CODE (type) != TYPE_CODE_REF)
    internal_error (__FILE__, __LINE__,
                    "store_typed_address: "
                    "type is not a pointer or reference");

  ADDRESS_TO_POINTER (type, buf, addr);
}



Should the label not have been assigned TYPE_CODE_INT during symbol
reading?

If the label's type is correct, then is store_typed_address too
picky?  Or should read_var_value() be calling the weaker
store_signed_integer instead of store_typed_address to
accommodate Elf32 on a 64-bit architecture?

Elf32 on 64-bit strikes me as weird, in that pointers are not the
same size as addresses.  I don't know how that is handled
throughout the gdb framework.

Thanks for any enlightenment!



_______________________________________________
Bug-gdb mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/bug-gdb

Reply via email to