<div dir="ltr">Hi,<div><br></div><div>1. </div><div style>I modified the ABS32 TYPE of arm, as listed below:</div><div style><div>diff --git a/rtl-mdreloc-arm.c b/rtl-mdreloc-arm.c</div><div>index f31d1ef..f3f2680 100644</div>
<div>--- a/rtl-mdreloc-arm.c</div><div>+++ b/rtl-mdreloc-arm.c</div><div>@@ -144,10 +144,10 @@ rtems_rtl_elf_relocate_rel (const rtems_rtl_obj_t*      obj,</div><div> #endif</div><div> #endif</div><div> </div><div>-<span class="" style="white-space:pre">          </span>case R_TYPE(ABS32):<span class="" style="white-space:pre">       </span>/* word32 B + S + A */</div>
<div>-<span class="" style="white-space:pre">           </span>case R_TYPE(GLOB_DAT):<span class="" style="white-space:pre">    </span>/* word32 B + S */</div><div>+<span class="" style="white-space:pre">                </span>case R_TYPE(ABS32):<span class="" style="white-space:pre">       </span>/* word32 (S + A) | T */</div>
<div>+<span class="" style="white-space:pre">           </span>case R_TYPE(GLOB_DAT):<span class="" style="white-space:pre">    </span>/* word32 (S + A) | T */</div><div> <span class="" style="white-space:pre">                  </span>if (__predict_true(RELOC_ALIGNED_P(where))) {</div>
<div>-<span class="" style="white-space:pre">                           </span>tmp = *where + (Elf_Addr)sect->base + symvalue;</div><div>+<span class="" style="white-space:pre">                                </span>tmp = *where + symvalue; /* S + A*/</div><div> <span class="" style="white-space:pre">                               </span>/* Set the Thumb bit, if needed.  */</div>
<div> <span class="" style="white-space:pre">                           </span>if (ELF_ST_TYPE(syminfo) == STT_ARM_TFUNC)</div><div style>Now, x.rap can work all ok.</div><div style><br></div><div style>2. questions about dumplicated symbols</div>
<div style>#rap ld ./x.rap</div><div style>./x.rap loaded</div><div style>#cp x.rap b.rap</div><div style>#rap ld ./b.rap</div><div style>#./b.rap loaded</div><div style><div>[/] # rap ls</div><div> App        DL Handle  Name</div>
<div> 0x50582fb8 0x505904a0 ./x.rap</div><div> 0x50596ce0 0x505904a0 ./b.rap</div></div><div><br></div><div style>Is it ok for this?b.rap and x.rap have the same symbols.</div><div style>It seems b.rap and x.rap both have their local "global_symbols" and share the rtems kernel image symbols. I am not sure about this.</div>
<div style><br></div><div style>rtems_rtl_match_name is used to match whether this rap is loaded or not, but I think  there maybe something wrong with it.</div><div style><div>bool rtems_rtl_match_name (rtems_rtl_obj_t* obj, const char* name)</div>
<div>{</div><div>  const char* n1 = obj->oname;</div><div>  while ((*n1 != '\0') && (*n1 != '\n') && (*n1 != '/') &&</div><div>         (*name != '\0') && (*name != '/') && (*n1 == *name))</div>
<div>  {</div><div>    ++n1;</div><div>    ++name;</div><div>  }</div><div>  if (((*n1 == '\0') || (*n1 == '\n') || (*n1 == '/')) &&</div><div>      ((*name == '\0') || (*name == '/')))</div>
<div>    return true;  <b>//It always return true if "rap ld ./x.rap or rap ld ./y.rap"</b></div><div>  return false;</div><div>}</div><div><br></div><div style>I have an idea. each loaded rap file symbol table is chained in a list, and the rap file</div>
<div style>which will be loaded should first search the list to decide which symbol is needed to reloaced and which was already relocated in the list. And also the match name method should be corrected.</div><div style><br>
</div><div style>Thanks in advance for your comments.</div><div><br></div></div><div style><br></div><div style>3. </div><div style>I am reading the linker code now, and have a few questions about the host side.</div><div style>
About "extend the RTEMS linker to support a new option that instructs it to place  object files from ELF archives into a RAP format archive file"</div><div style><br></div><div style>I think there maybe some same points with label '2' to avoid dumplicated symbols.But I am not sure.</div>
<div style><br></div><div style>a single elf relocated object file is converted to a rap format file. At last all the rap format files is archived in to an archive file. The runtime loader should be capable to handle the rap archive file. And the purpose of introducing rap archive file  is to avoid dumplicated symbols. Is this right? </div>
<div style><br></div><div style>4. About the new tool</div><div style>I was trying to figure out how the linker works.And now have a basic knowledge of it.</div><div style>But I do not know the significance of the new tool. Is the new tool is used to convert one elf file to one rap format file?Hope you can give me some advice about this point.</div>
<div style><br></div><div style>Thanks.</div><div style><br></div><div style>Regards,</div><div style>Peng.</div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/4/23 Chris Johns <span dir="ltr"><<a href="mailto:chrisj@rtems.org" target="_blank">chrisj@rtems.org</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">Peng Fan wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
    I have tested x.rap on Tiny6410 board. It works now.<br>
    The patch is listed in <a href="https://gist.github.com/MrVan/5440197" target="_blank">https://gist.github.com/MrVan/<u></u>5440197</a><br>
</blockquote>
<br></div>
Thanks for this. It is excellent work. I have reviewed the patch and I will take off line what I need from you to get the changes merged.<span class="HOEnZb"><font color="#888888"><br>
<br>
Chris<br>
</font></span></blockquote></div><br></div>