Fix .ncbss from possibly overlapping .ncdata in plugins/codecs.

If .bss wasn't large enough, and .ncdata was empty, .ncbss would be
at an address overlapping the alignment-padded end of .ncdata and
and linking would fail with an overlap error.

There also should no longer be an issue that needs special correction
with iramcopy and empty .bss. The .maps look good in that case.

Change-Id: I02bf73a0acef2c0c04b5d135ecf4e18fb97ee339
This commit is contained in:
Michael Sevakis 2013-07-10 22:30:50 -04:00
parent 18f9486e3b
commit 5c2ad2fd36

View file

@ -247,16 +247,15 @@ SECTIONS
{
*(.rodata*)
#if defined(IRAMSIZE) && IRAMSIZE == 0
*(.irodata)
*(.irodata)
#endif
. = ALIGN(0x4);
} > PLUGIN_RAM
.data :
{
*(.data*)
#if defined(IRAMSIZE) && IRAMSIZE == 0
*(.idata)
*(.idata)
#endif
} > PLUGIN_RAM
@ -266,15 +265,11 @@ SECTIONS
. = ALIGN(CACHEALIGN_SIZE);
*(.ncdata*)
. = ALIGN(CACHEALIGN_SIZE);
/* EABI currently needs iramcopy defined here, otherwise .iram can sometimes
have an incorrect load address, breaking codecs. */
#if defined(IRAMSIZE)
iramcopy = . - NOCACHE_BASE;
#endif
} AT> PLUGIN_RAM
/* This definition is used when NOCACHE_BASE is 0. The address offset bug only
seems to occur when the empty .ncdata is present. */
#elif defined(IRAMSIZE)
. -= NOCACHE_BASE;
#endif
#if defined(IRAMSIZE) && IRAMSIZE != 0
iramcopy = .;
#endif
@ -286,33 +281,13 @@ SECTIONS
#endif
}
#if defined(IRAMSIZE) && IRAMSIZE != 0
.iram IRAMORIG : AT ( iramcopy)
{
iramstart = .;
*(.icode)
*(.irodata)
*(.idata)
iramend = .;
} > PLUGIN_IRAM
.ibss (NOLOAD) :
{
iedata = .;
*(.ibss)
. = ALIGN(0x4);
iend = .;
} > PLUGIN_IRAM
#endif
.bss (NOLOAD) :
.bss . (NOLOAD) :
{
plugin_bss_start = .;
_plugin_bss_start = .;
*(.bss*)
#if defined(IRAMSIZE) && IRAMSIZE == 0
*(.ibss)
*(.ibss)
#endif
*(COMMON)
. = ALIGN(0x4);
@ -325,15 +300,35 @@ SECTIONS
*(.ncbss*)
. = ALIGN(CACHEALIGN_SIZE);
} AT> PLUGIN_RAM
. -= NOCACHE_BASE;
#endif
/* Restore . */
.pluginend . - NOCACHE_BASE :
/* Final end of plugin after IRAM setup */
.pluginend :
{
_plugin_end_addr = .;
plugin_end_addr = .;
}
#if defined(IRAMSIZE) && IRAMSIZE != 0
.iram IRAMORIG : AT (iramcopy)
{
iramstart = .;
*(.icode)
*(.irodata)
*(.idata)
iramend = .;
} > PLUGIN_IRAM
.ibss (NOLOAD) :
{
iedata = .;
*(.ibss)
. = ALIGN(0x4);
iend = .;
} > PLUGIN_IRAM
#endif
/* Special trick to avoid a linker error when no other sections are
left after garbage collection (plugin not for this platform) */
.comment 0 :