All of lore.kernel.org
 help / color / mirror / Atom feed
* Query on linker scripts
@ 2012-03-24 18:45 Pranay Kumar Srivastava
       [not found] ` <CAKuUYSwPiuGTa+8r6O+-GMLu9e6dXOXNfDHu4UBx2yvrHcQyvw@mail.gmail.com>
  0 siblings, 1 reply; 9+ messages in thread
From: Pranay Kumar Srivastava @ 2012-03-24 18:45 UTC (permalink / raw)
  To: kernelnewbies

On 03/24/2012 11:52 PM, Pranay Kumar Srivastava wrote:
>
> ________________________________________
> From: kernelnewbies-bounces+pranay.shrivastava=hcl.com at kernelnewbies.org [kernelnewbies-bounces+pranay.shrivastava=hcl.com at kernelnewbies.org] On Behalf Of kernelnewbies-request at kernelnewbies.org [kernelnewbies-request at kernelnewbies.org]
> Sent: Saturday, March 24, 2012 9:30 PM
> To: kernelnewbies at kernelnewbies.org
> Subject: Kernelnewbies Digest, Vol 16, Issue 29
>
> Send Kernelnewbies mailing list submissions to
>          kernelnewbies at kernelnewbies.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
>          http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> or, via email, send a message with subject or body 'help' to
>          kernelnewbies-request at kernelnewbies.org
>
> You can reach the person managing the list at
>          kernelnewbies-owner at kernelnewbies.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Kernelnewbies digest..."
>
>
> Today's Topics:
>
>     1. Query on linker scripts (Vaibhav Jain)
>     2. Re: Query on linker scripts (Carlo Caione)
>
>
> ----------------------------------------------------------------------
>
> Message: 1
> Date: Fri, 23 Mar 2012 21:43:40 -0700
> From: Vaibhav Jain<vjoss197@gmail.com>
> Subject: Query on linker scripts
> To: kernelnewbies at kernelnewbies.org
> Message-ID:
>          <CAKuUYSw=_zZykPWeTbJsGEYPPSroWK+whm0o5L_PnCManVcrng@mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Hi,
>
> Recently I have started reading tutorials for writing a small kernel. All
> such tutorials mention use of linker scripts. I have
> read few articles on linker scritps but I am stuck on one thing. I am
> unable to understand the use of defining new symbols in linker scripts.
> Using a linker script to arrange different sections in the object file is
> understandable but defining symbols which are not referenced anywhere in
> the script
> is confusing. An example is the use of symbols sbss and ebss in the bss
> section as show in the script below
>
>
> ENTRY (loader)
> SECTIONS
> {
>      . = 0x00100000;
>      .text ALIGN (0x1000) :
>      {
>          *(.text)
>      }
>      .rodata ALIGN (0x1000) :
>      {
>          *(.rodata*)
>      }
>      .data ALIGN (0x1000) :
>      {
>          *(.data)
>      }
>      .bss :
>      {
>          sbss = .;
>          *(COMMON)
>          *(.bss)
>          ebss = .;
>      }
> }
>
> Please explain how defining such symbols is useful.
>
> Thanks
> Vaibhav Jain
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120323/6e1741da/attachment-0001.html
>
> ------------------------------
>
> Message: 2
> Date: Sat, 24 Mar 2012 16:26:38 +0100
> From: Carlo Caione<carlo.caione@gmail.com>
> Subject: Re: Query on linker scripts
> To: Vaibhav Jain<vjoss197@gmail.com>
> Cc: kernelnewbies at kernelnewbies.org
> Message-ID:<4F6DE7AE.9070808@gmail.com>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> On 24/03/2012 05:43, Vaibhav Jain wrote:
>> Hi,
> [cut]
>> is confusing. An example is the use of symbols sbss and ebss in the bss
>> section as show in the script below
>> ENTRY (loader)
>> SECTIONS
>> {
>>       . = 0x00100000;
>>       .text ALIGN (0x1000) :
>>       {
>>           *(.text)
>>       }
>>       .rodata ALIGN (0x1000) :
>>       {
>>           *(.rodata*)
>>       }
>>       .data ALIGN (0x1000) :
>>       {
>>           *(.data)
>>       }
>>       .bss :
>>       {
>>           sbss = .;
The sbss will tell you the start of the section bss.
>>           *(COMMON)
>>           *(.bss)
>>           ebss = .;

The ebss will tell you the end of the section bss. The use of these symbols is since you'd like to have the kernel's section be safe from every other process.

This way you can know where your kernel code starts and ends. So you can set up the pages( ptes and pgds as well) in a sensible manner for your kernel.

So in the above case you'd have like two variables in your C code like extern long sbss,ebss and then to get the location where the bss begins you'd do &sbss while to get its ending address you'd do &ebss. So when you subtract these two that should give you the size of your bss section.

However you should do ebss=. after your .bss section and make it ALIGN(0x1000) like others so you get page aligned section values cuz it makes easier to arrange for the pte and pgd for kernel. Also you should set the GDT values for kernel only code separately accordingly from the values you get after an initial temporary GDT has been setup earlier by GRUB or by you.

More appropriate would be to get the size of text and data sections as well since you wouldn't want to accidentally bump into kernel code.



>>       }
>> }
>
> I'm not sure if you are OT, anyway...
>
> i.e. they are useful if you want to clear the bss section before execution.
>
> [snippet for ARM proc]
> ...
>          ldr     r2, =_sbss
>          b       LoopFillZerobss
> /* Zero fill the bss segment. */
> FillZerobss:
>          movs    r3, #0
>          str     r3, [r2], #4
>
> LoopFillZerobss:
>          ldr     r3, = _ebss
>          cmp     r2, r3
>          bcc     FillZerobss
> ...
>
> --
> Carlo Caione
>
>
>
> ------------------------------
>
> _______________________________________________
> Kernelnewbies mailing list
> Kernelnewbies at kernelnewbies.org
> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>
>
> End of Kernelnewbies Digest, Vol 16, Issue 29
> *********************************************

::DISCLAIMER::
-----------------------------------------------------------------------------------------------------------------------

The contents of this e-mail and any attachment(s) are confidential and intended for the named recipient(s) only.
It shall not attach any liability on the originator or HCL or its affiliates. Any views or opinions presented in
this email are solely those of the author and may not necessarily reflect the opinions of HCL or its affiliates.
Any form of reproduction, dissemination, copying, disclosure, modification, distribution and / or publication of
this message without the prior written consent of the author of this e-mail is strictly prohibited. If you have
received this email in error please delete it and notify the sender immediately. Before opening any mail and
attachments please check them for viruses and defect.

-----------------------------------------------------------------------------------------------------------------------

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
       [not found] ` <CAKuUYSwPiuGTa+8r6O+-GMLu9e6dXOXNfDHu4UBx2yvrHcQyvw@mail.gmail.com>
@ 2012-03-26  6:41   ` Pranay Kumar Srivastava
  2012-03-26 11:01     ` Vaibhav Jain
  0 siblings, 1 reply; 9+ messages in thread
From: Pranay Kumar Srivastava @ 2012-03-26  6:41 UTC (permalink / raw)
  To: kernelnewbies



> -----Original Message-----
> From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> Sent: Sunday, March 25, 2012 3:19 AM
> To: Pranay Kumar Srivastava
> Subject: Re: Query on linker scripts
> 
> 
> Hi Pranay,
> Thanks for replying!. I am still not clear about this as I have not
> reached
> the part of the tutorial which talks about pte and pgd. Could you
> please explain this?point about safety of section?with a simpler
> example?

I'll take example from your script.
.bss :
{
          sbss = .;
          *(COMMON)
          *(.bss)
          ebss = .;
}

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'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

.bss ALIGN(4096):
{
          sbss = .;
          *(COMMON)
          *(.bss)
}
ebss = ABSOLUTE(.); /*This should be a page aligned address*/



 Also, from your reply I figured out that it is not compulsory
> to define such symbols and the names can be different than sbss and
> ebss. Am I right ?

The names can be anything it'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's linker script since you might not require all the variables chosen or you might need some additional variables due to the design you've chosen for your kernel.

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/simple-example.html 

> 
> 
> Thanks
> Vaibhav Jain

Please include kernelnewbies at kernelnewbies.org in cc when replying. You are likely to get more responses that way.

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
  2012-03-26  6:41   ` Pranay Kumar Srivastava
@ 2012-03-26 11:01     ` Vaibhav Jain
  2012-03-26 11:54       ` Pranay Kumar Srivastava
  2012-03-26 15:14       ` Dave Hylands
  0 siblings, 2 replies; 9+ messages in thread
From: Vaibhav Jain @ 2012-03-26 11:01 UTC (permalink / raw)
  To: kernelnewbies

Thanks a lot for the explanation and the link!! I have just one more
question about
linker scripts. I am not clear about alignment of sections. Is it necessary
to align sections?
Can the alignment be different from 4096?
In the script that I provided the text and data sections are aligned while
the bss section is not. Is there
a reason for it ?

Thanks
Vaibhav Jain



On Sun, Mar 25, 2012 at 11:41 PM, Pranay Kumar Srivastava <
Pranay.Shrivastava@hcl.com> wrote:

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
  2012-03-26 11:01     ` Vaibhav Jain
@ 2012-03-26 11:54       ` Pranay Kumar Srivastava
  2012-03-27  1:38         ` Vaibhav Jain
  2012-03-26 15:14       ` Dave Hylands
  1 sibling, 1 reply; 9+ messages in thread
From: Pranay Kumar Srivastava @ 2012-03-26 11:54 UTC (permalink / raw)
  To: kernelnewbies


> -----Original Message-----
> From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> Sent: Monday, March 26, 2012 4:31 PM
> To: Pranay Kumar Srivastava
> Cc: kernelnewbies at kernelnewbies.org
> Subject: Re: Query on linker scripts
> 
> Thanks a lot for the explanation and the link!! I have just one more
> question about
> linker scripts. I am not clear about alignment of sections. Is it
> necessary to align sections?

Its not mandatory but helps you to know in terms of pages how many are in use, otherwise while creating ptes for the kernel you'll need to calculate from the number of bytes the kernel has consumed and find out pages required. Otherwise its just a simple shift operation to find out the corresponding page from the page's beginning address.
 

> Can the alignment be different from 4096?
> In the script that I provided the text and data sections are aligned
> while the bss section is not. Is there
> a reason for it ?

The alignment generally corresponds to page granularity in the case of linker scripts. It's not about aligning data in C which can be done on say 4byte 8 byte etc... This alignment is done so that when the time comes to protect kernel and start user space applications you'll know which pages corresponds to kernel and can't be swapped and must be protected. Instead of thinking about protecting how many bytes kernel uses, think about how many pages the kernel uses.

Well, bss isn't part of your executable. It's stack and hence it doesn't make sense to have ALIGN there since you'll be responsible of setting up the stack for the kernel and using it. The data/text are part of the executable so you would want to have them aligned on page boundary so that when you load the kernel those sections would be loaded at page aligned address and end at page boundary.


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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
  2012-03-26 11:01     ` Vaibhav Jain
  2012-03-26 11:54       ` Pranay Kumar Srivastava
@ 2012-03-26 15:14       ` Dave Hylands
  1 sibling, 0 replies; 9+ messages in thread
From: Dave Hylands @ 2012-03-26 15:14 UTC (permalink / raw)
  To: kernelnewbies

Hi Vaibhav Jain,

On Mon, Mar 26, 2012 at 4:01 AM, Vaibhav Jain <vjoss197@gmail.com> wrote:
> Thanks a lot for the explanation and the link!! I have just one more
> question about
> linker scripts. I am not clear about alignment of sections. Is it necessary
> to align sections?
> Can the alignment be different from 4096?
> In the script that I provided the text and data sections are aligned while
> the bss section is not. Is there
> a reason for it ?

The reason for using page alignments is so that the kernel can enforce
different access types to the various sections. This is tyically done
using the MMU, which would require page alignment.

So, for example, the text section would allow executable code, and
should be read-only. The .rodata section should not allow executable
code and be read-only, and the .data section should not allow
executable code, and should allow writes.

By having the sections page aligned, it allows the kernel to enforce
these using the MMU.

-- 
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
  2012-03-26 11:54       ` Pranay Kumar Srivastava
@ 2012-03-27  1:38         ` Vaibhav Jain
  2012-03-27 11:00           ` Pranay Kumar Srivastava
  0 siblings, 1 reply; 9+ messages in thread
From: Vaibhav Jain @ 2012-03-27  1:38 UTC (permalink / raw)
  To: kernelnewbies

Hi,

Just one more query. bss is not a part of the executable but the linker
script defines
an output bss  section.  This means that the linker script only causes the
symbols and section header for the bss section
to be added to executable. Am I right ?

Thanks
Vaibhav Jain

On Mon, Mar 26, 2012 at 4:54 AM, Pranay Kumar Srivastava <
Pranay.Shrivastava@hcl.com> wrote:

>
> > -----Original Message-----
> > From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> > Sent: Monday, March 26, 2012 4:31 PM
> > To: Pranay Kumar Srivastava
> > Cc: kernelnewbies at kernelnewbies.org
> > Subject: Re: Query on linker scripts
> >
> > Thanks a lot for the explanation and the link!! I have just one more
> > question about
> > linker scripts. I am not clear about alignment of sections. Is it
> > necessary to align sections?
>
> Its not mandatory but helps you to know in terms of pages how many are in
> use, otherwise while creating ptes for the kernel you'll need to calculate
> from the number of bytes the kernel has consumed and find out pages
> required. Otherwise its just a simple shift operation to find out the
> corresponding page from the page's beginning address.
>
>
> > Can the alignment be different from 4096?
> > In the script that I provided the text and data sections are aligned
> > while the bss section is not. Is there
> > a reason for it ?
>
> The alignment generally corresponds to page granularity in the case of
> linker scripts. It's not about aligning data in C which can be done on say
> 4byte 8 byte etc... This alignment is done so that when the time comes to
> protect kernel and start user space applications you'll know which pages
> corresponds to kernel and can't be swapped and must be protected. Instead
> of thinking about protecting how many bytes kernel uses, think about how
> many pages the kernel uses.
>
> Well, bss isn't part of your executable. It's stack and hence it doesn't
> make sense to have ALIGN there since you'll be responsible of setting up
> the stack for the kernel and using it. The data/text are part of the
> executable so you would want to have them aligned on page boundary so that
> when you load the kernel those sections would be loaded at page aligned
> address and end at page boundary.
>
>
> >
> > Thanks
> > Vaibhav Jain
> >
> >
> >
> > On Sun, Mar 25, 2012 at 11:41 PM, Pranay Kumar Srivastava
> > <Pranay.Shrivastava@hcl.com> wrote:
> >
> >
> > > -----Original Message-----
> > > From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> > > Sent: Sunday, March 25, 2012 3:19 AM
> > > To: Pranay Kumar Srivastava
> > > Subject: Re: Query on linker scripts
> > >
> > >
> > > Hi Pranay,
> > > Thanks for replying!. I am still not clear about this as I have not
> > > reached
> > > the part of the tutorial which talks about pte and pgd. Could you
> > > please explain this point about safety of section with a simpler
> > > example?
> > I'll take example from your script.
> > .bss :
> > {
> >          sbss = .;
> >          *(COMMON)
> >          *(.bss)
> >          ebss = .;
> > }
> > 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'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
> >
> > .bss ALIGN(4096):
> > {
> >          sbss = .;
> >          *(COMMON)
> >          *(.bss)
> > }
> > ebss = ABSOLUTE(.); /*This should be a page aligned address*/
> >
> >
> >
> >  Also, from your reply I figured out that it is not compulsory
> > > to define such symbols and the names can be different than sbss and
> > > ebss. Am I right ?
> > The names can be anything it'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's linker script
> > since you might not require all the variables chosen or you might need
> > some additional variables due to the design you've chosen for your
> > kernel.
> >
> > http://docs.redhat.com/docs/en-
> > US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/simple-
> > example.html
> >
> > >
> > >
> > > Thanks
> > > Vaibhav Jain
> >
> > Please include kernelnewbies at kernelnewbies.org in cc when replying. You
> > are likely to get more responses that way.
> >
> > >
> > > On Sat, Mar 24, 2012 at 11:45 AM, Pranay Kumar Srivastava
> > > <Pranay.Shrivastava@hcl.com> wrote:
> > > On 03/24/2012 11:52 PM, Pranay Kumar Srivastava wrote:
> > > >
> > > > ________________________________________
> > > > From: kernelnewbies-
> > > bounces+pranay.shrivastava=hcl.com at kernelnewbies.org [kernelnewbies-
> > > bounces+pranay.shrivastava=hcl.com at kernelnewbies.org] On Behalf Of
> > > kernelnewbies-request at kernelnewbies.org [kernelnewbies-
> > > request at kernelnewbies.org]
> > > > Sent: Saturday, March 24, 2012 9:30 PM
> > > > To: kernelnewbies at kernelnewbies.org
> > > > Subject: Kernelnewbies Digest, Vol 16, Issue 29
> > > >
> > > > Send Kernelnewbies mailing list submissions to
> > > >          kernelnewbies at kernelnewbies.org
> > > >
> > > > To subscribe or unsubscribe via the World Wide Web, visit
> > > >
> > >  http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > > or, via email, send a message with subject or body 'help' to
> > > >          kernelnewbies-request at kernelnewbies.org
> > > >
> > > > You can reach the person managing the list at
> > > >          kernelnewbies-owner at kernelnewbies.org
> > > >
> > > > When replying, please edit your Subject line so it is more specific
> > > > than "Re: Contents of Kernelnewbies digest..."
> > > >
> > > >
> > > > Today's Topics:
> > > >
> > > >     1. Query on linker scripts (Vaibhav Jain)
> > > >     2. Re: Query on linker scripts (Carlo Caione)
> > > >
> > > >
> > > > -------------------------------------------------------------------
> > --
> > > -
> > > >
> > > > Message: 1
> > > > Date: Fri, 23 Mar 2012 21:43:40 -0700
> > > > From: Vaibhav Jain<vjoss197@gmail.com>
> > > > Subject: Query on linker scripts
> > > > To: kernelnewbies at kernelnewbies.org
> > > > Message-ID:
> > > >
> > >  <CAKuUYSw=_zZykPWeTbJsGEYPPSroWK+whm0o5L_PnCManVcrng@mail.gmail.com>
> > > > Content-Type: text/plain; charset="iso-8859-1"
> > > >
> > > > Hi,
> > > >
> > > > Recently I have started reading tutorials for writing a small
> > kernel.
> > > All
> > > > such tutorials mention use of linker scripts. I have
> > > > read few articles on linker scritps but I am stuck on one thing. I
> > am
> > > > unable to understand the use of defining new symbols in linker
> > > scripts.
> > > > Using a linker script to arrange different sections in the object
> > > file is
> > > > understandable but defining symbols which are not referenced
> > anywhere
> > > in
> > > > the script
> > > > is confusing. An example is the use of symbols sbss and ebss in the
> > > bss
> > > > section as show in the script below
> > > >
> > > >
> > > > ENTRY (loader)
> > > > SECTIONS
> > > > {
> > > >      . = 0x00100000;
> > > >      .text ALIGN (0x1000) :
> > > >      {
> > > >          *(.text)
> > > >      }
> > > >      .rodata ALIGN (0x1000) :
> > > >      {
> > > >          *(.rodata*)
> > > >      }
> > > >      .data ALIGN (0x1000) :
> > > >      {
> > > >          *(.data)
> > > >      }
> > > >      .bss :
> > > >      {
> > > >          sbss = .;
> > > >          *(COMMON)
> > > >          *(.bss)
> > > >          ebss = .;
> > > >      }
> > > > }
> > > >
> > > > Please explain how defining such symbols is useful.
> > > >
> > > > Thanks
> > > > Vaibhav Jain
> > > > -------------- next part --------------
> > > > An HTML attachment was scrubbed...
> > > > URL:
> > >
> > http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/2012
> > > 0323/6e1741da/attachment-0001.html
> > > >
> > > > ------------------------------
> > > >
> > > > Message: 2
> > > > Date: Sat, 24 Mar 2012 16:26:38 +0100
> > > > From: Carlo Caione<carlo.caione@gmail.com>
> > > > Subject: Re: Query on linker scripts
> > > > To: Vaibhav Jain<vjoss197@gmail.com>
> > > > Cc: kernelnewbies at kernelnewbies.org
> > > > Message-ID:<4F6DE7AE.9070808@gmail.com>
> > > > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> > > >
> > > > On 24/03/2012 05:43, Vaibhav Jain wrote:
> > > >> Hi,
> > > > [cut]
> > > >> is confusing. An example is the use of symbols sbss and ebss in
> > the
> > > bss
> > > >> section as show in the script below
> > > >> ENTRY (loader)
> > > >> SECTIONS
> > > >> {
> > > >>       . = 0x00100000;
> > > >>       .text ALIGN (0x1000) :
> > > >>       {
> > > >>           *(.text)
> > > >>       }
> > > >>       .rodata ALIGN (0x1000) :
> > > >>       {
> > > >>           *(.rodata*)
> > > >>       }
> > > >>       .data ALIGN (0x1000) :
> > > >>       {
> > > >>           *(.data)
> > > >>       }
> > > >>       .bss :
> > > >>       {
> > > >>           sbss = .;
> > > The sbss will tell you the start of the section bss.
> > > >>           *(COMMON)
> > > >>           *(.bss)
> > > >>           ebss = .;
> > > The ebss will tell you the end of the section bss. The use of these
> > > symbols is since you'd like to have the kernel's section be safe from
> > > every other process.
> > >
> > > This way you can know where your kernel code starts and ends. So you
> > > can set up the pages( ptes and pgds as well) in a sensible manner for
> > > your kernel.
> > >
> > > So in the above case you'd have like two variables in your C code
> > like
> > > extern long sbss,ebss and then to get the location where the bss
> > begins
> > > you'd do &sbss while to get its ending address you'd do &ebss. So
> > when
> > > you subtract these two that should give you the size of your bss
> > > section.
> > >
> > > However you should do ebss=. after your .bss section and make it
> > > ALIGN(0x1000) like others so you get page aligned section values cuz
> > it
> > > makes easier to arrange for the pte and pgd for kernel. Also you
> > should
> > > set the GDT values for kernel only code separately accordingly from
> > the
> > > values you get after an initial temporary GDT has been setup earlier
> > by
> > > GRUB or by you.
> > >
> > > More appropriate would be to get the size of text and data sections
> > as
> > > well since you wouldn't want to accidentally bump into kernel code.
> > >
> > >
> > >
> > > >>       }
> > > >> }
> > > >
> > > > I'm not sure if you are OT, anyway...
> > > >
> > > > i.e. they are useful if you want to clear the bss section before
> > > execution.
> > > >
> > > > [snippet for ARM proc]
> > > > ...
> > > >          ldr     r2, =_sbss
> > > >          b       LoopFillZerobss
> > > > /* Zero fill the bss segment. */
> > > > FillZerobss:
> > > >          movs    r3, #0
> > > >          str     r3, [r2], #4
> > > >
> > > > LoopFillZerobss:
> > > >          ldr     r3, = _ebss
> > > >          cmp     r2, r3
> > > >          bcc     FillZerobss
> > > > ...
> > > >
> > > > --
> > > > Carlo Caione
> > > >
> > > >
> > > >
> > > > ------------------------------
> > > >
> > > > _______________________________________________
> > > > Kernelnewbies mailing list
> > > > Kernelnewbies at kernelnewbies.org
> > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > >
> > > >
> > > > End of Kernelnewbies Digest, Vol 16, Issue 29
> > > > *********************************************
> > >
> > > ::DISCLAIMER::
> > > ---------------------------------------------------------------------
> > --
> > > ------------------------------------------------
> > >
> > > The contents of this e-mail and any attachment(s) are confidential
> > and
> > > intended for the named recipient(s) only.
> > > It shall not attach any liability on the originator or HCL or its
> > > affiliates. Any views or opinions presented in
> > > this email are solely those of the author and may not necessarily
> > > reflect the opinions of HCL or its affiliates.
> > > Any form of reproduction, dissemination, copying, disclosure,
> > > modification, distribution and / or publication of
> > > this message without the prior written consent of the author of this
> > e-
> > > mail is strictly prohibited. If you have
> > > received this email in error please delete it and notify the sender
> > > immediately. Before opening any mail and
> > > attachments please check them for viruses and defect.
> > >
> > > ---------------------------------------------------------------------
> > --
> > > ------------------------------------------------
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120326/d65281b9/attachment-0001.html 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
  2012-03-27  1:38         ` Vaibhav Jain
@ 2012-03-27 11:00           ` Pranay Kumar Srivastava
  0 siblings, 0 replies; 9+ messages in thread
From: Pranay Kumar Srivastava @ 2012-03-27 11:00 UTC (permalink / raw)
  To: kernelnewbies



> -----Original Message-----
> From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> Sent: Tuesday, March 27, 2012 7:09 AM
> To: Pranay Kumar Srivastava
> Cc: kernelnewbies at kernelnewbies.org
> Subject: Re: Query on linker scripts
> 
> Hi,
> 
> Just one more query. bss is not a part of the executable but the linker
> script defines
> an output bss? section.? This means that the linker script only causes
> the symbols and section header?for the bss section
> to be added to executable. Am I right ?

That would be correct if you are actually using an executable with a proper format like elf or coff. But if you are using a flat binary, in that case there won't be any symbol table maintained and everything will just get linked to wherever you've specified in your linker script.

BSS still won't be part of you executable so what you can do is, find out much the bss section requires and then leave that space. Your stack would then start somewhere say 4KB above the BSS section while the data section would be right below the bss section.
So that way, your stack and your data are linearly one after another. Ofcourse you can choose any other way to load the values.

Bottom line... leave the pages required by the kernel alone and set up your GDT so that text section always gets loaded in the r/o part of your memory.


> 
> Thanks
> Vaibhav Jain
> On Mon, Mar 26, 2012 at 4:54 AM, Pranay Kumar Srivastava
> <Pranay.Shrivastava@hcl.com> wrote:
> 
> > -----Original Message-----
> > From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> > Sent: Monday, March 26, 2012 4:31 PM
> > To: Pranay Kumar Srivastava
> > Cc: kernelnewbies at kernelnewbies.org
> > Subject: Re: Query on linker scripts
> >
> > Thanks a lot for the explanation and the link!! I have just one more
> > question about
> > linker scripts. I am not clear about alignment of sections. Is it
> > necessary to align sections?
> Its not mandatory but helps you to know in terms of pages how many are
> in use, otherwise while creating ptes for the kernel you'll need to
> calculate from the number of bytes the kernel has consumed and find out
> pages required. Otherwise its just a simple shift operation to find out
> the corresponding page from the page's beginning address.
> 
> 
> > Can the alignment be different from 4096?
> > In the script that I provided the text and data sections are aligned
> > while the bss section is not. Is there
> > a reason for it ?
> The alignment generally corresponds to page granularity in the case of
> linker scripts. It's not about aligning data in C which can be done on
> say 4byte 8 byte etc... This alignment is done so that when the time
> comes to protect kernel and start user space applications you'll know
> which pages corresponds to kernel and can't be swapped and must be
> protected. Instead of thinking about protecting how many bytes kernel
> uses, think about how many pages the kernel uses.
> 
> Well, bss isn't part of your executable. It's stack and hence it
> doesn't make sense to have ALIGN there since you'll be responsible of
> setting up the stack for the kernel and using it. The data/text are
> part of the executable so you would want to have them aligned on page
> boundary so that when you load the kernel those sections would be
> loaded at page aligned address and end at page boundary.
> 
> 
> >
> > Thanks
> > Vaibhav Jain
> >
> >
> >
> > On Sun, Mar 25, 2012 at 11:41 PM, Pranay Kumar Srivastava
> > <Pranay.Shrivastava@hcl.com> wrote:
> >
> >
> > > -----Original Message-----
> > > From: Vaibhav Jain [mailto:vjoss197 at gmail.com]
> > > Sent: Sunday, March 25, 2012 3:19 AM
> > > To: Pranay Kumar Srivastava
> > > Subject: Re: Query on linker scripts
> > >
> > >
> > > Hi Pranay,
> > > Thanks for replying!. I am still not clear about this as I have not
> > > reached
> > > the part of the tutorial which talks about pte and pgd. Could you
> > > please explain this?point about safety of section?with a simpler
> > > example?
> > I'll take example from your script.
> > .bss :
> > {
> > ? ? ? ? ?sbss = .;
> > ? ? ? ? ?*(COMMON)
> > ? ? ? ? ?*(.bss)
> > ? ? ? ? ?ebss = .;
> > }
> > 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'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
> >
> > .bss ALIGN(4096):
> > {
> > ? ? ? ? ?sbss = .;
> > ? ? ? ? ?*(COMMON)
> > ? ? ? ? ?*(.bss)
> > }
> > ebss = ABSOLUTE(.); /*This should be a page aligned address*/
> >
> >
> >
> > ?Also, from your reply I figured out that it is not compulsory
> > > to define such symbols and the names can be different than sbss and
> > > ebss. Am I right ?
> > The names can be anything it'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's linker script
> > since you might not require all the variables chosen or you might
> need
> > some additional variables due to the design you've chosen for your
> > kernel.
> >
> > http://docs.redhat.com/docs/en-
> > US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/simple-
> > example.html
> >
> > >
> > >
> > > Thanks
> > > Vaibhav Jain
> >
> > Please include kernelnewbies at kernelnewbies.org in cc when replying.
> You
> > are likely to get more responses that way.
> >
> > >
> > > On Sat, Mar 24, 2012 at 11:45 AM, Pranay Kumar Srivastava
> > > <Pranay.Shrivastava@hcl.com> wrote:
> > > On 03/24/2012 11:52 PM, Pranay Kumar Srivastava wrote:
> > > >
> > > > ________________________________________
> > > > From: kernelnewbies-
> > > bounces+pranay.shrivastava=hcl.com at kernelnewbies.org
> [kernelnewbies-
> > > bounces+pranay.shrivastava=hcl.com at kernelnewbies.org] On Behalf Of
> > > kernelnewbies-request at kernelnewbies.org [kernelnewbies-
> > > request at kernelnewbies.org]
> > > > Sent: Saturday, March 24, 2012 9:30 PM
> > > > To: kernelnewbies at kernelnewbies.org
> > > > Subject: Kernelnewbies Digest, Vol 16, Issue 29
> > > >
> > > > Send Kernelnewbies mailing list submissions to
> > > > ? ? ? ? ?kernelnewbies at kernelnewbies.org
> > > >
> > > > To subscribe or unsubscribe via the World Wide Web, visit
> > > >
> > > ?http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > > or, via email, send a message with subject or body 'help' to
> > > > ? ? ? ? ?kernelnewbies-request at kernelnewbies.org
> > > >
> > > > You can reach the person managing the list at
> > > > ? ? ? ? ?kernelnewbies-owner at kernelnewbies.org
> > > >
> > > > When replying, please edit your Subject line so it is more
> specific
> > > > than "Re: Contents of Kernelnewbies digest..."
> > > >
> > > >
> > > > Today's Topics:
> > > >
> > > > ? ? 1. Query on linker scripts (Vaibhav Jain)
> > > > ? ? 2. Re: Query on linker scripts (Carlo Caione)
> > > >
> > > >
> > > > -----------------------------------------------------------------
> --
> > --
> > > -
> > > >
> > > > Message: 1
> > > > Date: Fri, 23 Mar 2012 21:43:40 -0700
> > > > From: Vaibhav Jain<vjoss197@gmail.com>
> > > > Subject: Query on linker scripts
> > > > To: kernelnewbies at kernelnewbies.org
> > > > Message-ID:
> > > >
> > >
> ?<CAKuUYSw=_zZykPWeTbJsGEYPPSroWK+whm0o5L_PnCManVcrng@mail.gmail.com>
> > > > Content-Type: text/plain; charset="iso-8859-1"
> > > >
> > > > Hi,
> > > >
> > > > Recently I have started reading tutorials for writing a small
> > kernel.
> > > All
> > > > such tutorials mention use of linker scripts. I have
> > > > read few articles on linker scritps but I am stuck on one thing.
> I
> > am
> > > > unable to understand the use of defining new symbols in linker
> > > scripts.
> > > > Using a linker script to arrange different sections in the object
> > > file is
> > > > understandable but defining symbols which are not referenced
> > anywhere
> > > in
> > > > the script
> > > > is confusing. An example is the use of symbols sbss and ebss in
> the
> > > bss
> > > > section as show in the script below
> > > >
> > > >
> > > > ENTRY (loader)
> > > > SECTIONS
> > > > {
> > > > ? ? ?. = 0x00100000;
> > > > ? ? ?.text ALIGN (0x1000) :
> > > > ? ? ?{
> > > > ? ? ? ? ?*(.text)
> > > > ? ? ?}
> > > > ? ? ?.rodata ALIGN (0x1000) :
> > > > ? ? ?{
> > > > ? ? ? ? ?*(.rodata*)
> > > > ? ? ?}
> > > > ? ? ?.data ALIGN (0x1000) :
> > > > ? ? ?{
> > > > ? ? ? ? ?*(.data)
> > > > ? ? ?}
> > > > ? ? ?.bss :
> > > > ? ? ?{
> > > > ? ? ? ? ?sbss = .;
> > > > ? ? ? ? ?*(COMMON)
> > > > ? ? ? ? ?*(.bss)
> > > > ? ? ? ? ?ebss = .;
> > > > ? ? ?}
> > > > }
> > > >
> > > > Please explain how defining such symbols is useful.
> > > >
> > > > Thanks
> > > > Vaibhav Jain
> > > > -------------- next part --------------
> > > > An HTML attachment was scrubbed...
> > > > URL:
> > >
> >
> http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/2012
> > > 0323/6e1741da/attachment-0001.html
> > > >
> > > > ------------------------------
> > > >
> > > > Message: 2
> > > > Date: Sat, 24 Mar 2012 16:26:38 +0100
> > > > From: Carlo Caione<carlo.caione@gmail.com>
> > > > Subject: Re: Query on linker scripts
> > > > To: Vaibhav Jain<vjoss197@gmail.com>
> > > > Cc: kernelnewbies at kernelnewbies.org
> > > > Message-ID:<4F6DE7AE.9070808@gmail.com>
> > > > Content-Type: text/plain; charset=ISO-8859-1; format=flowed
> > > >
> > > > On 24/03/2012 05:43, Vaibhav Jain wrote:
> > > >> Hi,
> > > > [cut]
> > > >> is confusing. An example is the use of symbols sbss and ebss in
> > the
> > > bss
> > > >> section as show in the script below
> > > >> ENTRY (loader)
> > > >> SECTIONS
> > > >> {
> > > >> ? ? ? . = 0x00100000;
> > > >> ? ? ? .text ALIGN (0x1000) :
> > > >> ? ? ? {
> > > >> ? ? ? ? ? *(.text)
> > > >> ? ? ? }
> > > >> ? ? ? .rodata ALIGN (0x1000) :
> > > >> ? ? ? {
> > > >> ? ? ? ? ? *(.rodata*)
> > > >> ? ? ? }
> > > >> ? ? ? .data ALIGN (0x1000) :
> > > >> ? ? ? {
> > > >> ? ? ? ? ? *(.data)
> > > >> ? ? ? }
> > > >> ? ? ? .bss :
> > > >> ? ? ? {
> > > >> ? ? ? ? ? sbss = .;
> > > The sbss will tell you the start of the section bss.
> > > >> ? ? ? ? ? *(COMMON)
> > > >> ? ? ? ? ? *(.bss)
> > > >> ? ? ? ? ? ebss = .;
> > > The ebss will tell you the end of the section bss. The use of these
> > > symbols is since you'd like to have the kernel's section be safe
> from
> > > every other process.
> > >
> > > This way you can know where your kernel code starts and ends. So
> you
> > > can set up the pages( ptes and pgds as well) in a sensible manner
> for
> > > your kernel.
> > >
> > > So in the above case you'd have like two variables in your C code
> > like
> > > extern long sbss,ebss and then to get the location where the bss
> > begins
> > > you'd do &sbss while to get its ending address you'd do &ebss. So
> > when
> > > you subtract these two that should give you the size of your bss
> > > section.
> > >
> > > However you should do ebss=. after your .bss section and make it
> > > ALIGN(0x1000) like others so you get page aligned section values
> cuz
> > it
> > > makes easier to arrange for the pte and pgd for kernel. Also you
> > should
> > > set the GDT values for kernel only code separately accordingly from
> > the
> > > values you get after an initial temporary GDT has been setup
> earlier
> > by
> > > GRUB or by you.
> > >
> > > More appropriate would be to get the size of text and data sections
> > as
> > > well since you wouldn't want to accidentally bump into kernel code.
> > >
> > >
> > >
> > > >> ? ? ? }
> > > >> }
> > > >
> > > > I'm not sure if you are OT, anyway...
> > > >
> > > > i.e. they are useful if you want to clear the bss section before
> > > execution.
> > > >
> > > > [snippet for ARM proc]
> > > > ...
> > > > ? ? ? ? ?ldr ? ? r2, =_sbss
> > > > ? ? ? ? ?b ? ? ? LoopFillZerobss
> > > > /* Zero fill the bss segment. */
> > > > FillZerobss:
> > > > ? ? ? ? ?movs ? ?r3, #0
> > > > ? ? ? ? ?str ? ? r3, [r2], #4
> > > >
> > > > LoopFillZerobss:
> > > > ? ? ? ? ?ldr ? ? r3, = _ebss
> > > > ? ? ? ? ?cmp ? ? r2, r3
> > > > ? ? ? ? ?bcc ? ? FillZerobss
> > > > ...
> > > >
> > > > --
> > > > Carlo Caione
> > > >
> > > >
> > > >
> > > > ------------------------------
> > > >
> > > > _______________________________________________
> > > > Kernelnewbies mailing list
> > > > Kernelnewbies at kernelnewbies.org
> > > > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> > > >
> > > >
> > > > End of Kernelnewbies Digest, Vol 16, Issue 29
> > > > *********************************************
> > >
> > > ::DISCLAIMER::
> > > -------------------------------------------------------------------
> --
> > --
> > > ------------------------------------------------
> > >
> > > The contents of this e-mail and any attachment(s) are confidential
> > and
> > > intended for the named recipient(s) only.
> > > It shall not attach any liability on the originator or HCL or its
> > > affiliates. Any views or opinions presented in
> > > this email are solely those of the author and may not necessarily
> > > reflect the opinions of HCL or its affiliates.
> > > Any form of reproduction, dissemination, copying, disclosure,
> > > modification, distribution and / or publication of
> > > this message without the prior written consent of the author of
> this
> > e-
> > > mail is strictly prohibited. If you have
> > > received this email in error please delete it and notify the sender
> > > immediately. Before opening any mail and
> > > attachments please check them for viruses and defect.
> > >
> > > -------------------------------------------------------------------
> --
> > --
> > > ------------------------------------------------

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
  2012-03-24  4:43 Vaibhav Jain
@ 2012-03-24 15:26 ` Carlo Caione
  0 siblings, 0 replies; 9+ messages in thread
From: Carlo Caione @ 2012-03-24 15:26 UTC (permalink / raw)
  To: kernelnewbies

On 24/03/2012 05:43, Vaibhav Jain wrote:
> Hi,
[cut]
> is confusing. An example is the use of symbols sbss and ebss in the bss
> section as show in the script below
> ENTRY (loader)
> SECTIONS
> {
>      . = 0x00100000;
>      .text ALIGN (0x1000) :
>      {
>          *(.text)
>      }
>      .rodata ALIGN (0x1000) :
>      {
>          *(.rodata*)
>      }
>      .data ALIGN (0x1000) :
>      {
>          *(.data)
>      }
>      .bss :
>      {
>          sbss = .;
>          *(COMMON)
>          *(.bss)
>          ebss = .;
>      }
> }

I'm not sure if you are OT, anyway...

i.e. they are useful if you want to clear the bss section before execution.

[snippet for ARM proc]
...
	ldr	r2, =_sbss
	b	LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
	movs	r3, #0
	str	r3, [r2], #4

LoopFillZerobss:
	ldr	r3, = _ebss
	cmp	r2, r3
	bcc	FillZerobss
...

--
Carlo Caione

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Query on linker scripts
@ 2012-03-24  4:43 Vaibhav Jain
  2012-03-24 15:26 ` Carlo Caione
  0 siblings, 1 reply; 9+ messages in thread
From: Vaibhav Jain @ 2012-03-24  4:43 UTC (permalink / raw)
  To: kernelnewbies

Hi,

Recently I have started reading tutorials for writing a small kernel. All
such tutorials mention use of linker scripts. I have
read few articles on linker scritps but I am stuck on one thing. I am
unable to understand the use of defining new symbols in linker scripts.
Using a linker script to arrange different sections in the object file is
understandable but defining symbols which are not referenced anywhere in
the script
is confusing. An example is the use of symbols sbss and ebss in the bss
section as show in the script below


ENTRY (loader)
SECTIONS
{
    . = 0x00100000;
    .text ALIGN (0x1000) :
    {
        *(.text)
    }
    .rodata ALIGN (0x1000) :
    {
        *(.rodata*)
    }
    .data ALIGN (0x1000) :
    {
        *(.data)
    }
    .bss :
    {
        sbss = .;
        *(COMMON)
        *(.bss)
        ebss = .;
    }
}

Please explain how defining such symbols is useful.

Thanks
Vaibhav Jain
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120323/6e1741da/attachment.html 

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2012-03-27 11:00 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-03-24 18:45 Query on linker scripts Pranay Kumar Srivastava
     [not found] ` <CAKuUYSwPiuGTa+8r6O+-GMLu9e6dXOXNfDHu4UBx2yvrHcQyvw@mail.gmail.com>
2012-03-26  6:41   ` Pranay Kumar Srivastava
2012-03-26 11:01     ` Vaibhav Jain
2012-03-26 11:54       ` Pranay Kumar Srivastava
2012-03-27  1:38         ` Vaibhav Jain
2012-03-27 11:00           ` Pranay Kumar Srivastava
2012-03-26 15:14       ` Dave Hylands
  -- strict thread matches above, loose matches on Subject: below --
2012-03-24  4:43 Vaibhav Jain
2012-03-24 15:26 ` Carlo Caione

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.