Since I've been moving into the MIPS BSP's, there have been a few linkage issues. They've all been related to some missing <span style="font-family:courier new,monospace">sysinit</span> symbols and the solution has been very similar: add a new <span style="font-family:courier new,monospace">.robsdsets</span> output section with the same symbol declarations and includes the same input sections. The only difference between BSP's is what memory region <span style="font-family:courier new,monospace">.robsdsets</span> gets stored in.<br>
<br>Adding a common <span style="font-family:courier new,monospace">linkcmds.base</span> that other <span style="font-family:courier new,monospace">linkcmds</span> could include is one of my GSoC tasks, so here's what I think it should look like:<br clear="all">
<br><span style="font-family:courier new,monospace">    /* for pre rtems-libbsd FreeBSD code */</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    __start_set_sysctl_set = .;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    *(set_sysctl_*);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    __stop_set_sysctl_set = .;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    *(set_domain_*);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    *(set_pseudo_*);</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    /* for rtems-libbsd FreeBSD code */</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    _bsd__start_set_modmetadata_set = .;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    *(_bsd_set_modmetadata_set);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    _bsd__stop_set_modmetadata_set = .;</span><br style="font-family:courier new,monospace">
<br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    _bsd__start_set_sysctl_set = .;</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    *(_bsd_set_sysctl_set);</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    _bsd__stop_set_sysctl_set = .;</span><br style="font-family:courier new,monospace"><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    _bsd__start_set_sysinit_set = .;</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">    *(_bsd_set_sysinit_*);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    _bsd__stop_set_sysinit_set = .;</span><br>
<br>Then each BSP could define <span style="font-family:courier new,monospace">.robsdsets</span> as:<br><br><span style="font-family:courier new,monospace">    .robsdsets : {</span><br style="font-family:courier new,monospace">
<span style="font-family:courier new,monospace">        INCLUDE(linkcmds.base);</span><br style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">    } > region</span><br><br>This would guarantee that <span style="font-family:courier new,monospace">.robsdsets</span> has the minimum required input sections and symbols while still allowing each BSP to add anything before or after the textual substitution and to place it in whatever memory region is necessary for that board (whether that may be a region defined with <span style="font-family:courier new,monospace">MEMORY</span> or a hard-coded address.)<br>
<br>Also, at what point should I begin doing this? I could make <span style="font-family:courier new,monospace">linkcmds.base</span> right now and then modify each broken BSP to use it or I could fix each BSP individually, duplicating what will soon become the contents of <span style="font-family:courier new,monospace">linkcmds.base</span> and then - only after verifying that that was indeed the solution - remove that duplication and replace it with the <span style="font-family:courier new,monospace">INCLUDE()</span> directive.<br>
<br>Thoughts?<br><br>-- <br>- Kevin Polulak (soh_cah_toa)<br>- <a href="http://cybercrud.net" target="_blank">http://cybercrud.net</a><br><br>