mirror of
https://github.com/Rockbox/rockbox.git
synced 2026-01-22 01:30:35 -05:00
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:
parent
18f9486e3b
commit
5c2ad2fd36
1 changed files with 30 additions and 35 deletions
|
|
@ -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 :
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue