* [Qemu-devel] [PATCH] Add noreturn function attribute
@ 2008-12-18 13:26 Jan Kiszka
2009-01-14 17:47 ` [Qemu-devel] " Jan Kiszka
0 siblings, 1 reply; 3+ messages in thread
From: Jan Kiszka @ 2008-12-18 13:26 UTC (permalink / raw)
To: qemu-devel
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 <jan.kiszka@siemens.com>
---
cpu-all.h | 7 ++++---
darwin-user/signal.c | 3 ++-
exec-all.h | 5 ++++-
linux-user/signal.c | 3 ++-
qemu-common.h | 14 +++++++++++---
qemu-img.c | 2 +-
target-i386/exec.h | 5 +++--
target-i386/op_helper.c | 4 ++--
8 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/cpu-all.h b/cpu-all.h
index 648264c..329d26d 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -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 @@ void cpu_dump_statistics (CPUState *env, FILE *f,
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;
diff --git a/darwin-user/signal.c b/darwin-user/signal.c
index f412b36..98d0894 100644
--- a/darwin-user/signal.c
+++ b/darwin-user/signal.c
@@ -36,6 +36,7 @@
#include <signal.h>
#include "qemu.h"
+#include "qemu-common.h"
#define DEBUG_SIGNAL
@@ -131,7 +132,7 @@ static inline void free_sigqueue(struct sigqueue *q)
}
/* 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);
diff --git a/exec-all.h b/exec-all.h
index fd96adf..03c174c 100644
--- a/exec-all.h
+++ b/exec-all.h
@@ -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 @@ TranslationBlock *tb_gen_code(CPUState *env,
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);
diff --git a/linux-user/signal.c b/linux-user/signal.c
index e0f6aaf..9d4946d 100644
--- a/linux-user/signal.c
+++ b/linux-user/signal.c
@@ -27,6 +27,7 @@
#include <sys/ucontext.h>
#include "qemu.h"
+#include "qemu-common.h"
#include "target_signal.h"
//#define DEBUG_SIGNAL
@@ -325,7 +326,7 @@ static inline void free_sigqueue(CPUState *env, struct sigqueue *q)
}
/* 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);
diff --git a/qemu-common.h b/qemu-common.h
index d3df63e..6ee31e0 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -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 @@ void *get_mmap_addr(unsigned long size);
/* 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 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id);
/* Force QEMU to stop what it's doing and service IO */
void qemu_service_io(void);
+#endif /* dyngen-exec.h hack */
+
#endif
diff --git a/qemu-img.c b/qemu-img.c
index 207535f..d72dd71 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -33,7 +33,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);
diff --git a/target-i386/exec.h b/target-i386/exec.h
index 4d97a1b..48d6102 100644
--- a/target-i386/exec.h
+++ b/target-i386/exec.h
@@ -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 @@ void do_interrupt(int intno, int is_int, int error_code,
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 */
diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
index 52fee3d..d50a9c0 100644
--- a/target-i386/op_helper.c
+++ b/target-i386/op_helper.c
@@ -1284,8 +1284,8 @@ static int check_exception(int intno, int *error_code)
* 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);
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [Qemu-devel] Re: [PATCH] Add noreturn function attribute
2008-12-18 13:26 [Qemu-devel] [PATCH] Add noreturn function attribute Jan Kiszka
@ 2009-01-14 17:47 ` Jan Kiszka
2009-01-14 19:01 ` Blue Swirl
0 siblings, 1 reply; 3+ messages in thread
From: Jan Kiszka @ 2009-01-14 17:47 UTC (permalink / raw)
To: qemu-devel
Jan Kiszka wrote:
> 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 <jan.kiszka@siemens.com>
> ---
>
> cpu-all.h | 7 ++++---
> darwin-user/signal.c | 3 ++-
> exec-all.h | 5 ++++-
> linux-user/signal.c | 3 ++-
> qemu-common.h | 14 +++++++++++---
> qemu-img.c | 2 +-
> target-i386/exec.h | 5 +++--
> target-i386/op_helper.c | 4 ++--
> 8 files changed, 29 insertions(+), 14 deletions(-)
>
> diff --git a/cpu-all.h b/cpu-all.h
> index 648264c..329d26d 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -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 @@ void cpu_dump_statistics (CPUState *env, FILE *f,
> 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;
> diff --git a/darwin-user/signal.c b/darwin-user/signal.c
> index f412b36..98d0894 100644
> --- a/darwin-user/signal.c
> +++ b/darwin-user/signal.c
> @@ -36,6 +36,7 @@
> #include <signal.h>
>
> #include "qemu.h"
> +#include "qemu-common.h"
>
> #define DEBUG_SIGNAL
>
> @@ -131,7 +132,7 @@ static inline void free_sigqueue(struct sigqueue *q)
> }
>
> /* 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);
> diff --git a/exec-all.h b/exec-all.h
> index fd96adf..03c174c 100644
> --- a/exec-all.h
> +++ b/exec-all.h
> @@ -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 @@ TranslationBlock *tb_gen_code(CPUState *env,
> 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);
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index e0f6aaf..9d4946d 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -27,6 +27,7 @@
> #include <sys/ucontext.h>
>
> #include "qemu.h"
> +#include "qemu-common.h"
> #include "target_signal.h"
>
> //#define DEBUG_SIGNAL
> @@ -325,7 +326,7 @@ static inline void free_sigqueue(CPUState *env, struct sigqueue *q)
> }
>
> /* 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);
> diff --git a/qemu-common.h b/qemu-common.h
> index d3df63e..6ee31e0 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -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 @@ void *get_mmap_addr(unsigned long size);
>
> /* 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 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id);
> /* Force QEMU to stop what it's doing and service IO */
> void qemu_service_io(void);
>
> +#endif /* dyngen-exec.h hack */
> +
> #endif
> diff --git a/qemu-img.c b/qemu-img.c
> index 207535f..d72dd71 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -33,7 +33,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);
> diff --git a/target-i386/exec.h b/target-i386/exec.h
> index 4d97a1b..48d6102 100644
> --- a/target-i386/exec.h
> +++ b/target-i386/exec.h
> @@ -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 @@ void do_interrupt(int intno, int is_int, int error_code,
> 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 */
> diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
> index 52fee3d..d50a9c0 100644
> --- a/target-i386/op_helper.c
> +++ b/target-i386/op_helper.c
> @@ -1284,8 +1284,8 @@ static int check_exception(int intno, int *error_code)
> * 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);
>
>
>
Any comment on this? It still applies - and it still kills a lot of
compiler warnings.
Jan
--
Siemens AG, Corporate Technology, CT SE 26
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] Re: [PATCH] Add noreturn function attribute
2009-01-14 17:47 ` [Qemu-devel] " Jan Kiszka
@ 2009-01-14 19:01 ` Blue Swirl
0 siblings, 0 replies; 3+ messages in thread
From: Blue Swirl @ 2009-01-14 19:01 UTC (permalink / raw)
To: qemu-devel
On 1/14/09, Jan Kiszka <jan.kiszka@siemens.com> wrote:
> Jan Kiszka wrote:
> > 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 <jan.kiszka@siemens.com>
> > ---
> >
> > cpu-all.h | 7 ++++---
> > darwin-user/signal.c | 3 ++-
> > exec-all.h | 5 ++++-
> > linux-user/signal.c | 3 ++-
> > qemu-common.h | 14 +++++++++++---
> > qemu-img.c | 2 +-
> > target-i386/exec.h | 5 +++--
> > target-i386/op_helper.c | 4 ++--
> > 8 files changed, 29 insertions(+), 14 deletions(-)
> >
> > diff --git a/cpu-all.h b/cpu-all.h
> > index 648264c..329d26d 100644
> > --- a/cpu-all.h
> > +++ b/cpu-all.h
> > @@ -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 @@ void cpu_dump_statistics (CPUState *env, FILE *f,
> > 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;
> > diff --git a/darwin-user/signal.c b/darwin-user/signal.c
> > index f412b36..98d0894 100644
> > --- a/darwin-user/signal.c
> > +++ b/darwin-user/signal.c
> > @@ -36,6 +36,7 @@
> > #include <signal.h>
> >
> > #include "qemu.h"
> > +#include "qemu-common.h"
> >
> > #define DEBUG_SIGNAL
> >
> > @@ -131,7 +132,7 @@ static inline void free_sigqueue(struct sigqueue *q)
> > }
> >
> > /* 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);
> > diff --git a/exec-all.h b/exec-all.h
> > index fd96adf..03c174c 100644
> > --- a/exec-all.h
> > +++ b/exec-all.h
> > @@ -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 @@ TranslationBlock *tb_gen_code(CPUState *env,
> > 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);
> > diff --git a/linux-user/signal.c b/linux-user/signal.c
> > index e0f6aaf..9d4946d 100644
> > --- a/linux-user/signal.c
> > +++ b/linux-user/signal.c
> > @@ -27,6 +27,7 @@
> > #include <sys/ucontext.h>
> >
> > #include "qemu.h"
> > +#include "qemu-common.h"
> > #include "target_signal.h"
> >
> > //#define DEBUG_SIGNAL
> > @@ -325,7 +326,7 @@ static inline void free_sigqueue(CPUState *env, struct sigqueue *q)
> > }
> >
> > /* 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);
> > diff --git a/qemu-common.h b/qemu-common.h
> > index d3df63e..6ee31e0 100644
> > --- a/qemu-common.h
> > +++ b/qemu-common.h
> > @@ -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 @@ void *get_mmap_addr(unsigned long size);
> >
> > /* 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 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id);
> > /* Force QEMU to stop what it's doing and service IO */
> > void qemu_service_io(void);
> >
> > +#endif /* dyngen-exec.h hack */
> > +
> > #endif
> > diff --git a/qemu-img.c b/qemu-img.c
> > index 207535f..d72dd71 100644
> > --- a/qemu-img.c
> > +++ b/qemu-img.c
> > @@ -33,7 +33,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);
> > diff --git a/target-i386/exec.h b/target-i386/exec.h
> > index 4d97a1b..48d6102 100644
> > --- a/target-i386/exec.h
> > +++ b/target-i386/exec.h
> > @@ -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 @@ void do_interrupt(int intno, int is_int, int error_code,
> > 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 */
> > diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
> > index 52fee3d..d50a9c0 100644
> > --- a/target-i386/op_helper.c
> > +++ b/target-i386/op_helper.c
> > @@ -1284,8 +1284,8 @@ static int check_exception(int intno, int *error_code)
> > * 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);
> >
> >
> >
>
>
> Any comment on this? It still applies - and it still kills a lot of
> compiler warnings.
Thanks, applied as r6303.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-01-14 19:01 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-18 13:26 [Qemu-devel] [PATCH] Add noreturn function attribute Jan Kiszka
2009-01-14 17:47 ` [Qemu-devel] " Jan Kiszka
2009-01-14 19:01 ` Blue Swirl
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).