<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Mar 8, 2017 at 10:52 AM Cary Coutant <<a href="mailto:ccoutant@gmail.com">ccoutant@gmail.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
No, symbols in an ET_EXEC or ET_DYN object always have<br class="gmail_msg">
already-relocated values. The section index is irrelevant other than<br class="gmail_msg">
to indicate that the symbol is not absolute or undefined. That's the<br class="gmail_msg">
point of the paragraph I quoted from the end of the symbol table<br class="gmail_msg">
chapter from the ELF spec. In gold, I try to find a section that<br class="gmail_msg">
belongs to the segment that the symbol is associated with, but setting<br class="gmail_msg">
st_shndx to 1 would be just as effective.<br class="gmail_msg"></blockquote><div><br></div><div>I think this is an issue in LLD. I started experimenting with the solution proposed by Peter which is to replace that linker script with:<br></div><div><br></div><div>PROVIDE_HIDDEN(_base = ADDR(.text) - ABSOLUTE(ADDR(.text)));<br></div><div><br></div><div>In LLD, this symbol would be processed as a synthetic symbol with value 0 and .text section, which is correct. The problem is that LLD assumes that all synthetic symbols are section relative, so when emitting that symbol, LLD would adjust its address by the address of .text, so the final value is going to be whatever the .text address is rather than image base.</div></div></div>