In my project, I exclude the .cinit section from the linker's auto-generated .cmd file, using the .cfg. I then place the .cinit section using my own .cmd file. Up to this point, everything builds and links. Here is the .map file that gets generated:
>> Linked Thu Oct 31 10:26:36 2013
OUTPUT FILE NAME: <Core0.out>
ENTRY POINT SYMBOL: "_c_int00" address: 008a2900
MEMORY CONFIGURATION
name origin length used unused attr fill
---------------------- -------- --------- -------- -------- ---- --------
PCIE_SHARED 00800000 00000040 00000000 00000040 RW X
L2SRAM 00800040 000fffc0 000b9e09 000461b7 RW X
MSMCSRAM 0c000000 00200000 00022980 001dd680 RW X
DDR3 80000000 80000000 00000000 80000000 RW X
SEGMENT ALLOCATION MAP
run origin load origin length init length attrs members
---------- ----------- ---------- ----------- ----- -------
00800040 00800040 00065b35 00000000 rw-
00800040 00800040 00065b35 00000000 rw- .far
00865b78 00865b78 00000008 00000008 rw-
00865b78 00865b78 00000008 00000008 rw- .fardata.1
00865b80 00865b80 00000080 00000080 r--
00865b80 00865b80 00000080 00000080 r-- .const.1
00865c00 00865c00 0004dbce 0004dbce r-x
00865c00 00865c00 00000400 00000400 r-x .vecs
00866000 00866000 00047ce0 00047ce0 r-x .text
008adce0 008adce0 00005aee 00005aee r-- .const.2
008b37d0 008b37d0 000029ca 000029ca rw-
008b37d0 008b37d0 000029ca 000029ca rw- .fardata.2
008b61a0 008b61a0 00002000 00000000 rw-
008b61a0 008b61a0 00002000 00000000 rw- .stack
008b81a0 008b81a0 0000012c 0000012c r--
008b81a0 008b81a0 0000012c 0000012c r-- .switch
008b82cc 008b82cc 00000180 00000000 rw-
008b82cc 008b82cc 00000120 00000000 rw- .cio
008b83ec 008b83ec 00000060 00000000 rw- .bss
008b844c 008b844c 00000049 00000049 rw-
008b844c 008b844c 00000049 00000049 rw- .neardata
008b8498 008b8498 00000068 00000068 r--
008b8498 008b8498 00000068 00000068 r-- .rodata
008b8500 008b8500 00001954 00001954 r--
008b8500 008b8500 00000014 00000014 r-- .init_array
008b8514 008b8514 00001940 00001940 r-- .cinit
0c020000 0c020000 00002980 00000000 rw-
0c020000 0c020000 00002400 00000000 rw- .qmss
0c022400 0c022400 00000480 00000000 rw- .cppi
0c022880 0c022880 00000100 00000000 rw- .srioSharedMem
Next, I try to create a symbol in my .cmd pointing to END of .cinit. This results in the error:
"../IcscTestApplication.cmd", line 65: error #10099-D: program will not fit into available memory. placement with alignment fails for section ".cinit" size 0x6afec . Available memory ranges:
L2SRAM size: 0xfffc0 unused: 0x47af7 max hole: 0x47aec
error #10010: errors encountered during linking; "Core0.out" not built
So basically this works:
SECTIONS // part of checksum
{
.cinit: load > L2SRAM, START(_CinitStart)//, END(_CinitEnd)
}
And this does not work:
SECTIONS // part of checksum
{
.cinit: load > L2SRAM, START(_CinitStart), END(_CinitEnd)
}