Query on linker scripts
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
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
participants (2)
-
Carlo Caione -
Vaibhav Jain