<div>Thanks a lot for the explanation and the link!! I have just one more question about</div><div>linker scripts. I am not clear about alignment of sections. Is it necessary to align sections? </div><div>Can the alignment be different from 4096?</div>
<div>In the script that I provided the text and data sections are aligned while the bss section is not. Is there </div><div>a reason for it ?</div><div> </div><div>Thanks</div><div>Vaibhav Jain</div><div><br><br> </div><div class="gmail_quote">
On Sun, Mar 25, 2012 at 11:41 PM, Pranay Kumar Srivastava <span dir="ltr">&lt;<a href="mailto:Pranay.Shrivastava@hcl.com">Pranay.Shrivastava@hcl.com</a>&gt;</span> wrote:<br><blockquote style="margin:0px 0px 0px 0.8ex;padding-left:1ex;border-left-color:rgb(204,204,204);border-left-width:1px;border-left-style:solid" class="gmail_quote">
<div class="im"><br>
<br>
&gt; -----Original Message-----<br>
&gt; From: Vaibhav Jain [mailto:<a href="mailto:vjoss197@gmail.com">vjoss197@gmail.com</a>]<br>
&gt; Sent: Sunday, March 25, 2012 3:19 AM<br>
&gt; To: Pranay Kumar Srivastava<br>
&gt; Subject: Re: Query on linker scripts<br>
&gt;<br>
&gt;<br>
</div><div class="im">&gt; Hi Pranay,<br>
&gt; Thanks for replying!. I am still not clear about this as I have not<br>
&gt; reached<br>
&gt; the part of the tutorial which talks about pte and pgd. Could you<br>
&gt; please explain this point about safety of section with a simpler<br>
&gt; example?<br>
<br>
</div>I&#39;ll take example from your script.<br>
<div class="im">.bss :<br>
{<br>
          sbss = .;<br>
          *(COMMON)<br>
          *(.bss)<br>
          ebss = .;<br>
}<br>
<br>
</div>What I wanted to say was instead of taking ebss within .bss section you should take it outside that section. You might need to do ABSOLUTE since . will give you relative values but you&#39;d want absolute values since addresses that you are interested in will begin from the entry point not from a section. So you can try something like this<br>

<br>
.bss ALIGN(4096):<br>
<div class="im">{<br>
          sbss = .;<br>
          *(COMMON)<br>
          *(.bss)<br>
}<br>
</div>ebss = ABSOLUTE(.); /*This should be a page aligned address*/<br>
<div class="im"><br>
<br>
<br>
 Also, from your reply I figured out that it is not compulsory<br>
&gt; to define such symbols and the names can be different than sbss and<br>
&gt; ebss. Am I right ?<br>
<br>
</div>The names can be anything it&#39;s your choice entirely. But being descriptive helps. You should have a close look at the redhat tutorial for linker scripts instead of following someone else&#39;s linker script since you might not require all the variables chosen or you might need some additional variables due to the design you&#39;ve chosen for your kernel.<br>

<br>
<a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/simple-example.html" target="_blank">http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/simple-example.html</a><br>

<br>
&gt;<br>
&gt;<br>
&gt; Thanks<br>
&gt; Vaibhav Jain<br>
<br>
Please include <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a> in cc when replying. You are likely to get more responses that way.<br>
<div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt; On Sat, Mar 24, 2012 at 11:45 AM, Pranay Kumar Srivastava<br>
&gt; &lt;<a href="mailto:Pranay.Shrivastava@hcl.com">Pranay.Shrivastava@hcl.com</a>&gt; wrote:<br>
&gt; On 03/24/2012 11:52 PM, Pranay Kumar Srivastava wrote:<br>
&gt; &gt;<br>
&gt; &gt; ________________________________________<br>
&gt; &gt; From: kernelnewbies-<br>
&gt; bounces+pranay.shrivastava=<a href="mailto:hcl.com@kernelnewbies.org">hcl.com@kernelnewbies.org</a> [kernelnewbies-<br>
&gt; bounces+pranay.shrivastava=<a href="mailto:hcl.com@kernelnewbies.org">hcl.com@kernelnewbies.org</a>] On Behalf Of<br>
&gt; <a href="mailto:kernelnewbies-request@kernelnewbies.org">kernelnewbies-request@kernelnewbies.org</a> [kernelnewbies-<br>
&gt; <a href="mailto:request@kernelnewbies.org">request@kernelnewbies.org</a>]<br>
&gt; &gt; Sent: Saturday, March 24, 2012 9:30 PM<br>
&gt; &gt; To: <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt; Subject: Kernelnewbies Digest, Vol 16, Issue 29<br>
&gt; &gt;<br>
&gt; &gt; Send Kernelnewbies mailing list submissions to<br>
&gt; &gt;          <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt;<br>
&gt; &gt; To subscribe or unsubscribe via the World Wide Web, visit<br>
&gt; &gt;<br>
&gt;  <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt; &gt; or, via email, send a message with subject or body &#39;help&#39; to<br>
&gt; &gt;          <a href="mailto:kernelnewbies-request@kernelnewbies.org">kernelnewbies-request@kernelnewbies.org</a><br>
&gt; &gt;<br>
&gt; &gt; You can reach the person managing the list at<br>
&gt; &gt;          <a href="mailto:kernelnewbies-owner@kernelnewbies.org">kernelnewbies-owner@kernelnewbies.org</a><br>
&gt; &gt;<br>
&gt; &gt; When replying, please edit your Subject line so it is more specific<br>
&gt; &gt; than &quot;Re: Contents of Kernelnewbies digest...&quot;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Today&#39;s Topics:<br>
&gt; &gt;<br>
&gt; &gt;     1. Query on linker scripts (Vaibhav Jain)<br>
&gt; &gt;     2. Re: Query on linker scripts (Carlo Caione)<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ---------------------------------------------------------------------<br>
&gt; -<br>
&gt; &gt;<br>
&gt; &gt; Message: 1<br>
&gt; &gt; Date: Fri, 23 Mar 2012 21:43:40 -0700<br>
&gt; &gt; From: Vaibhav Jain&lt;<a href="mailto:vjoss197@gmail.com">vjoss197@gmail.com</a>&gt;<br>
&gt; &gt; Subject: Query on linker scripts<br>
&gt; &gt; To: <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt; Message-ID:<br>
&gt; &gt;<br>
&gt;  &lt;CAKuUYSw=_<a href="mailto:zZykPWeTbJsGEYPPSroWK%2Bwhm0o5L_PnCManVcrng@mail.gmail.com">zZykPWeTbJsGEYPPSroWK+whm0o5L_PnCManVcrng@mail.gmail.com</a>&gt;<br>
&gt; &gt; Content-Type: text/plain; charset=&quot;iso-8859-1&quot;<br>
&gt; &gt;<br>
&gt; &gt; Hi,<br>
&gt; &gt;<br>
&gt; &gt; Recently I have started reading tutorials for writing a small kernel.<br>
&gt; All<br>
&gt; &gt; such tutorials mention use of linker scripts. I have<br>
&gt; &gt; read few articles on linker scritps but I am stuck on one thing. I am<br>
&gt; &gt; unable to understand the use of defining new symbols in linker<br>
&gt; scripts.<br>
&gt; &gt; Using a linker script to arrange different sections in the object<br>
&gt; file is<br>
&gt; &gt; understandable but defining symbols which are not referenced anywhere<br>
&gt; in<br>
&gt; &gt; the script<br>
&gt; &gt; is confusing. An example is the use of symbols sbss and ebss in the<br>
&gt; bss<br>
&gt; &gt; section as show in the script below<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ENTRY (loader)<br>
&gt; &gt; SECTIONS<br>
&gt; &gt; {<br>
&gt; &gt;      . = 0x00100000;<br>
&gt; &gt;      .text ALIGN (0x1000) :<br>
&gt; &gt;      {<br>
&gt; &gt;          *(.text)<br>
&gt; &gt;      }<br>
&gt; &gt;      .rodata ALIGN (0x1000) :<br>
&gt; &gt;      {<br>
&gt; &gt;          *(.rodata*)<br>
&gt; &gt;      }<br>
&gt; &gt;      .data ALIGN (0x1000) :<br>
&gt; &gt;      {<br>
&gt; &gt;          *(.data)<br>
&gt; &gt;      }<br>
&gt; &gt;      .bss :<br>
&gt; &gt;      {<br>
&gt; &gt;          sbss = .;<br>
&gt; &gt;          *(COMMON)<br>
&gt; &gt;          *(.bss)<br>
&gt; &gt;          ebss = .;<br>
&gt; &gt;      }<br>
&gt; &gt; }<br>
&gt; &gt;<br>
&gt; &gt; Please explain how defining such symbols is useful.<br>
&gt; &gt;<br>
&gt; &gt; Thanks<br>
&gt; &gt; Vaibhav Jain<br>
&gt; &gt; -------------- next part --------------<br>
&gt; &gt; An HTML attachment was scrubbed...<br>
&gt; &gt; URL:<br>
&gt; <a href="http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/2012" target="_blank">http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/2012</a><br>
&gt; 0323/6e1741da/attachment-0001.html<br>
&gt; &gt;<br>
&gt; &gt; ------------------------------<br>
&gt; &gt;<br>
&gt; &gt; Message: 2<br>
&gt; &gt; Date: Sat, 24 Mar 2012 16:26:38 +0100<br>
&gt; &gt; From: Carlo Caione&lt;<a href="mailto:carlo.caione@gmail.com">carlo.caione@gmail.com</a>&gt;<br>
&gt; &gt; Subject: Re: Query on linker scripts<br>
&gt; &gt; To: Vaibhav Jain&lt;<a href="mailto:vjoss197@gmail.com">vjoss197@gmail.com</a>&gt;<br>
&gt; &gt; Cc: <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt; Message-ID:&lt;<a href="mailto:4F6DE7AE.9070808@gmail.com">4F6DE7AE.9070808@gmail.com</a>&gt;<br>
&gt; &gt; Content-Type: text/plain; charset=ISO-8859-1; format=flowed<br>
&gt; &gt;<br>
&gt; &gt; On 24/03/2012 05:43, Vaibhav Jain wrote:<br>
&gt; &gt;&gt; Hi,<br>
&gt; &gt; [cut]<br>
&gt; &gt;&gt; is confusing. An example is the use of symbols sbss and ebss in the<br>
&gt; bss<br>
&gt; &gt;&gt; section as show in the script below<br>
&gt; &gt;&gt; ENTRY (loader)<br>
&gt; &gt;&gt; SECTIONS<br>
&gt; &gt;&gt; {<br>
&gt; &gt;&gt;       . = 0x00100000;<br>
&gt; &gt;&gt;       .text ALIGN (0x1000) :<br>
&gt; &gt;&gt;       {<br>
&gt; &gt;&gt;           *(.text)<br>
&gt; &gt;&gt;       }<br>
&gt; &gt;&gt;       .rodata ALIGN (0x1000) :<br>
&gt; &gt;&gt;       {<br>
&gt; &gt;&gt;           *(.rodata*)<br>
&gt; &gt;&gt;       }<br>
&gt; &gt;&gt;       .data ALIGN (0x1000) :<br>
&gt; &gt;&gt;       {<br>
&gt; &gt;&gt;           *(.data)<br>
&gt; &gt;&gt;       }<br>
&gt; &gt;&gt;       .bss :<br>
&gt; &gt;&gt;       {<br>
&gt; &gt;&gt;           sbss = .;<br>
&gt; The sbss will tell you the start of the section bss.<br>
&gt; &gt;&gt;           *(COMMON)<br>
&gt; &gt;&gt;           *(.bss)<br>
&gt; &gt;&gt;           ebss = .;<br>
&gt; The ebss will tell you the end of the section bss. The use of these<br>
&gt; symbols is since you&#39;d like to have the kernel&#39;s section be safe from<br>
&gt; every other process.<br>
&gt;<br>
&gt; This way you can know where your kernel code starts and ends. So you<br>
&gt; can set up the pages( ptes and pgds as well) in a sensible manner for<br>
&gt; your kernel.<br>
&gt;<br>
&gt; So in the above case you&#39;d have like two variables in your C code like<br>
&gt; extern long sbss,ebss and then to get the location where the bss begins<br>
&gt; you&#39;d do &amp;sbss while to get its ending address you&#39;d do &amp;ebss. So when<br>
&gt; you subtract these two that should give you the size of your bss<br>
&gt; section.<br>
&gt;<br>
&gt; However you should do ebss=. after your .bss section and make it<br>
&gt; ALIGN(0x1000) like others so you get page aligned section values cuz it<br>
&gt; makes easier to arrange for the pte and pgd for kernel. Also you should<br>
&gt; set the GDT values for kernel only code separately accordingly from the<br>
&gt; values you get after an initial temporary GDT has been setup earlier by<br>
&gt; GRUB or by you.<br>
&gt;<br>
&gt; More appropriate would be to get the size of text and data sections as<br>
&gt; well since you wouldn&#39;t want to accidentally bump into kernel code.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; &gt;&gt;       }<br>
&gt; &gt;&gt; }<br>
&gt; &gt;<br>
&gt; &gt; I&#39;m not sure if you are OT, anyway...<br>
&gt; &gt;<br>
&gt; &gt; i.e. they are useful if you want to clear the bss section before<br>
&gt; execution.<br>
&gt; &gt;<br>
&gt; &gt; [snippet for ARM proc]<br>
&gt; &gt; ...<br>
&gt; &gt;          ldr     r2, =_sbss<br>
&gt; &gt;          b       LoopFillZerobss<br>
&gt; &gt; /* Zero fill the bss segment. */<br>
&gt; &gt; FillZerobss:<br>
&gt; &gt;          movs    r3, #0<br>
&gt; &gt;          str     r3, [r2], #4<br>
&gt; &gt;<br>
&gt; &gt; LoopFillZerobss:<br>
&gt; &gt;          ldr     r3, = _ebss<br>
&gt; &gt;          cmp     r2, r3<br>
&gt; &gt;          bcc     FillZerobss<br>
&gt; &gt; ...<br>
&gt; &gt;<br>
&gt; &gt; --<br>
&gt; &gt; Carlo Caione<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; ------------------------------<br>
&gt; &gt;<br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; Kernelnewbies mailing list<br>
&gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; End of Kernelnewbies Digest, Vol 16, Issue 29<br>
&gt; &gt; *********************************************<br>
&gt;<br>
&gt; ::DISCLAIMER::<br>
&gt; -----------------------------------------------------------------------<br>
&gt; ------------------------------------------------<br>
&gt;<br>
&gt; The contents of this e-mail and any attachment(s) are confidential and<br>
&gt; intended for the named recipient(s) only.<br>
&gt; It shall not attach any liability on the originator or HCL or its<br>
&gt; affiliates. Any views or opinions presented in<br>
&gt; this email are solely those of the author and may not necessarily<br>
&gt; reflect the opinions of HCL or its affiliates.<br>
&gt; Any form of reproduction, dissemination, copying, disclosure,<br>
&gt; modification, distribution and / or publication of<br>
&gt; this message without the prior written consent of the author of this e-<br>
&gt; mail is strictly prohibited. If you have<br>
&gt; received this email in error please delete it and notify the sender<br>
&gt; immediately. Before opening any mail and<br>
&gt; attachments please check them for viruses and defect.<br>
&gt;<br>
&gt; -----------------------------------------------------------------------<br>
&gt; ------------------------------------------------<br>
<br>
</div></div></blockquote></div><br>