On Tue, Nov 24, 2015 at 07:37:52PM +0100, Florian Weimer wrote: > On 11/24/2015 06:44 PM, Segher Boessenkool wrote: > > On Tue, Nov 24, 2015 at 04:44:23PM +0100, Florian Weimer wrote: > >> It seems that GCC has an optimization that turns > >> > >> static int a = 0; > >> > >> into > >> > >> static int a; > >> > >> and puts the symbol into .bss instead of .data (on GNU/Linux). > >> > >> Is this correct? Would it make sense for glibc to rely on this > >> optimization (purely as an optimization)? > > > > See -fzero-initialized-in-bss. > > Thanks, this settles it. It's available since GCC 4. > > However, there is still a subtle difference for non-static objects. > Adding the initializer turns a tentative definition into a definite one, > and it seems that this can't go into .bss. extern int a; int a = 0; and int b; int b = 0; go to .bss just fine. Did you mean something different? Segher