<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Jan 3, 2016 at 11:00 PM, Gedare Bloom <span dir="ltr"><<a href="mailto:gedare@rtems.org" target="_blank">gedare@rtems.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On Sun, Jan 3, 2016 at 9:47 PM, Joel Sherrill <<a href="mailto:joel@rtems.org">joel@rtems.org</a>> wrote:<br>
><br>
><br>
> On Sun, Jan 3, 2016 at 8:26 PM, Chris Johns <<a href="mailto:chrisj@rtems.org">chrisj@rtems.org</a>> wrote:<br>>> Can you get a suitable list of functions that must be present in the<br>
>> executable and check they are present with nm?<br>
>><br>
><br>
> It should be simple if the breakage is between the entry point and the rest<br>
> of the BSP. If hello does not include bsp_start() or<br>
> rtems_initialize_data_structures(), then it is known to be broken. This is<br>
> what broke on sis -- the first 16 instructions of the start code had no<br>
> dependency on anything else. So the linkages were satisfied and nothing else<br>
> pulled in. :)<br>
><br>
</span>Such a list should be easy enough to create by building every BSP and<br>
creating a list of functions appearing in every one (known to run).<br>
<span class=""><br></span></blockquote><div><br></div><div>The scripts in rtems-testing/rtems keep a copy of ticker.ralf named </div><div>CPU-BSP-ticker.ralf. For the ones I had laying around that were actually</div><div>in ELF format with symbols still, there were 362 symbols which showed</div><div>up in 68 files (that appears to be the magic maximum number).</div><div><br></div><div><div><br></div><div>file *.ralf | grep ELF | cut -d':' -f1 | while read f</div><div>do</div><div>  target=`echo $f | cut -d'-' -f1`</div><div>  mynm=${target}rtems4.12-nm</div><div><br></div><div>  nm -g ${f} | grep " T " | cut -d' ' -f3</div><div>done | sort | uniq -c | sort -n</div></div><div><br></div><div><br></div><div>There is no guarantee that those 362 symbols are actually really required</div><div>and turning on per-item section linking I hope would reduce that. Perhaps</div><div>a core list of BSP init, RTEMS init, application, and C library referenced</div><div>would be sufficient. For ticker or hello, this would be:</div><div><br></div><div>boot_card()</div><div>bsp_start()</div><div>rtems_initialize_data_structures()</div><div>Init()</div><div><br></div><div>If you managed to link enough to include Init() and this broke the executable,</div><div>then I would expect a very subtle problem that nothing automated will find. </div><div>Something like leaving out interrupt vectors which we wouldn't be looking for.</div><div><br></div><div>I am not even sure about printf() since gcc optimizes constant string prints</div><div>to puts() and the tests can be configured to use printk().</div><div><br></div><div>Any thoughts?</div><div><br></div></div></div></div>