Question on LD Linker providing low 2 bytes of address as a constant
Michael Hennebry
hennebry@web.cs.ndsu.NoDak.edu
Thu Oct 18 21:30:00 GMT 2007
On Thu, 18 Oct 2007, Nick Clifton wrote:
> Hi Doreen,
>
> > If I put the address of the table I wanted stored in HdlrTbl in my
> > pre-initializer, the compiler reports "error: initializer element is not
> > constant". If I change HdlrTbl from 2 bytes to 4 bytes and leave the
> > pre-initilizer the way it was, it compiles fine. So it looks like I
> > need a way to tell the compiler and linker that I only want the lowest 2
> > bytes of the address (which is identical to the address since the 2 high
> > bytes are 0).
>
> Tricky. There are several possibilities, none of them easy:
> 4. Hard code the addresses of your HdlrTbl structures.
> You would have to make sure that you use a low memory area that is not
> going to be used by anything else and use two versions of the address,
> one 16-bit and the other 32-bit.
Another way is similar.
Compile and link using any value in the pre-initializer source.
Use nm, grep and sed to place the correct
value in the pre-initilizer source.
Compile and link again.
Use nm, grep and diff to make sure that the correct value didn't change.
If it does, I don't kow why it would, I suppose you could iterate like tex.
There is, I suppose, the possibility of editing the binary.
That would only work if everything that
uses the 2-byte address fetches it first.
--
Mike hennebry@web.cs.ndsu.NoDak.edu
"Horse guts never lie." -- Cherek Bear-Shoulders
More information about the Binutils
mailing list