qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [6303] Add noreturn function attribute


From: Blue Swirl
Subject: [Qemu-devel] [6303] Add noreturn function attribute
Date: Wed, 14 Jan 2009 19:00:36 +0000

Revision: 6303
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6303
Author:   blueswir1
Date:     2009-01-14 19:00:36 +0000 (Wed, 14 Jan 2009)

Log Message:
-----------
Add noreturn function attribute

Introduce noreturn attribute and attach it to cpu_loop_exit as well as
interrupt/exception helpers for i386. This avoids a bunch of gcc4
warnings.

[ Note that this patch comes with a workaround to include qemu-common.h
even in cases where is currently causes conflicts with dyngen-exec.h.
I've been told that these conflicts will get resolved in the future
(/me will try to have a look as well - as time permits). ]

Signed-off-by: Jan Kiszka <address@hidden>

Modified Paths:
--------------
    trunk/cpu-all.h
    trunk/darwin-user/signal.c
    trunk/exec-all.h
    trunk/linux-user/signal.c
    trunk/qemu-common.h
    trunk/qemu-img.c
    trunk/target-i386/exec.h
    trunk/target-i386/op_helper.c

Modified: trunk/cpu-all.h
===================================================================
--- trunk/cpu-all.h     2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/cpu-all.h     2009-01-14 19:00:36 UTC (rev 6303)
@@ -20,6 +20,8 @@
 #ifndef CPU_ALL_H
 #define CPU_ALL_H
 
+#include "qemu-common.h"
+
 #if defined(__arm__) || defined(__sparc__) || defined(__mips__) || 
defined(__hppa__)
 #define WORDS_ALIGNED
 #endif
@@ -751,9 +753,8 @@
                           int (*cpu_fprintf)(FILE *f, const char *fmt, ...),
                           int flags);
 
-void cpu_abort(CPUState *env, const char *fmt, ...)
-    __attribute__ ((__format__ (__printf__, 2, 3)))
-    __attribute__ ((__noreturn__));
+void noreturn cpu_abort(CPUState *env, const char *fmt, ...)
+    __attribute__ ((__format__ (__printf__, 2, 3)));
 extern CPUState *first_cpu;
 extern CPUState *cpu_single_env;
 extern int64_t qemu_icount;

Modified: trunk/darwin-user/signal.c
===================================================================
--- trunk/darwin-user/signal.c  2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/darwin-user/signal.c  2009-01-14 19:00:36 UTC (rev 6303)
@@ -37,6 +37,7 @@
 #include <signal.h>
 
 #include "qemu.h"
+#include "qemu-common.h"
 
 #define DEBUG_SIGNAL
 
@@ -132,7 +133,7 @@
 }
 
 /* abort execution with signal */
-void __attribute((noreturn)) force_sig(int sig)
+void noreturn force_sig(int sig)
 {
     int host_sig;
     host_sig = target_to_host_signal(sig);

Modified: trunk/exec-all.h
===================================================================
--- trunk/exec-all.h    2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/exec-all.h    2009-01-14 19:00:36 UTC (rev 6303)
@@ -20,6 +20,9 @@
 
 #ifndef _EXEC_ALL_H_
 #define _EXEC_ALL_H_
+
+#include "qemu-common.h"
+
 /* allow to see translation results - the slowdown should be negligible, so we 
leave it */
 #define DEBUG_DISAS
 
@@ -82,7 +85,7 @@
                               target_ulong pc, target_ulong cs_base, int flags,
                               int cflags);
 void cpu_exec_init(CPUState *env);
-void cpu_loop_exit(void);
+void noreturn cpu_loop_exit(void);
 int page_unprotect(target_ulong address, unsigned long pc, void *puc);
 void tb_invalidate_phys_page_range(target_phys_addr_t start, 
target_phys_addr_t end,
                                    int is_cpu_write_access);

Modified: trunk/linux-user/signal.c
===================================================================
--- trunk/linux-user/signal.c   2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/linux-user/signal.c   2009-01-14 19:00:36 UTC (rev 6303)
@@ -28,6 +28,7 @@
 #include <sys/ucontext.h>
 
 #include "qemu.h"
+#include "qemu-common.h"
 #include "target_signal.h"
 
 //#define DEBUG_SIGNAL
@@ -348,7 +349,7 @@
 }
 
 /* abort execution with signal */
-static void __attribute((noreturn)) force_sig(int sig)
+static void noreturn force_sig(int sig)
 {
     int host_sig;
     host_sig = target_to_host_signal(sig);

Modified: trunk/qemu-common.h
===================================================================
--- trunk/qemu-common.h 2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/qemu-common.h 2009-01-14 19:00:36 UTC (rev 6303)
@@ -2,6 +2,13 @@
 #ifndef QEMU_COMMON_H
 #define QEMU_COMMON_H
 
+#define noreturn __attribute__ ((__noreturn__))
+
+/* Hack around the mess dyngen-exec.h causes: We need noreturn in files that
+   cannot include the following headers without conflicts. This condition has
+   to be removed once dyngen is gone. */
+#ifndef __DYNGEN_EXEC_H__
+
 /* we put basic includes here to avoid repeating them in device drivers */
 #include <stdlib.h>
 #include <stdio.h>
@@ -134,9 +141,8 @@
 
 /* Error handling.  */
 
-void hw_error(const char *fmt, ...)
-    __attribute__ ((__format__ (__printf__, 1, 2)))
-    __attribute__ ((__noreturn__));
+void noreturn hw_error(const char *fmt, ...)
+    __attribute__ ((__format__ (__printf__, 1, 2)));
 
 /* IO callbacks.  */
 typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
@@ -179,4 +185,6 @@
 /* Force QEMU to stop what it's doing and service IO */
 void qemu_service_io(void);
 
+#endif /* dyngen-exec.h hack */
+
 #endif

Modified: trunk/qemu-img.c
===================================================================
--- trunk/qemu-img.c    2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/qemu-img.c    2009-01-14 19:00:36 UTC (rev 6303)
@@ -34,7 +34,7 @@
 /* Default to cache=writeback as data integrity is not important for qemu-tcg. 
*/
 #define BRDV_O_FLAGS BDRV_O_CACHE_WB
 
-static void __attribute__((noreturn)) error(const char *fmt, ...)
+static void noreturn error(const char *fmt, ...)
 {
     va_list ap;
     va_start(ap, fmt);

Modified: trunk/target-i386/exec.h
===================================================================
--- trunk/target-i386/exec.h    2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/target-i386/exec.h    2009-01-14 19:00:36 UTC (rev 6303)
@@ -31,6 +31,7 @@
 
 register struct CPUX86State *env asm(AREG0);
 
+#include "qemu-common.h"
 #include "qemu-log.h"
 
 #define EAX (env->regs[R_EAX])
@@ -62,8 +63,8 @@
                   target_ulong next_eip, int is_hw);
 void do_interrupt_user(int intno, int is_int, int error_code,
                        target_ulong next_eip);
-void raise_exception_err(int exception_index, int error_code);
-void raise_exception(int exception_index);
+void noreturn raise_exception_err(int exception_index, int error_code);
+void noreturn raise_exception(int exception_index);
 void do_smm_enter(void);
 
 /* n must be a constant to be efficient */

Modified: trunk/target-i386/op_helper.c
===================================================================
--- trunk/target-i386/op_helper.c       2009-01-14 18:39:52 UTC (rev 6302)
+++ trunk/target-i386/op_helper.c       2009-01-14 19:00:36 UTC (rev 6303)
@@ -1284,8 +1284,8 @@
  * EIP value AFTER the interrupt instruction. It is only relevant if
  * is_int is TRUE.
  */
-static void raise_interrupt(int intno, int is_int, int error_code,
-                            int next_eip_addend)
+static void noreturn raise_interrupt(int intno, int is_int, int error_code,
+                                     int next_eip_addend)
 {
     if (!is_int) {
         helper_svm_check_intercept_param(SVM_EXIT_EXCP_BASE + intno, 
error_code);






reply via email to

[Prev in Thread] Current Thread [Next in Thread]