How to place variables into a 2nd .bss / common section?

Michael Weise michael.weise@ek-team.de
Tue Sep 3 09:23:00 GMT 2013


Hi,

I'm working on an embedded system with a coldfire (m68k-elf) cpu.
The system has two different ram areas:
1. External DRAM (the main ram module)
2. Internal SRAM 

The first and normal ".bss" section works just fine (see below).

To put global variables into the second section called
".bss_sram" I use the following macro:

#define SECTION_BSS_SRAM __attribute__((section(".bss_sram")))

Unfortunately, GCC generates assembler-code with the "@progbits"
attribute:

.section	.bss_sram,"aw",@progbits

which makes the linker mark the section as loadable and reserve
space in the executable (not necessary & unwanted):

"m68k-elf-objdump -h $EXECUTABLE" shows the problem:
  5 .bss          01fac966  4000001c  00001700  0000401c  2**1
                  ALLOC
  6 .bss_sram     00001094  80000000  80000000  00010000  2**11
                  CONTENTS, ALLOC, LOAD, DATA

I didn't find any options to tell GCC that this is a section with
"common" data, but instead found a "dirty workaround" to inject
the "@nobits" attribute into the assembly code:

http://stackoverflow.com/questions/6252812/what-does-the-aw-flag-in-the-section-attribute-mean

Is this the only way to have a second common section or is there a
more beautiful way / option?

Thanks
Michael



More information about the Gcc-help mailing list