[rfa] Add bfd_runtime
Andrew Cagney
ac131313@redhat.com
Wed Jun 30 14:18:00 GMT 2004
Here's the thread: New bfd file format bfd_image ....
http://sources.redhat.com/ml/binutils/2004-05/msg00049.html
http://sources.redhat.com/ml/binutils/2004-06/msg00002.html
> Andrew Cagney <ac131313@redhat.com> writes:
>
>
>>> This follows up an earlier thread by adding the bfd_format type
>>> bfd_runtime. It just pads out all the architecture vectors, not doing
>>> anything useful.
>
>
> I'm sorry, I completely misunderstood what you were talking about
> earlier. I don't see why this is the right approach. The fact that
> file contents are stored in memory does not make that file any
> different from a file stored on disk. It is presumably still an
> object file, and the contents of the file are presumably still
> organized like an object file. It seems to me that the format should
> be bfd_object.
The contents are organized differently. It's the in-memory runtime
image so things are organized acccording to their load address and not
their on-disk file offset.
> Thinking in terms of adding support for a new object file format to
> BFD, what would the entries for bfd_runtime be? How can you recognize
> a file as bfd_runtime rather than bfd_object? The concept of
> bfd_runtime seems to me to be orthogonal to the concept of bfd_format.
Do you need to differentiate between the two?
> I didn't read your earlier e-mail messages closely, and I thought that
> what you were going to do was add a new iovec type. That makes sense
> to me. I don't see why you need anything else.
Can you expand on what you mean here? Are you suggesting the two step
process:
- create an iovec that maps ``on-disk'' offsets onto ``in-memory''
offsets. That way the client thinks its reading the on-disk image when
it isn't.
- create a bfd_object using this iovec
That first operation is format dependant (as in the ELF, XCOFF, and
a.out NMAGIC versions would all involve different code but the same
basic operation).
> If your only concern is to avoid requiring an ELF specific routine in
> BFD, then the usual BFD approach is shown by bfd_get_gp_size() and
> similar functions. Those functions check the flavour, and then call
> the appropriate backend routine.
The objective is to get a clean and efficient mechanism for examining
shared library information from a running program. vsyscall is one
reason, gcj is expected to be a second.
The current code re-creates the bfd_object reading the entire contents
into local memory and then uses that to create abfd-in-memory. Not very
efficient.
(BTW, bfd_get_gp_size doesn't _call_ a backend routine, it just refers
to a back-end macro. Is there another example?)
Andrew
More information about the Binutils
mailing list