[Top][All Lists]
[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [6303] Add noreturn function attribute,
Blue Swirl <=