Special MIPS relocation - How to?

Francisco Rodriguez prodrig@disca.upv.es
Tue Jul 9 13:16:00 GMT 2002


----- Original Message -----
From: "Alan Modra" <amodra@bigpond.net.au>
To: "Francisco Rodriguez" <prodrig@disca.upv.es>
Cc: <binutils@sources.redhat.com>
Sent: Thursday, July 04, 2002 9:15 AM
Subject: Re: Special MIPS relocation - How to?


> On Wed, Jul 03, 2002 at 09:20:21PM +0200, Francisco Rodriguez wrote:
> > My problem now is, that these relocs should be resolved at link time,
> > but only when all other relocs have been processed. This is because
> > these relocs are based on the final ".text" section contents, not on
> > symbol addresses.
> >
> > And I simply don't know how to do it.
> > I've only reached to tweak the bfd library so ld silently ignore my
relocs
> > (in bfd_mips_elf_relocate_section).
> >
> > Could anyone offer a hint about how to do it?
>
> A general solution might be:
>
>  o  Create a fake input bfd.  (Example of fake input bfds can be found
>     in ppc64elf.em and hppaelf.em.)  Further, give the fake bfd an
>     input section (zero size ok) with a reloc.
>
>  o  In ldemul_after_open, reorder the input bfd list so that the fake
>     is last.
>
>  o  In bfd_mips_elf_relocate_section, when processing normal input
>     bfds, save information about your new relocs somewhere.  When
>     processing the fake bfd, read the output .text section back from
>     disk, and use it and the saved info to produce whatever you
>     desire.
>
> This will be quite a lot of work.
>
> You might be able to do something simpler, but you haven't told us
> much about your new relocs.
>
> --
> Alan Modra
> IBM OzLabs - Linux Technology Centre
>

Hello

Thanks for your solution.

I'm in the process of implementing it, but stopped with a different problem
now.
After all the sections have been relocated,
I use a call to bfd_get_section_contents to get .text section contents,
but the function call returns error. After tracing, the problem seems
to be the file IO: a real fseek and fread are needed because SEC_CONTENTS
flag is not set.
The fseek returns ok, but the fread returns 0 bytes read.
How can this happen? The bfd_get_section_contents call is made
before the output bfd is closed, so it should be ok, shouldn't it?

Any help is again greatly appreciated.

Best regards

    Francisco Rodriguez

PS: I did not tell you much about the intention of these relocs to avoid
bandwith abuse
with info which is useless to you (IMHO). I need them as part of my PhD work
(to augment a standard mips processor with a run-time error detection
mechanism).
If any of you want the details, I'll be glad to provide them.






More information about the Binutils mailing list