Re: use MIPS NewABI register names when disassembling NewABI code

Andrew Cagney
2003-04-09T14:52:22Z

>>> Uh. I see. So much for trying to get rid of one more call to
>>> bfd_alloc. This is easy to fix, though.
>
>
>> What about the problem of lifetimes?
>
>
> What do you mean? I plan to use bfd_alloc for it, like
> bfd_make_empty_symbol does, which means it's allocated on the bfd's
> obstack, which gets it deallocated at the right time.

In my original post I made two points:

> Ugly? This bit:
>> + static asymbol *symbols = NULL;
> is wrong. There is more than one instance of an architecture. The symbols lifetime is different to that of the architecture (assuming that the symbol's lifetime is tied to the corresponding bfd).

An architecture can't point at anything tied to the lifetime of an
instance of a BFD.

>>>> How does objdump manage to correctly disassemble something like an
>>>> srecord?
>
>
>>> Presumably, it doesn't. If it's not an ELF bfd, it has no way to
>>> tell which ABI to disassemble for.
>
>
>> Fixing that will cause the gdb side of this problem to fall out.
>
>
> I don't see what's there to be fixed, really, and I can't see how to
> change it either. n32 and n64, the only ABIs that use different
> register naming conventions, don't support anything other than ELF, so
> it's only fair for it to use information from the ELF headers to
> decide which naming convention to use. The only missing bit in gdb is
> to pass the needed information (namely the pointer to the bfd) to the
> disassembler.

It is wrong to assume that there is a BFD. GDB needs to be able to work
correctly vis:

$ gdb
(gdb) set architecture <mips-variant>
(gdb) set mips disassembler <disassembler-variant>
(gdb) target remote
(gdb) disassemble

and this is identical to the situtation that objdump encounters when
presented with an srecord.

Please first fix objdump, and then we can see about fixing GDB.

Andrew