mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-14 10:37:38 -04:00
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:
parent
2ac962aceb
commit
a62eced78a
2 changed files with 16 additions and 0 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue