[wip] BFD from an arbitrary object; Was: provide pass-through value in bfd_elf_bfd_from_remote_memory

Andrew Cagney cagney@gnu.org
Sat Feb 14 04:07:00 GMT 2004


> I agree in general, but I wouldn't do it at the cost of efficiency.
> 
> 
> I'm trying to think ahead to the times we need to expand the list of
> ops, and how many bad things can happen.  Worst case is, bfd expects a
> field that gdb isn't providing, and calls into oblivion.  We need
> something, either a length or an abi version (although length could
> server that purpose too) so that such errors are caught cleanly.

Make "struct bfd_file_ops" vector part of "struct bfd" vis:

struct bfd {
   ...
   struct bfd_file {
     void *data;
     struct bfd_file_ops ops;
   } stream;
   ...
};

have the create bfd method populate all entries (the backward 
compatibility problem) and then when a bfd is given it's stream, update 
non-NULL entries.  GDB kind of sort of does this for its vectors.

but which ever

>> Note that multiple malloc calls aren't much of an issue, though, since
>> BFD uses objalloc, which makes it pretty cheap to allocate memory.
> 
> 
> Does gdb have access to that?  If gdb is creating the interface, gdb
> needs to allocate the structures.
> 
> 
>> > In that case, I'd prefer something less vague than "cookie".  How
>> > about "data"?  I assume most backends will have this point to a
>> > structure with various items in it, whereas "cookie" implies a single
>> > value.  Or a dessert ;-)
> 
>> 
>> Hmmm, you want something less vague than `cookie', so you suggest
>> `data'?  I think I know what you're getting at, but the word is rather
>> ambiguous.
>> 
>> How about `stream' or `storage'?

"cookie" is what <stdio.h> uses (well the one I looked at :-).  "file_data"

> Well, it's a field in a structure called "stream" already, so we're
> talking about stream.ops and stream.data.

Andrew




More information about the Binutils mailing list