Linker ignores bss section AT/AT>
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
GNU Arm Embedded Toolchain |
New
|
Undecided
|
Unassigned |
Bug Description
When modifying the linker script to allocate space for .bss in "flash" with AT>, in the same way as you'd normally do for .data et al., the .bss section still does not allocate space in "flash":
Linker script excerpt:
8 MEMORY
9 {
10 flash (rx) : ORIGIN = 0x08000000, LENGTH = 64K
11 sram (rwx) : ORIGIN = 0x20000000, LENGTH = 8K
12 }
...
77 .bss : {
78 PROVIDE(__bss_low = .);
79 *(.bss)
80 *(.bss*)
81 *(COMMON)
82 PROVIDE(__bss_high = .);
83 } > sram AT> flash
84
85 PROVIDE(
86 PROVIDE(
87
88 .data : {
89 PROVIDE(__data_low = .);
90 *(.data*) /* Read-write initialized data */
91 PROVIDE(__data_high = .);
92 } > sram AT> flash
93
94 PROVIDE(
95 PROVIDE(
From this, you'd expect .bss and .data to have similar allocation, however `arm-none-
31 4 .bss 00000064 20000000 08000104 00020000 2**2
32 ALLOC
33 5 .data 00000064 20000064 08000104 00020064 2**2
34 CONTENTS, ALLOC, LOAD, DATA
I.e. no space was allocated for .bss in flash.
Please find attached a testcase with source code and a prebuilt binary `bss-test.elf` as well as its objdump -x output in `bss-test.objdump`
The used build command is:
`arm-none-eabi-gcc -g -mcpu=cortex-m0 -mthumb -nostartfiles -Tcm0-AS.ld main.c cm0-vectors.c -o bss-test.elf`
Release version: 9-2019-q4-major) 9.2.1 20191025 (release) [ARM/arm-9-branch revision 277599]
Rebuild/binary package: binary package
Host machine: Ubuntu 18.04
Error/warnings: none
ps. I know this is not the typical way to allocate uninitialized variables, but I have a specific use case where controlling the allocation for .bss is necessary. I do also have a workaround where I just allocate an empty section of size SIZEOF(.bss) in flash to create the desired allocation.