<div>Hi,</div>
<div>&nbsp;</div>
<div>I&#39;m new to U-Boot. Here I got some questions when I read the following code in include/ppc_asm.tmpl:</div>
<div>&nbsp;</div>
<div>
<p>#define START_GOT&nbsp;&nbsp;&nbsp;\<br>&nbsp;.section&nbsp;&quot;.got2&quot;,&quot;aw&quot;;&nbsp;\<br>.LCTOC1 = .+32768</p>
<p>#define END_GOT&nbsp;&nbsp;&nbsp;&nbsp;\<br>&nbsp;.text</p>
<p>#define GET_GOT&nbsp;&nbsp;&nbsp;&nbsp;\<br>&nbsp;bl&nbsp;1f&nbsp;&nbsp;;&nbsp;\<br>&nbsp;.text&nbsp;2&nbsp;&nbsp;;&nbsp;\<br>0:&nbsp;.long&nbsp;.LCTOC1-1f&nbsp;;&nbsp;\<br>&nbsp;.text&nbsp;&nbsp;&nbsp;;&nbsp;\<br>1:&nbsp;mflr&nbsp;r14&nbsp;&nbsp;;&nbsp;\<br>&nbsp;lwz&nbsp;r0,0b-1b(r14)&nbsp;;&nbsp;\<br>&nbsp;add&nbsp;r14,r0,r14&nbsp;;</p>
<p>#define GOT_ENTRY(NAME)&nbsp;&nbsp;.L_&nbsp; ## NAME &nbsp;= . - .LCTOC1 ; .long NAME</p>
<p>#define GOT(NAME)&nbsp;&nbsp;.L_ &nbsp;##&nbsp; NAME (r14)<br></p>
<p>1. As what I understand, after lwz&nbsp;r0,0b-1b(r14)&nbsp;, LOCTOC1-1f is stored in r0, but I totally lost with the following instruction:</p>
<p>&nbsp;add r14,r0,r14. What&#39;s in r14 now. Is the value of&nbsp; label &quot;1f&quot;&nbsp; the absolute address or relative address of the code it labels&nbsp;or whatever else?</p>
<p>2. What do the #define directives do here? I noticed there are spaces before and after &quot;##&quot;; what&#39;s the value of NAME&nbsp;in &quot;.long NAME&quot;. In cup/mpc8xx/start.S,&nbsp; some code such as &quot;lwz&nbsp;r7, GOT(_start)&quot; invokes the macro.</p>

<p>Any idea will be truly appreciated.</p>
<p>David</p>
<p>&nbsp;</p>
<p>&nbsp;</p></div>