Hello folks
When I'm linking my DSP/BIOS / DSPlink project, I see that sometimes the .printf and .DDR2$heap section are overlapping in the *.map file:
tconf-generated linker script (excerpt):
GROUP {
.const: align = 0x8 {}
.printf (COPY): {}
} > DDR2
.args: align=4 fill=0 {
*(.args)
. += 0x80;
} > DDR2
.stack: {
GBL_stackbeg = .;
*(.stack)
GBL_stackend = GBL_stackbeg + 0x1000 - 1;
_HWI_STKBOTTOM = GBL_stackbeg + 0x1000 - 4 & ~7;
_HWI_STKTOP = GBL_stackbeg;
} > DDR2
.DDR2$heap: {
DDR2$B = .;
_DDR2_base = .;
DDR2$L = 0x20000;
_DDR2_length = 0x20000;
. += 0x20000;
} > DDR2
...
resulting *.map file (excerpt):
.printf 0 87b4492c 0000003f COPY SECTION
87b4492c 0000003f libdspbios-dsplink.r64P (.printf)
.DDR2$heap
* 0 87b4492c 00020000 UNINITIALIZED
87b4492c 00020000 --HOLE--
.stack 0 87b64930 00001000 UNINITIALIZED
87b64930 00001000 --HOLE--
...
*.out file (excerpt, using ofd6x):
23 .printf 0x87b4492c 0x87b4492c 0x3f 1 N
24 .args 0x87b66c8c 0x87b66c8c 0x80 4 Y
25 .stack 0x87b64930 0x87b64930 0x1000 8 Y
26 .DDR2$heap 0x87b4492c 0x87b4492c 0x20000 1 Y
...
I know that the .printf is not loaded to the target, but I feel a bit uncomfortable with the idea that it overlaps with the heap. Does DSPLink handle this correctly when it loads the target? Before I start providing full linker script/map file/BIOS *.tcf file contents I'd like to know if this is an issue at all or if it's known and intended behaviour of the linker.
As I said, it happens only sometimes. As my source code is changing, the artifact comes and goes away.
My platform is a DM6446, and the versions are
bios 5.32.04
dsplink 1.60
cgt 6.1.13
Cheers,
Sam