[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [avr-gcc-list] Order of variables placed in .data and .bss sections

From: Raj Sharma
Subject: Re: [avr-gcc-list] Order of variables placed in .data and .bss sections
Date: Tue, 20 May 2008 11:31:34 -0700 (PDT)

Dear Eric,

Thank you very much for your reply. I googled to see how I can use -fdata-sections to achieve this. But couldnt find much information. Can you please briefly explain how I can use -fdata-sections to enforce data ordering in SRAM ?

----- Original Message ----
From: "Weddington, Eric" <address@hidden>
To: Raj Sharma <address@hidden>; address@hidden
Sent: Tuesday, May 20, 2008 1:06:25 PM
Subject: RE: [avr-gcc-list] Order of variables placed in .data and .bss sections

> -----Original Message-----
> From:
> avr-gcc-list-bounces+eweddington=address@hidden
> [mailto:address@hidden
> org] On Behalf Of Raj Sharma
> Sent: Tuesday, May 20, 2008 11:21 AM
> To: address@hidden
> Subject: [avr-gcc-list] Order of variables placed in .data
> and .bss sections
> Dear all,
> Is there a way to force some order in the way variables
> (global/static) are placed in .data and .bss sections ? For
> example, let my program has 2 initialized global variables g1
> and g2 and 5 uninitialized global variables u1,u2,u3,u4 and
> u5. g1 and g2 are first placed in program memory after .text
> section and __do_copy_data copies them to the starting
> address in SRAM. u1 through u5 are not explictitly stored in
> program memory but __do_copy_bss places them just after g1
> and g2 in SRAM and zeroes them out. I want to know if I can
> somehow specify the order of these variables, say  g1
> followed by g2; then u3,u4,u5,u1,u2.
> I noticed that the order in which the variables are
> declared/defined in C file or assembly file does not
> correspond to the way they are placed in SRAM.
> Thanks in advance,
> Raj

Hello Raj,

In theory it can be done, but you will have to use -fdata-sections, and
a customized linker script. You may also have to either, customize the
startup code in avr-libc, or have some custom code right after startup
that takes care of the .data initialization and .bss clearing yourself.

Why do you need to do this anyway?

I am working on incremental compiling/linking and I need the techniques to preserve maximum similarity between the old and new versions of the executable image.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]