1
0
Fork 0
forked from len0rd/rockbox

Add a few warning comments about the INIT_ATTR stuff.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25024 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2010-03-04 17:44:57 +00:00
parent 2ac962aceb
commit a62eced78a
2 changed files with 16 additions and 0 deletions

View file

@ -127,6 +127,10 @@ static void init(void);
#ifdef SIMULATOR #ifdef SIMULATOR
void app_main(void) void app_main(void)
#else #else
/* main(), and various functions called by main() and init() may be
* be INIT_ATTR. These functions must not be called after the final call
* to root_menu() at the end of main()
* see definition of INIT_ATTR in config.h */
int main(void) INIT_ATTR __attribute__((noreturn)); int main(void) INIT_ATTR __attribute__((noreturn));
int main(void) int main(void)
#endif #endif
@ -161,6 +165,8 @@ int main(void)
#endif /* #ifdef AUTOROCK */ #endif /* #ifdef AUTOROCK */
global_status.last_volume_change = 0; global_status.last_volume_change = 0;
/* no calls INIT_ATTR functions after this point anymore!
* see definition of INIT_ATTR in config.h */
root_menu(); root_menu();
} }

View file

@ -748,6 +748,16 @@ Lyre prototype 1 */
#define STATICIRAM static #define STATICIRAM static
#endif #endif
#if (defined(CPU_PP) || (CONFIG_CPU == AS3525)) && !defined(SIMULATOR) && !defined(BOOTLOADER) #if (defined(CPU_PP) || (CONFIG_CPU == AS3525)) && !defined(SIMULATOR) && !defined(BOOTLOADER)
/* Functions that have INIT_ATTR attached are NOT guaranteed to survive after
* root_menu() has been called. Their code may be overwritten by other data or
* code in order to save RAM, and references to them might point into
* zombie area.
*
* It is critical that you make sure these functions are only called before
* the final call to root_menu() (see apps/main.c) is called (i.e. basically
* only while main() runs), otherwise things may go wild,
* from crashes to freezes to exploding daps.
*/
#define INIT_ATTR __attribute__ ((section(".init"))) #define INIT_ATTR __attribute__ ((section(".init")))
#define HAVE_INIT_ATTR #define HAVE_INIT_ATTR
#else #else