From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LNAyl-0004Ac-SM for qemu-devel@nongnu.org; Wed, 14 Jan 2009 14:00:39 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LNAyl-00048l-2J for qemu-devel@nongnu.org; Wed, 14 Jan 2009 14:00:39 -0500 Received: from [199.232.76.173] (port=38191 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LNAyk-00048S-Ph for qemu-devel@nongnu.org; Wed, 14 Jan 2009 14:00:38 -0500 Received: from savannah.gnu.org ([199.232.41.3]:57663 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LNAyk-0006ZG-Ba for qemu-devel@nongnu.org; Wed, 14 Jan 2009 14:00:38 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LNAyj-0006rI-QP for qemu-devel@nongnu.org; Wed, 14 Jan 2009 19:00:37 +0000 Received: from blueswir1 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LNAyi-0006r9-QY for qemu-devel@nongnu.org; Wed, 14 Jan 2009 19:00:37 +0000 MIME-Version: 1.0 Errors-To: blueswir1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Blue Swirl Message-Id: Date: Wed, 14 Jan 2009 19:00:36 +0000 Subject: [Qemu-devel] [6303] Add noreturn function attribute Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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 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 #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 #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 #include @@ -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);