1
0
Fork 0
forked from len0rd/rockbox

Introduce NORETURN_ATTR wrapper for __attribute__((noreturn)), using this and a bit further cleanup in main gets rid of a warning when compiling for android.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27788 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2010-08-12 13:38:25 +00:00
parent 70ebe46d74
commit 0e2286f226
19 changed files with 71 additions and 35 deletions

View file

@ -20,6 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "config.h" #include "config.h"
#include "gcc_extensions.h"
#include "storage.h" #include "storage.h"
#include "disk.h" #include "disk.h"
#include "fat.h" #include "fat.h"
@ -112,35 +113,41 @@
#include "m5636.h" #include "m5636.h"
#endif #endif
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
#define MAIN_NORETURN_ATTR NORETURN_ATTR
#else
/* gcc adds an implicit 'return 0;' at the end of main(), causing a warning
* with noreturn attribute */
#define MAIN_NORETURN_ATTR
#endif
#if (CONFIG_PLATFORM & PLATFORM_HOSTED) #if (CONFIG_PLATFORM & PLATFORM_HOSTED)
#include "sim_tasks.h" #include "sim_tasks.h"
#endif #endif
#ifdef HAVE_SDL #if (CONFIG_PLATFORM & PLATFORM_SDL)
#include "system-sdl.h" #include "system-sdl.h"
#define HAVE_ARGV_MAIN
/* Don't use SDL_main on windows -> no more stdio redirection */
#if defined(WIN32)
#undef main
#endif
#endif #endif
/*#define AUTOROCK*/ /* define this to check for "autostart.rock" on boot */ /*#define AUTOROCK*/ /* define this to check for "autostart.rock" on boot */
static void init(void); static void init(void);
#ifdef HAVE_SDL
#if defined(WIN32) && defined(main)
/* Don't use SDL_main on windows -> no more stdio redirection */
#undef main
#endif
int main(int argc, char *argv[])
{
#ifdef APPLICATION
paths_init();
#endif
sys_handle_argv(argc, argv);
#else
/* main(), and various functions called by main() and init() may be /* main(), and various functions called by main() and init() may be
* be INIT_ATTR. These functions must not be called after the final call * be INIT_ATTR. These functions must not be called after the final call
* to root_menu() at the end of main() * to root_menu() at the end of main()
* see definition of INIT_ATTR in config.h */ * see definition of INIT_ATTR in config.h */
int main(void) INIT_ATTR __attribute__((noreturn)); #ifdef HAVE_ARGV_MAIN
int main(int argc, char *argv[]) INIT_ATTR MAIN_NORETURN_ATTR ;
int main(int argc, char *argv[])
{
sys_handle_argv(argc, argv);
#else
int main(void) INIT_ATTR MAIN_NORETURN_ATTR;
int main(void) int main(void)
{ {
#endif #endif
@ -328,6 +335,9 @@ static void init_tagcache(void)
static void init(void) static void init(void)
{ {
#ifdef APPLICATION
paths_init();
#endif
system_init(); system_init();
kernel_init(); kernel_init();
buffer_init(); buffer_init();
@ -707,7 +717,8 @@ static void init(void)
} }
#ifdef CPU_PP #ifdef CPU_PP
void __attribute__((noreturn)) cop_main(void) void cop_main(void) MAIN_NORETURN_ATTR;
void cop_main(void)
{ {
/* This is the entry point for the coprocessor /* This is the entry point for the coprocessor
Anyone not running an upgraded bootloader will never reach this point, Anyone not running an upgraded bootloader will never reach this point,

View file

@ -553,7 +553,7 @@ void os_display_char (zchar);
void os_display_string (const zchar *); void os_display_string (const zchar *);
void os_draw_picture (int, int, int); void os_draw_picture (int, int, int);
void os_erase_area (int, int, int, int); void os_erase_area (int, int, int, int);
void os_fatal (const char *) __attribute__((noreturn)); void os_fatal (const char *) NORETURN_ATTR;
void os_finish_with_sample (int); void os_finish_with_sample (int);
int os_font_data (int, int *, int *); int os_font_data (int, int *, int *);
void os_init_screen (void); void os_init_screen (void);

View file

@ -18,6 +18,9 @@
* KIND, either express or implied. * KIND, either express or implied.
* *
****************************************************************************/ ****************************************************************************/
#include "config.h"
#include "gcc_extensions.h"
#include "pcm_record.h" #include "pcm_record.h"
#include "system.h" #include "system.h"
#include "kernel.h" #include "kernel.h"
@ -1458,7 +1461,7 @@ static void pcmrec_resume(void)
logf("pcmrec_resume done"); logf("pcmrec_resume done");
} /* pcmrec_resume */ } /* pcmrec_resume */
static void pcmrec_thread(void) __attribute__((noreturn)); static void pcmrec_thread(void) NORETURN_ATTR;
static void pcmrec_thread(void) static void pcmrec_thread(void)
{ {
struct queue_event ev; struct queue_event ev;

View file

@ -18,11 +18,13 @@
* KIND, either express or implied. * KIND, either express or implied.
* *
****************************************************************************/ ****************************************************************************/
#include "config.h"
#ifndef __ROOT_MENU_H__ #ifndef __ROOT_MENU_H__
#define __ROOT_MENU_H__ #define __ROOT_MENU_H__
void root_menu(void) __attribute__((noreturn)); #include "config.h"
#include "gcc_extensions.h"
void root_menu(void) NORETURN_ATTR;
enum { enum {
/* from old menu api, but still required*/ /* from old menu api, but still required*/

View file

@ -22,6 +22,7 @@
#include "system.h" #include "system.h"
#include <stdio.h> #include <stdio.h>
#include "kernel.h" #include "kernel.h"
#include "gcc_extensions.h"
#include "string.h" #include "string.h"
#include "adc.h" #include "adc.h"
#include "powermgmt.h" #include "powermgmt.h"
@ -296,7 +297,7 @@ static void handle_untar(void)
} }
/* Try to load the firmware and run it */ /* Try to load the firmware and run it */
static void __attribute__((noreturn)) handle_firmware_load(void) static void NORETURN_ATTR handle_firmware_load(void)
{ {
int rc = load_firmware(load_buf, BOOTFILE, int rc = load_firmware(load_buf, BOOTFILE,
load_buf_size); load_buf_size);

View file

@ -26,6 +26,7 @@
#include <system.h> #include <system.h>
#include <inttypes.h> #include <inttypes.h>
#include "config.h" #include "config.h"
#include "gcc_extensions.h"
#include "lcd.h" #include "lcd.h"
#ifdef USE_ROCKBOX_USB #ifdef USE_ROCKBOX_USB
#include "usb.h" #include "usb.h"
@ -70,7 +71,7 @@ static void usb_mode(void)
} }
#endif /* USE_ROCKBOX_USB */ #endif /* USE_ROCKBOX_USB */
void main(void) __attribute__((noreturn)); void main(void) NORETURN_ATTR;
void main(void) void main(void)
{ {
unsigned char* loadbuffer; unsigned char* loadbuffer;

View file

@ -25,6 +25,7 @@
#include <inttypes.h> #include <inttypes.h>
#include <stddef.h> #include <stddef.h>
#include <stdbool.h> #include <stdbool.h>
#include "gcc_extensions.h"
/* Priority scheduling (when enabled with HAVE_PRIORITY_SCHEDULING) works /* Priority scheduling (when enabled with HAVE_PRIORITY_SCHEDULING) works
* by giving high priority threads more CPU time than lower priority threads * by giving high priority threads more CPU time than lower priority threads
@ -385,7 +386,7 @@ void thread_thaw(unsigned int thread_id);
/* Wait for a thread to exit */ /* Wait for a thread to exit */
void thread_wait(unsigned int thread_id); void thread_wait(unsigned int thread_id);
/* Exit the current thread */ /* Exit the current thread */
void thread_exit(void) __attribute__((noreturn)); void thread_exit(void) NORETURN_ATTR;
#if defined(DEBUG) || defined(ROCKBOX_HAS_LOGF) #if defined(DEBUG) || defined(ROCKBOX_HAS_LOGF)
#define ALLOW_REMOVE_THREAD #define ALLOW_REMOVE_THREAD
/* Remove a thread from the scheduler */ /* Remove a thread from the scheduler */

View file

@ -43,4 +43,11 @@
#endif #endif
#if defined(__GNUC__) && (__GNUC__ >= 3 || \
(__GNUC__ >= 2 && __GNUC_MINOR__ >= 5))
#define NORETURN_ATTR __attribute__((noreturn))
#else
#define NORETURN_ATTR
#endif
#endif /* _GCC_EXTENSIONS_H_ */ #endif /* _GCC_EXTENSIONS_H_ */

View file

@ -23,6 +23,7 @@
* *
****************************************************************************/ ****************************************************************************/
#include "config.h" #include "config.h"
#include "gcc_extensions.h"
#include "cpu.h" #include "cpu.h"
#include "kernel.h" #include "kernel.h"
#include "thread.h" #include "thread.h"
@ -257,7 +258,7 @@ static bool scroll_process_message(int delay)
} }
#endif /* HAVE_REMOTE_LCD */ #endif /* HAVE_REMOTE_LCD */
static void scroll_thread(void) __attribute__((noreturn)); static void scroll_thread(void) NORETURN_ATTR;
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
static void scroll_thread(void) static void scroll_thread(void)

View file

@ -32,6 +32,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "gcc_extensions.h"
#include "as3525.h" #include "as3525.h"
#include "pl180.h" /* SD controller */ #include "pl180.h" /* SD controller */
#include "pl081.h" /* DMA controller */ #include "pl081.h" /* DMA controller */
@ -432,7 +433,7 @@ static int sd_init_card(const int drive)
return 0; return 0;
} }
static void sd_thread(void) __attribute__((noreturn)); static void sd_thread(void) NORETURN_ATTR;
static void sd_thread(void) static void sd_thread(void)
{ {
struct queue_event ev; struct queue_event ev;

View file

@ -23,6 +23,7 @@
#include "config.h" /* for HAVE_MULTIVOLUME */ #include "config.h" /* for HAVE_MULTIVOLUME */
#include "fat.h" #include "fat.h"
#include "thread.h" #include "thread.h"
#include "gcc_extensions.h"
#include "led.h" #include "led.h"
#include "sdmmc.h" #include "sdmmc.h"
#include "system.h" #include "system.h"
@ -616,7 +617,7 @@ static int sd_init_card(const int drive)
return 0; return 0;
} }
static void sd_thread(void) __attribute__((noreturn)); static void sd_thread(void) NORETURN_ATTR;
static void sd_thread(void) static void sd_thread(void)
{ {
struct queue_event ev; struct queue_event ev;

View file

@ -21,6 +21,7 @@
#include "config.h" /* for HAVE_MULTIDRIVE */ #include "config.h" /* for HAVE_MULTIDRIVE */
#include "fat.h" #include "fat.h"
#include "sdmmc.h" #include "sdmmc.h"
#include "gcc_extensions.h"
#ifdef HAVE_HOTSWAP #ifdef HAVE_HOTSWAP
#include "sd-pp-target.h" #include "sd-pp-target.h"
#endif #endif
@ -1105,7 +1106,7 @@ sd_write_error:
} }
} }
static void sd_thread(void) __attribute__((noreturn)); static void sd_thread(void) NORETURN_ATTR;
static void sd_thread(void) static void sd_thread(void)
{ {
struct queue_event ev; struct queue_event ev;

View file

@ -21,6 +21,7 @@
#include "kernel.h" #include "kernel.h"
#include "system.h" #include "system.h"
#include "gcc_extensions.h"
#include "panic.h" #include "panic.h"
#include "avic-imx31.h" #include "avic-imx31.h"
#include "gpio-imx31.h" #include "gpio-imx31.h"
@ -219,9 +220,9 @@ void system_prepare_fw_start(void)
#ifndef BOOTLOADER #ifndef BOOTLOADER
void rolo_restart_firmware(const unsigned char *source, unsigned char *dest, void rolo_restart_firmware(const unsigned char *source, unsigned char *dest,
int length) __attribute__((noreturn)); int length) NORETURN_ATTR;
void __attribute__((noreturn)) void NORETURN_ATTR
rolo_restart(const unsigned char *source, unsigned char *dest, int length) rolo_restart(const unsigned char *source, unsigned char *dest, int length)
{ {
/* Some housekeeping tasks must be performed for a safe changeover */ /* Some housekeeping tasks must be performed for a safe changeover */

View file

@ -25,7 +25,7 @@
/**************************************************************************** /****************************************************************************
* void rolo_restart_firmware(const unsigned char* source, unsigned char* dest, * void rolo_restart_firmware(const unsigned char* source, unsigned char* dest,
* int length) __attribute__((noreturn)); * int length) NORETURN_ATTR;
*/ */
.section .text, "ax", %progbits .section .text, "ax", %progbits
.align 2 .align 2

View file

@ -24,6 +24,7 @@
#include "sd.h" #include "sd.h"
#include "system.h" #include "system.h"
#include <string.h> #include <string.h>
#include "gcc_extensions.h"
#include "thread.h" #include "thread.h"
#include "panic.h" #include "panic.h"
@ -575,7 +576,7 @@ bool sd_removable(IF_MD_NONVOID(int card_no))
#endif /* HAVE_HOTSWAP */ #endif /* HAVE_HOTSWAP */
/*****************************************************************************/ /*****************************************************************************/
static void sd_thread(void) __attribute__((noreturn)); static void sd_thread(void) NORETURN_ATTR;
static void sd_thread(void) static void sd_thread(void)
{ {
struct queue_event ev; struct queue_event ev;

View file

@ -23,6 +23,7 @@
#include <stdio.h> #include <stdio.h>
#include "lcd.h" #include "lcd.h"
#include "font.h" #include "font.h"
#include "gcc_extensions.h"
static const char* const uiename[] = { static const char* const uiename[] = {
"Undefined instruction", "Undefined instruction",
@ -34,7 +35,7 @@ static const char* const uiename[] = {
/* Unexpected Interrupt or Exception handler. Currently only deals with /* Unexpected Interrupt or Exception handler. Currently only deals with
exceptions, but will deal with interrupts later. exceptions, but will deal with interrupts later.
*/ */
void __attribute__((noreturn)) UIE(unsigned int pc, unsigned int num) void NORETURN_ATTR UIE(unsigned int pc, unsigned int num)
{ {
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
lcd_set_backdrop(NULL); lcd_set_backdrop(NULL);

View file

@ -22,6 +22,7 @@
#include "sd.h" #include "sd.h"
#include "system.h" #include "system.h"
#include <string.h> #include <string.h>
#include "gcc_extensions.h"
#include "sdmmc.h" #include "sdmmc.h"
#include "storage.h" #include "storage.h"
#include "led.h" #include "led.h"
@ -642,7 +643,7 @@ sd_write_error:
} }
} }
static void sd_thread(void) __attribute__((noreturn)); static void sd_thread(void) NORETURN_ATTR;
static void sd_thread(void) static void sd_thread(void)
{ {
struct queue_event ev; struct queue_event ev;

View file

@ -20,6 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include <stdio.h> #include <stdio.h>
#include "config.h" #include "config.h"
#include "gcc_extensions.h"
#include "adc.h" #include "adc.h"
#include "system.h" #include "system.h"
#include "lcd.h" #include "lcd.h"
@ -200,7 +201,7 @@ static void system_display_exception_info(unsigned long format,
reliable. The system restarts, but boot often fails with ata error -42. */ reliable. The system restarts, but boot often fails with ata error -42. */
} }
static void UIE(void) __attribute__ ((noreturn)); static void UIE(void) NORETURN_ATTR;
static void UIE(void) static void UIE(void)
{ {
asm volatile("subq.l #4,%sp"); /* phony return address - never used */ asm volatile("subq.l #4,%sp"); /* phony return address - never used */

View file

@ -20,6 +20,7 @@
****************************************************************************/ ****************************************************************************/
#include "config.h" #include "config.h"
#include "gcc_extensions.h"
#include "jz4740.h" #include "jz4740.h"
#include "ata.h" #include "ata.h"
#include "ata_idle_notify.h" #include "ata_idle_notify.h"
@ -47,7 +48,7 @@ static const char sd_thread_name[] = "ata/sd";
static struct event_queue sd_queue; static struct event_queue sd_queue;
static struct mutex sd_mtx; static struct mutex sd_mtx;
static struct wakeup sd_wakeup; static struct wakeup sd_wakeup;
static void sd_thread(void) __attribute__((noreturn)); static void sd_thread(void) NORETURN_ATTR;
static int use_4bit; static int use_4bit;
static int num_6; static int num_6;