[Gold] how to do relax in Gold ?

Shawn shaolin.xie@ia.ac.cn
Wed Jan 16 06:03:00 GMT 2013


Hi All:
     I'am porting Gold to our processor right now ,everything is fine 
except the label whose value is big.  For Example, the following 
instruction assign a LABEL value to register R0:
    ===========
     R0 = LABEL_0;
    ===========

1. Our Objects
   Our instruction is encoded in 32bit,   if the value of "LABLE_0" is 
too big, for example 0x40000, there is not enough space to encode the 
instruction into a 32bit instruction, we have to expand "R0 = LABEL_0" 
into a 64bit instruction automatically.
   Because the value of "LABEL_0" is not known until link-time, we hope 
"Gold" can handle this .

2. My plan  & Question:
   I found the function related to our object is  the "Target::do_relax" 
function, but only arm.cc & powerpc.cc has overwritten it. The 
"do_relax" in arm.cc & powerpc.cc is too complicate to analyze. I hope 
to get a clean implementation of Our Objects.
    a)  Scan  relocation info in all input objects, find the relocations 
that may  need relaxation ( read & compare the symbol value )
          How can I read the relocation info ?
          How can I reany advice ad the symbol  value ? Is the value 
read from the Symbol_table represent the value after layout ?
    b)  for each relocation that  need relaxation, insert a 32bit stub 
in the VIEW, and update the value of the symbol which is located after 
the relocation site.

     And is there any other example related to relaxation except arm.cc 
& powerpc.cc ? or any document ?

     Thanks

-- 

Shawn





More information about the Binutils mailing list