Okay, I've gone back to building with gcc calling ld, vs calling ld
directly.
I'm using Yagarto 20080408.
If I have this in SECTIONS:
/**********************************************/
/* the program code is stored in the .text section, which goes to
Flash */
.text :
{
. = ALIGN(4);
*(.text) /* remaining code */
*(.text.*) /* remaining code */
*(.rodata) /* read-only data (constants) */
*(.rodata*)
*(.glue_7)
*(.glue_7t)
. = ALIGN(4);
_etext = .;
/* This is used by the startup in order to initialize the .data
secion */
} >FLASH
/* .data section which is used for initialized data */
/* This is used by the startup in order to initialize the .data
secion */
_sidata = .;
.data : AT (_sidata)
{
. = ALIGN(4);
/* This is used by the startup in order to initialize the .data
secion */
_sdata = . ;
*(.data)
*(.data.*)
. = ALIGN(4);
/* This is used by the startup in order to initialize the .data
secion */
_edata = . ;
} >DATA
/**********************************************/
My build fails:
c:/yagarto/bin/arm-elf-gcc -Todu-gnuarm.ld -Wall -I. -Iinclude
-gdwarf-2 -MD -DGNUARM -mcpu=arm9e -std=c99 -mlittle-endian -Os -g
-Wl,-Map=odu.map,--cref,--no-warn-mismatch,-static startup/91x_initga.o
main.o 91x_it.o feprom.o atmel_flash_memory.o Internal_flash_memory.o
source/91x_adc.o source/91x_caps.o source/91x_gpio.o source/91x_lib.o
source/91x_rtc.o source/91x_uart.o source/91x_vic.o source/91x_wdg.o
source/91x_fmi.o source/91x_scu.o source/91x_emi.o source/91x_dma.o -o
odu.elf
c:/yagarto/bin/../lib/gcc/arm-elf/4.2.2/../../../../arm-elf/bin/ld.exe:
section .data [0002cf48 -> 0002db77] overlaps section .init [0002cf48 ->
0002cf67]
c:/yagarto/bin/../lib/gcc/arm-elf/4.2.2/../../../../arm-elf/bin/ld.exe:
section .fini [0002cf68 -> 0002cf83] overlaps section .data [0002cf48 ->
0002db77]
collect2: ld returned 1 exit status
make: *** [odu.elf] Error 1
/**********************************************/
However, if I change it to
.data : /* collect all initialized .data sections that go into RAM
*/
It builds successfully!!
So what's the difference?? Does omitting the "AT (location)" statement
actually put the data somewhere else?? I don't understand why that
would be the case. What is actually being done with the data in each
case, and how do the two statements differ??