* [Qemu-devel] [PATCH 1/3] Replace most gcc format attributes by macro GCC_FMT_ATTR (format checking)
@ 2010-09-23 19:28 Stefan Weil
2010-09-23 19:28 ` [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute " Stefan Weil
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Stefan Weil @ 2010-09-23 19:28 UTC (permalink / raw)
To: QEMU Developers; +Cc: Blue Swirl
Since version 4.4.x, gcc supports additional format attributes.
__attribute__ ((format (gnu_printf, 1, 2)))
should be used instead of
__attribute__ ((format (printf, 1, 2))
because QEMU always uses standard format strings (even with mingw32).
The patch replaces format attribute printf / __printf__ by macro
GCC_FMT_ATTR which uses gnu_printf if supported.
It also removes an #ifdef __GNUC__ (not needed any longer).
Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
audio/audio.h | 6 +-----
bsd-user/qemu.h | 2 +-
darwin-user/qemu.h | 2 +-
hw/xen_backend.h | 2 +-
linux-user/qemu.h | 2 +-
monitor.h | 3 +--
qemu-common.h | 3 +--
qemu-error.h | 7 +++----
qerror.h | 3 +--
qjson.h | 3 +--
10 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index 454ade2..39a0631 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -87,11 +87,7 @@ typedef struct QEMUAudioTimeStamp {
} QEMUAudioTimeStamp;
void AUD_vlog (const char *cap, const char *fmt, va_list ap);
-void AUD_log (const char *cap, const char *fmt, ...)
-#ifdef __GNUC__
- __attribute__ ((__format__ (__printf__, 2, 3)))
-#endif
- ;
+void AUD_log (const char *cap, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
void AUD_help (void);
void AUD_register_card (const char *name, QEMUSoundCard *card);
diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h
index 554ff8b..9763616 100644
--- a/bsd-user/qemu.h
+++ b/bsd-user/qemu.h
@@ -139,7 +139,7 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1,
abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5, abi_long arg6);
-void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));
+void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
extern THREAD CPUState *thread_env;
void cpu_loop(CPUState *env);
char *target_strerror(int err);
diff --git a/darwin-user/qemu.h b/darwin-user/qemu.h
index 462bbda..0c5081b 100644
--- a/darwin-user/qemu.h
+++ b/darwin-user/qemu.h
@@ -99,7 +99,7 @@ int do_sigaction(int sig, const struct sigaction *act,
struct sigaction *oact);
int do_sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss);
-void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));
+void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void qerror(const char *fmt, ...);
void write_dt(void *ptr, unsigned long addr, unsigned long limit, int flags);
diff --git a/hw/xen_backend.h b/hw/xen_backend.h
index 292126d..1b428e3 100644
--- a/hw/xen_backend.h
+++ b/hw/xen_backend.h
@@ -84,7 +84,7 @@ int xen_be_bind_evtchn(struct XenDevice *xendev);
void xen_be_unbind_evtchn(struct XenDevice *xendev);
int xen_be_send_notify(struct XenDevice *xendev);
void xen_be_printf(struct XenDevice *xendev, int msg_level, const char *fmt, ...)
- __attribute__ ((format(printf, 3, 4)));
+ GCC_FMT_ATTR(3, 4);
/* actual backend drivers */
extern struct XenDevOps xen_console_ops; /* xen_console.c */
diff --git a/linux-user/qemu.h b/linux-user/qemu.h
index 794fe49..708021e 100644
--- a/linux-user/qemu.h
+++ b/linux-user/qemu.h
@@ -186,7 +186,7 @@ void syscall_init(void);
abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
abi_long arg2, abi_long arg3, abi_long arg4,
abi_long arg5, abi_long arg6);
-void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));
+void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
extern THREAD CPUState *thread_env;
void cpu_loop(CPUState *env);
char *target_strerror(int err);
diff --git a/monitor.h b/monitor.h
index 38b22a4..185cc3e 100644
--- a/monitor.h
+++ b/monitor.h
@@ -50,8 +50,7 @@ int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
int monitor_get_fd(Monitor *mon, const char *fdname);
void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap);
-void monitor_printf(Monitor *mon, const char *fmt, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
+void monitor_printf(Monitor *mon, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
void monitor_print_filename(Monitor *mon, const char *filename);
void monitor_flush(Monitor *mon);
diff --git a/qemu-common.h b/qemu-common.h
index 88c5207..81aafa0 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -196,8 +196,7 @@ int qemu_pipe(int pipefd[2]);
/* Error handling. */
-void QEMU_NORETURN hw_error(const char *fmt, ...)
- __attribute__ ((__format__ (__printf__, 1, 2)));
+void QEMU_NORETURN hw_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
/* IO callbacks. */
typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
diff --git a/qemu-error.h b/qemu-error.h
index a45609f..531ec63 100644
--- a/qemu-error.h
+++ b/qemu-error.h
@@ -31,11 +31,10 @@ void loc_set_cmdline(char **argv, int idx, int cnt);
void loc_set_file(const char *fname, int lno);
void error_vprintf(const char *fmt, va_list ap);
-void error_printf(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
-void error_printf_unless_qmp(const char *fmt, ...)
- __attribute__ ((format(printf, 1, 2)));
+void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void error_print_loc(void);
void error_set_progname(const char *argv0);
-void error_report(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
+void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
#endif
diff --git a/qerror.h b/qerror.h
index 62802ea..f2984dd 100644
--- a/qerror.h
+++ b/qerror.h
@@ -38,8 +38,7 @@ QError *qerror_from_info(const char *file, int linenr, const char *func,
QString *qerror_human(const QError *qerror);
void qerror_print(QError *qerror);
void qerror_report_internal(const char *file, int linenr, const char *func,
- const char *fmt, ...)
- __attribute__ ((format(printf, 4, 5)));
+ const char *fmt, ...) GCC_FMT_ATTR(4, 5);
#define qerror_report(fmt, ...) \
qerror_report_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__)
QError *qobject_to_qerror(const QObject *obj);
diff --git a/qjson.h b/qjson.h
index 7afec2e..7eef357 100644
--- a/qjson.h
+++ b/qjson.h
@@ -19,8 +19,7 @@
#include "qstring.h"
QObject *qobject_from_json(const char *string);
-QObject *qobject_from_jsonf(const char *string, ...)
- __attribute__((__format__ (__printf__, 1, 2)));
+QObject *qobject_from_jsonf(const char *string, ...) GCC_FMT_ATTR(1, 2);
QObject *qobject_from_jsonv(const char *string, va_list *ap);
QString *qobject_to_json(const QObject *obj);
--
1.7.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking)
2010-09-23 19:28 [Qemu-devel] [PATCH 1/3] Replace most gcc format attributes by macro GCC_FMT_ATTR (format checking) Stefan Weil
@ 2010-09-23 19:28 ` Stefan Weil
2010-09-23 20:33 ` [Qemu-devel] " Blue Swirl
2010-10-12 18:23 ` [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking) Blue Swirl
2010-09-23 19:28 ` [Qemu-devel] [PATCH 3/3] Use " Stefan Weil
2010-10-03 7:48 ` [Qemu-devel] Re: [PATCH 1/3] Replace most gcc format attributes by macro " Blue Swirl
2 siblings, 2 replies; 13+ messages in thread
From: Stefan Weil @ 2010-09-23 19:28 UTC (permalink / raw)
To: QEMU Developers; +Cc: Blue Swirl
Replace the remaining format attribute printf by macro
GCC_FMT_ATTR which uses gnu_printf (if supported).
This needs additional code changes:
* Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
* Remove standard includes when qemu-common.h was added.
qemu-common.h already provides these includes.
* Remove local definitions which now come from stdio.h.
These definitions were needed before tcg was introduced.
They raise conflicts when qemu-common.h is included.
Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
cpu-all.h | 2 +-
cpu-exec.c | 2 ++
dyngen-exec.h | 9 ---------
target-alpha/op_helper.c | 1 +
target-arm/op_helper.c | 2 ++
target-cris/op_helper.c | 1 +
target-i386/op_helper.c | 1 +
target-m68k/op_helper.c | 2 ++
target-microblaze/op_helper.c | 2 +-
target-mips/op_helper.c | 3 ++-
target-ppc/op_helper.c | 3 ++-
target-sh4/op_helper.c | 4 ++--
target-sparc/op_helper.c | 1 +
13 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/cpu-all.h b/cpu-all.h
index 67a3266..11edddc 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -773,7 +773,7 @@ void cpu_dump_statistics (CPUState *env, FILE *f,
int flags);
void QEMU_NORETURN cpu_abort(CPUState *env, const char *fmt, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
+ GCC_FMT_ATTR(2, 3);
extern CPUState *first_cpu;
extern CPUState *cpu_single_env;
diff --git a/cpu-exec.c b/cpu-exec.c
index dbdfdcc..1cb36e0 100644
--- a/cpu-exec.c
+++ b/cpu-exec.c
@@ -16,6 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+
+#include "qemu-common.h"
#include "config.h"
#include "exec.h"
#include "disas.h"
diff --git a/dyngen-exec.h b/dyngen-exec.h
index 5bfef3f..97e2556 100644
--- a/dyngen-exec.h
+++ b/dyngen-exec.h
@@ -40,15 +40,6 @@
/* XXX: This may be wrong for 64-bit ILP32 hosts. */
typedef void * host_reg_t;
-#ifdef CONFIG_BSD
-typedef struct __sFILE FILE;
-#else
-typedef struct FILE FILE;
-#endif
-extern int fprintf(FILE *, const char *, ...);
-extern int fputs(const char *, FILE *);
-extern int printf(const char *, ...);
-
#if defined(__i386__)
#define AREG0 "ebp"
#elif defined(__x86_64__)
diff --git a/target-alpha/op_helper.c b/target-alpha/op_helper.c
index ff5ae26..39a6a85 100644
--- a/target-alpha/op_helper.c
+++ b/target-alpha/op_helper.c
@@ -17,6 +17,7 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+#include "qemu-common.h"
#include "exec.h"
#include "host-utils.h"
#include "softfloat.h"
diff --git a/target-arm/op_helper.c b/target-arm/op_helper.c
index 9b1a014..71cd8ff 100644
--- a/target-arm/op_helper.c
+++ b/target-arm/op_helper.c
@@ -16,6 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+
+#include "qemu-common.h"
#include "exec.h"
#include "helpers.h"
diff --git a/target-cris/op_helper.c b/target-cris/op_helper.c
index a60da94..9e21799 100644
--- a/target-cris/op_helper.c
+++ b/target-cris/op_helper.c
@@ -18,6 +18,7 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+#include "qemu-common.h"
#include "exec.h"
#include "mmu.h"
#include "helper.h"
diff --git a/target-i386/op_helper.c b/target-i386/op_helper.c
index ec6b3e9..b1f3bf9 100644
--- a/target-i386/op_helper.c
+++ b/target-i386/op_helper.c
@@ -17,6 +17,7 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+#include "qemu-common.h"
#include "exec.h"
#include "exec-all.h"
#include "host-utils.h"
diff --git a/target-m68k/op_helper.c b/target-m68k/op_helper.c
index 0711107..5c5fb5b 100644
--- a/target-m68k/op_helper.c
+++ b/target-m68k/op_helper.c
@@ -16,6 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
+
+#include "qemu-common.h"
#include "exec.h"
#include "helpers.h"
diff --git a/target-microblaze/op_helper.c b/target-microblaze/op_helper.c
index 3d2b313..dd6e262 100644
--- a/target-microblaze/op_helper.c
+++ b/target-microblaze/op_helper.c
@@ -17,7 +17,7 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include <assert.h>
+#include "qemu-common.h"
#include "exec.h"
#include "helper.h"
#include "host-utils.h"
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 41abd57..2429ff7 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -16,7 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdlib.h>
+
+#include "qemu-common.h"
#include "exec.h"
#include "host-utils.h"
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index 3e6db85..4692646 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -16,7 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include <string.h>
+
+#include "qemu-common.h"
#include "exec.h"
#include "host-utils.h"
#include "helper.h"
diff --git a/target-sh4/op_helper.c b/target-sh4/op_helper.c
index 2e5f555..fdc183c 100644
--- a/target-sh4/op_helper.c
+++ b/target-sh4/op_helper.c
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include <assert.h>
-#include <stdlib.h>
+
+#include "qemu-common.h"
#include "exec.h"
#include "helper.h"
diff --git a/target-sparc/op_helper.c b/target-sparc/op_helper.c
index be3c1e0..547793f 100644
--- a/target-sparc/op_helper.c
+++ b/target-sparc/op_helper.c
@@ -1,3 +1,4 @@
+#include "qemu-common.h"
#include "exec.h"
#include "host-utils.h"
#include "helper.h"
--
1.7.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] [PATCH 3/3] Use GCC_FMT_ATTR (format checking)
2010-09-23 19:28 [Qemu-devel] [PATCH 1/3] Replace most gcc format attributes by macro GCC_FMT_ATTR (format checking) Stefan Weil
2010-09-23 19:28 ` [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute " Stefan Weil
@ 2010-09-23 19:28 ` Stefan Weil
2010-10-03 7:49 ` Blue Swirl
2010-10-03 7:48 ` [Qemu-devel] Re: [PATCH 1/3] Replace most gcc format attributes by macro " Blue Swirl
2 siblings, 1 reply; 13+ messages in thread
From: Stefan Weil @ 2010-09-23 19:28 UTC (permalink / raw)
To: QEMU Developers
Signed-off-by: Stefan Weil <weil@mail.berlios.de>
---
audio/audio.h | 2 +-
disas.c | 3 ++-
hw/mips_fulong2e.c | 3 ++-
hw/mips_malta.c | 3 ++-
json-parser.c | 3 ++-
monitor.c | 3 ++-
monitor.h | 3 ++-
qemu-char.h | 3 ++-
qemu-error.h | 2 +-
qemu-img.c | 2 +-
qerror.c | 6 ++++--
qerror.h | 2 +-
qjson.h | 4 ++--
slirp/slirp.h | 2 +-
14 files changed, 25 insertions(+), 16 deletions(-)
diff --git a/audio/audio.h b/audio/audio.h
index 39a0631..a70fda9 100644
--- a/audio/audio.h
+++ b/audio/audio.h
@@ -86,7 +86,7 @@ typedef struct QEMUAudioTimeStamp {
uint64_t old_ts;
} QEMUAudioTimeStamp;
-void AUD_vlog (const char *cap, const char *fmt, va_list ap);
+void AUD_vlog (const char *cap, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
void AUD_log (const char *cap, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
void AUD_help (void);
diff --git a/disas.c b/disas.c
index 79a98de..afe331f 100644
--- a/disas.c
+++ b/disas.c
@@ -349,7 +349,8 @@ monitor_read_memory (bfd_vma memaddr, bfd_byte *myaddr, int length,
return 0;
}
-static int monitor_fprintf(FILE *stream, const char *fmt, ...)
+static int GCC_FMT_ATTR(2, 3)
+monitor_fprintf(FILE *stream, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
diff --git a/hw/mips_fulong2e.c b/hw/mips_fulong2e.c
index 61ca9c4..df80ef6 100644
--- a/hw/mips_fulong2e.c
+++ b/hw/mips_fulong2e.c
@@ -76,7 +76,8 @@ static struct _loaderparams {
const char *initrd_filename;
} loaderparams;
-static void prom_set(uint32_t* prom_buf, int index, const char *string, ...)
+static void GCC_FMT_ATTR(3, 4) prom_set(uint32_t* prom_buf, int index,
+ const char *string, ...)
{
va_list ap;
int32_t table_addr;
diff --git a/hw/mips_malta.c b/hw/mips_malta.c
index 1cb7880..0969089 100644
--- a/hw/mips_malta.c
+++ b/hw/mips_malta.c
@@ -654,7 +654,8 @@ static void write_bootloader (CPUState *env, uint8_t *base,
}
-static void prom_set(uint32_t* prom_buf, int index, const char *string, ...)
+static void GCC_FMT_ATTR(3, 4) prom_set(uint32_t* prom_buf, int index,
+ const char *string, ...)
{
va_list ap;
int32_t table_addr;
diff --git a/json-parser.c b/json-parser.c
index 70b9b6f..6c06ef9 100644
--- a/json-parser.c
+++ b/json-parser.c
@@ -91,7 +91,8 @@ static int token_is_escape(QObject *obj, const char *value)
/**
* Error handler
*/
-static void parse_error(JSONParserContext *ctxt, QObject *token, const char *msg, ...)
+static void GCC_FMT_ATTR(3, 4) parse_error(JSONParserContext *ctxt,
+ QObject *token, const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
diff --git a/monitor.c b/monitor.c
index e602480..377ab37 100644
--- a/monitor.c
+++ b/monitor.c
@@ -316,7 +316,8 @@ void monitor_print_filename(Monitor *mon, const char *filename)
}
}
-static int monitor_fprintf(FILE *stream, const char *fmt, ...)
+static int GCC_FMT_ATTR(2, 3) monitor_fprintf(FILE *stream,
+ const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
diff --git a/monitor.h b/monitor.h
index 185cc3e..4a6cf82 100644
--- a/monitor.h
+++ b/monitor.h
@@ -49,7 +49,8 @@ int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
int monitor_get_fd(Monitor *mon, const char *fdname);
-void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap);
+void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
+ GCC_FMT_ATTR(2, 0);
void monitor_printf(Monitor *mon, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
void monitor_print_filename(Monitor *mon, const char *filename);
void monitor_flush(Monitor *mon);
diff --git a/qemu-char.h b/qemu-char.h
index 6ea01ba..18ad12b 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -76,7 +76,8 @@ CharDriverState *qemu_chr_open_opts(QemuOpts *opts,
void (*init)(struct CharDriverState *s));
CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s));
void qemu_chr_close(CharDriverState *chr);
-void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
+void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
+ GCC_FMT_ATTR(2, 3);
int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
void qemu_chr_send_event(CharDriverState *s, int event);
void qemu_chr_add_handlers(CharDriverState *s,
diff --git a/qemu-error.h b/qemu-error.h
index 531ec63..4d5c537 100644
--- a/qemu-error.h
+++ b/qemu-error.h
@@ -30,7 +30,7 @@ void loc_set_none(void);
void loc_set_cmdline(char **argv, int idx, int cnt);
void loc_set_file(const char *fname, int lno);
-void error_vprintf(const char *fmt, va_list ap);
+void error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void error_print_loc(void);
diff --git a/qemu-img.c b/qemu-img.c
index 4e035e4..578b8eb 100644
--- a/qemu-img.c
+++ b/qemu-img.c
@@ -39,7 +39,7 @@ typedef struct img_cmd_t {
/* Default to cache=writeback as data integrity is not important for qemu-tcg. */
#define BDRV_O_FLAGS BDRV_O_CACHE_WB
-static void error(const char *fmt, ...)
+static void GCC_FMT_ATTR(1, 2) error(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
diff --git a/qerror.c b/qerror.c
index 0af3ab3..ac2cdaf 100644
--- a/qerror.c
+++ b/qerror.c
@@ -218,7 +218,8 @@ QError *qerror_new(void)
return qerr;
}
-static void qerror_abort(const QError *qerr, const char *fmt, ...)
+static void GCC_FMT_ATTR(2, 3) qerror_abort(const QError *qerr,
+ const char *fmt, ...)
{
va_list ap;
@@ -233,7 +234,8 @@ static void qerror_abort(const QError *qerr, const char *fmt, ...)
abort();
}
-static void qerror_set_data(QError *qerr, const char *fmt, va_list *va)
+static void GCC_FMT_ATTR(2, 0) qerror_set_data(QError *qerr,
+ const char *fmt, va_list *va)
{
QObject *obj;
diff --git a/qerror.h b/qerror.h
index f2984dd..943a24b 100644
--- a/qerror.h
+++ b/qerror.h
@@ -34,7 +34,7 @@ typedef struct QError {
QError *qerror_new(void);
QError *qerror_from_info(const char *file, int linenr, const char *func,
- const char *fmt, va_list *va);
+ const char *fmt, va_list *va) GCC_FMT_ATTR(4, 0);
QString *qerror_human(const QError *qerror);
void qerror_print(QError *qerror);
void qerror_report_internal(const char *file, int linenr, const char *func,
diff --git a/qjson.h b/qjson.h
index 7eef357..70d0afb 100644
--- a/qjson.h
+++ b/qjson.h
@@ -18,9 +18,9 @@
#include "qobject.h"
#include "qstring.h"
-QObject *qobject_from_json(const char *string);
+QObject *qobject_from_json(const char *string) GCC_FMT_ATTR(1, 0);
QObject *qobject_from_jsonf(const char *string, ...) GCC_FMT_ATTR(1, 2);
-QObject *qobject_from_jsonv(const char *string, va_list *ap);
+QObject *qobject_from_jsonv(const char *string, va_list *ap) GCC_FMT_ATTR(1, 0);
QString *qobject_to_json(const QObject *obj);
diff --git a/slirp/slirp.h b/slirp/slirp.h
index 3a5d592..14edf66 100644
--- a/slirp/slirp.h
+++ b/slirp/slirp.h
@@ -261,7 +261,7 @@ void if_start(struct ttys *);
long gethostid(void);
#endif
-void lprint(const char *, ...);
+void lprint(const char *, ...) GCC_FMT_ATTR(1, 2);
#ifndef _WIN32
#include <netdb.h>
--
1.7.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking)
2010-09-23 19:28 ` [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute " Stefan Weil
@ 2010-09-23 20:33 ` Blue Swirl
2010-09-23 20:44 ` Stefan Weil
2010-10-12 18:23 ` [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking) Blue Swirl
1 sibling, 1 reply; 13+ messages in thread
From: Blue Swirl @ 2010-09-23 20:33 UTC (permalink / raw)
To: Stefan Weil; +Cc: QEMU Developers
On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Replace the remaining format attribute printf by macro
> GCC_FMT_ATTR which uses gnu_printf (if supported).
>
> This needs additional code changes:
>
> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>
> * Remove standard includes when qemu-common.h was added.
> qemu-common.h already provides these includes.
>
> * Remove local definitions which now come from stdio.h.
> These definitions were needed before tcg was introduced.
> They raise conflicts when qemu-common.h is included.
IIRC the problem was that some system headers were incompatible with
global asm variables. There is still one, AREG0.
But I'd rather not keep the hideous local definitions forever. Maybe
those systems which are broken by the patch are not interesting
anymore?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking)
2010-09-23 20:33 ` [Qemu-devel] " Blue Swirl
@ 2010-09-23 20:44 ` Stefan Weil
2010-09-25 7:46 ` Blue Swirl
0 siblings, 1 reply; 13+ messages in thread
From: Stefan Weil @ 2010-09-23 20:44 UTC (permalink / raw)
To: Blue Swirl; +Cc: QEMU Developers
Am 23.09.2010 22:33, schrieb Blue Swirl:
> On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de> wrote:
>> Replace the remaining format attribute printf by macro
>> GCC_FMT_ATTR which uses gnu_printf (if supported).
>>
>> This needs additional code changes:
>>
>> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>>
>> * Remove standard includes when qemu-common.h was added.
>> qemu-common.h already provides these includes.
>>
>> * Remove local definitions which now come from stdio.h.
>> These definitions were needed before tcg was introduced.
>> They raise conflicts when qemu-common.h is included.
>
> IIRC the problem was that some system headers were incompatible with
> global asm variables. There is still one, AREG0.
>
> But I'd rather not keep the hideous local definitions forever. Maybe
> those systems which are broken by the patch are not interesting
> anymore?
Are there such systems? Or did the problems with earlier
versions arise from the fact that a lot of global asm variables
were reserved by qemu? How could a correctly defined AREG0
interfere with system headers?
For linux and win32, I did not notice problems caused by these changes.
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking)
2010-09-23 20:44 ` Stefan Weil
@ 2010-09-25 7:46 ` Blue Swirl
2010-10-04 19:29 ` [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?) Stefan Weil
0 siblings, 1 reply; 13+ messages in thread
From: Blue Swirl @ 2010-09-25 7:46 UTC (permalink / raw)
To: Stefan Weil; +Cc: QEMU Developers
On Thu, Sep 23, 2010 at 8:44 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Am 23.09.2010 22:33, schrieb Blue Swirl:
>>
>> On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de> wrote:
>>>
>>> Replace the remaining format attribute printf by macro
>>> GCC_FMT_ATTR which uses gnu_printf (if supported).
>>>
>>> This needs additional code changes:
>>>
>>> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>>>
>>> * Remove standard includes when qemu-common.h was added.
>>> qemu-common.h already provides these includes.
>>>
>>> * Remove local definitions which now come from stdio.h.
>>> These definitions were needed before tcg was introduced.
>>> They raise conflicts when qemu-common.h is included.
>>
>> IIRC the problem was that some system headers were incompatible with
>> global asm variables. There is still one, AREG0.
>>
>> But I'd rather not keep the hideous local definitions forever. Maybe
>> those systems which are broken by the patch are not interesting
>> anymore?
>
> Are there such systems? Or did the problems with earlier
> versions arise from the fact that a lot of global asm variables
> were reserved by qemu? How could a correctly defined AREG0
> interfere with system headers?
One explanation is that the code in target-*/op_helper.c may assume
that env/AREG0 is always available but since library functions may
clobber that, we want to hide them.
> For linux and win32, I did not notice problems caused by these changes.
It looks like that code has origins in one of the very first patches,
r16 or ba1c6e37fc5efc0f3d1e50d0760f9f4a1061187b. It was moved from
exec-i386.h to dyngen-exec.h by r236 or
79638566e5b87058e92f537b989df0dbc23f8b41. R997 or
1e6cae953d6a37216359b79e05d23e1bf4dc6bbe added a warning about system
headers. The commits around that add OS X support, maybe the problem
was there?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH 1/3] Replace most gcc format attributes by macro GCC_FMT_ATTR (format checking)
2010-09-23 19:28 [Qemu-devel] [PATCH 1/3] Replace most gcc format attributes by macro GCC_FMT_ATTR (format checking) Stefan Weil
2010-09-23 19:28 ` [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute " Stefan Weil
2010-09-23 19:28 ` [Qemu-devel] [PATCH 3/3] Use " Stefan Weil
@ 2010-10-03 7:48 ` Blue Swirl
2 siblings, 0 replies; 13+ messages in thread
From: Blue Swirl @ 2010-10-03 7:48 UTC (permalink / raw)
To: Stefan Weil; +Cc: QEMU Developers
Thanks, applied.
On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Since version 4.4.x, gcc supports additional format attributes.
> __attribute__ ((format (gnu_printf, 1, 2)))
> should be used instead of
> __attribute__ ((format (printf, 1, 2))
> because QEMU always uses standard format strings (even with mingw32).
>
> The patch replaces format attribute printf / __printf__ by macro
> GCC_FMT_ATTR which uses gnu_printf if supported.
>
> It also removes an #ifdef __GNUC__ (not needed any longer).
>
> Cc: Blue Swirl <blauwirbel@gmail.com>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
> audio/audio.h | 6 +-----
> bsd-user/qemu.h | 2 +-
> darwin-user/qemu.h | 2 +-
> hw/xen_backend.h | 2 +-
> linux-user/qemu.h | 2 +-
> monitor.h | 3 +--
> qemu-common.h | 3 +--
> qemu-error.h | 7 +++----
> qerror.h | 3 +--
> qjson.h | 3 +--
> 10 files changed, 12 insertions(+), 21 deletions(-)
>
> diff --git a/audio/audio.h b/audio/audio.h
> index 454ade2..39a0631 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -87,11 +87,7 @@ typedef struct QEMUAudioTimeStamp {
> } QEMUAudioTimeStamp;
>
> void AUD_vlog (const char *cap, const char *fmt, va_list ap);
> -void AUD_log (const char *cap, const char *fmt, ...)
> -#ifdef __GNUC__
> - __attribute__ ((__format__ (__printf__, 2, 3)))
> -#endif
> - ;
> +void AUD_log (const char *cap, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
>
> void AUD_help (void);
> void AUD_register_card (const char *name, QEMUSoundCard *card);
> diff --git a/bsd-user/qemu.h b/bsd-user/qemu.h
> index 554ff8b..9763616 100644
> --- a/bsd-user/qemu.h
> +++ b/bsd-user/qemu.h
> @@ -139,7 +139,7 @@ abi_long do_netbsd_syscall(void *cpu_env, int num, abi_long arg1,
> abi_long do_openbsd_syscall(void *cpu_env, int num, abi_long arg1,
> abi_long arg2, abi_long arg3, abi_long arg4,
> abi_long arg5, abi_long arg6);
> -void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));
> +void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> extern THREAD CPUState *thread_env;
> void cpu_loop(CPUState *env);
> char *target_strerror(int err);
> diff --git a/darwin-user/qemu.h b/darwin-user/qemu.h
> index 462bbda..0c5081b 100644
> --- a/darwin-user/qemu.h
> +++ b/darwin-user/qemu.h
> @@ -99,7 +99,7 @@ int do_sigaction(int sig, const struct sigaction *act,
> struct sigaction *oact);
> int do_sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss);
>
> -void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));
> +void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> void qerror(const char *fmt, ...);
>
> void write_dt(void *ptr, unsigned long addr, unsigned long limit, int flags);
> diff --git a/hw/xen_backend.h b/hw/xen_backend.h
> index 292126d..1b428e3 100644
> --- a/hw/xen_backend.h
> +++ b/hw/xen_backend.h
> @@ -84,7 +84,7 @@ int xen_be_bind_evtchn(struct XenDevice *xendev);
> void xen_be_unbind_evtchn(struct XenDevice *xendev);
> int xen_be_send_notify(struct XenDevice *xendev);
> void xen_be_printf(struct XenDevice *xendev, int msg_level, const char *fmt, ...)
> - __attribute__ ((format(printf, 3, 4)));
> + GCC_FMT_ATTR(3, 4);
>
> /* actual backend drivers */
> extern struct XenDevOps xen_console_ops; /* xen_console.c */
> diff --git a/linux-user/qemu.h b/linux-user/qemu.h
> index 794fe49..708021e 100644
> --- a/linux-user/qemu.h
> +++ b/linux-user/qemu.h
> @@ -186,7 +186,7 @@ void syscall_init(void);
> abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
> abi_long arg2, abi_long arg3, abi_long arg4,
> abi_long arg5, abi_long arg6);
> -void gemu_log(const char *fmt, ...) __attribute__((format(printf,1,2)));
> +void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> extern THREAD CPUState *thread_env;
> void cpu_loop(CPUState *env);
> char *target_strerror(int err);
> diff --git a/monitor.h b/monitor.h
> index 38b22a4..185cc3e 100644
> --- a/monitor.h
> +++ b/monitor.h
> @@ -50,8 +50,7 @@ int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
> int monitor_get_fd(Monitor *mon, const char *fdname);
>
> void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap);
> -void monitor_printf(Monitor *mon, const char *fmt, ...)
> - __attribute__ ((__format__ (__printf__, 2, 3)));
> +void monitor_printf(Monitor *mon, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
> void monitor_print_filename(Monitor *mon, const char *filename);
> void monitor_flush(Monitor *mon);
>
> diff --git a/qemu-common.h b/qemu-common.h
> index 88c5207..81aafa0 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -196,8 +196,7 @@ int qemu_pipe(int pipefd[2]);
>
> /* Error handling. */
>
> -void QEMU_NORETURN hw_error(const char *fmt, ...)
> - __attribute__ ((__format__ (__printf__, 1, 2)));
> +void QEMU_NORETURN hw_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
>
> /* IO callbacks. */
> typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
> diff --git a/qemu-error.h b/qemu-error.h
> index a45609f..531ec63 100644
> --- a/qemu-error.h
> +++ b/qemu-error.h
> @@ -31,11 +31,10 @@ void loc_set_cmdline(char **argv, int idx, int cnt);
> void loc_set_file(const char *fname, int lno);
>
> void error_vprintf(const char *fmt, va_list ap);
> -void error_printf(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
> -void error_printf_unless_qmp(const char *fmt, ...)
> - __attribute__ ((format(printf, 1, 2)));
> +void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> +void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> void error_print_loc(void);
> void error_set_progname(const char *argv0);
> -void error_report(const char *fmt, ...) __attribute__ ((format(printf, 1, 2)));
> +void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
>
> #endif
> diff --git a/qerror.h b/qerror.h
> index 62802ea..f2984dd 100644
> --- a/qerror.h
> +++ b/qerror.h
> @@ -38,8 +38,7 @@ QError *qerror_from_info(const char *file, int linenr, const char *func,
> QString *qerror_human(const QError *qerror);
> void qerror_print(QError *qerror);
> void qerror_report_internal(const char *file, int linenr, const char *func,
> - const char *fmt, ...)
> - __attribute__ ((format(printf, 4, 5)));
> + const char *fmt, ...) GCC_FMT_ATTR(4, 5);
> #define qerror_report(fmt, ...) \
> qerror_report_internal(__FILE__, __LINE__, __func__, fmt, ## __VA_ARGS__)
> QError *qobject_to_qerror(const QObject *obj);
> diff --git a/qjson.h b/qjson.h
> index 7afec2e..7eef357 100644
> --- a/qjson.h
> +++ b/qjson.h
> @@ -19,8 +19,7 @@
> #include "qstring.h"
>
> QObject *qobject_from_json(const char *string);
> -QObject *qobject_from_jsonf(const char *string, ...)
> - __attribute__((__format__ (__printf__, 1, 2)));
> +QObject *qobject_from_jsonf(const char *string, ...) GCC_FMT_ATTR(1, 2);
> QObject *qobject_from_jsonv(const char *string, va_list *ap);
>
> QString *qobject_to_json(const QObject *obj);
> --
> 1.7.1
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [PATCH 3/3] Use GCC_FMT_ATTR (format checking)
2010-09-23 19:28 ` [Qemu-devel] [PATCH 3/3] Use " Stefan Weil
@ 2010-10-03 7:49 ` Blue Swirl
0 siblings, 0 replies; 13+ messages in thread
From: Blue Swirl @ 2010-10-03 7:49 UTC (permalink / raw)
To: Stefan Weil; +Cc: QEMU Developers
Thanks, applied.
On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
> audio/audio.h | 2 +-
> disas.c | 3 ++-
> hw/mips_fulong2e.c | 3 ++-
> hw/mips_malta.c | 3 ++-
> json-parser.c | 3 ++-
> monitor.c | 3 ++-
> monitor.h | 3 ++-
> qemu-char.h | 3 ++-
> qemu-error.h | 2 +-
> qemu-img.c | 2 +-
> qerror.c | 6 ++++--
> qerror.h | 2 +-
> qjson.h | 4 ++--
> slirp/slirp.h | 2 +-
> 14 files changed, 25 insertions(+), 16 deletions(-)
>
> diff --git a/audio/audio.h b/audio/audio.h
> index 39a0631..a70fda9 100644
> --- a/audio/audio.h
> +++ b/audio/audio.h
> @@ -86,7 +86,7 @@ typedef struct QEMUAudioTimeStamp {
> uint64_t old_ts;
> } QEMUAudioTimeStamp;
>
> -void AUD_vlog (const char *cap, const char *fmt, va_list ap);
> +void AUD_vlog (const char *cap, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0);
> void AUD_log (const char *cap, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
>
> void AUD_help (void);
> diff --git a/disas.c b/disas.c
> index 79a98de..afe331f 100644
> --- a/disas.c
> +++ b/disas.c
> @@ -349,7 +349,8 @@ monitor_read_memory (bfd_vma memaddr, bfd_byte *myaddr, int length,
> return 0;
> }
>
> -static int monitor_fprintf(FILE *stream, const char *fmt, ...)
> +static int GCC_FMT_ATTR(2, 3)
> +monitor_fprintf(FILE *stream, const char *fmt, ...)
> {
> va_list ap;
> va_start(ap, fmt);
> diff --git a/hw/mips_fulong2e.c b/hw/mips_fulong2e.c
> index 61ca9c4..df80ef6 100644
> --- a/hw/mips_fulong2e.c
> +++ b/hw/mips_fulong2e.c
> @@ -76,7 +76,8 @@ static struct _loaderparams {
> const char *initrd_filename;
> } loaderparams;
>
> -static void prom_set(uint32_t* prom_buf, int index, const char *string, ...)
> +static void GCC_FMT_ATTR(3, 4) prom_set(uint32_t* prom_buf, int index,
> + const char *string, ...)
> {
> va_list ap;
> int32_t table_addr;
> diff --git a/hw/mips_malta.c b/hw/mips_malta.c
> index 1cb7880..0969089 100644
> --- a/hw/mips_malta.c
> +++ b/hw/mips_malta.c
> @@ -654,7 +654,8 @@ static void write_bootloader (CPUState *env, uint8_t *base,
>
> }
>
> -static void prom_set(uint32_t* prom_buf, int index, const char *string, ...)
> +static void GCC_FMT_ATTR(3, 4) prom_set(uint32_t* prom_buf, int index,
> + const char *string, ...)
> {
> va_list ap;
> int32_t table_addr;
> diff --git a/json-parser.c b/json-parser.c
> index 70b9b6f..6c06ef9 100644
> --- a/json-parser.c
> +++ b/json-parser.c
> @@ -91,7 +91,8 @@ static int token_is_escape(QObject *obj, const char *value)
> /**
> * Error handler
> */
> -static void parse_error(JSONParserContext *ctxt, QObject *token, const char *msg, ...)
> +static void GCC_FMT_ATTR(3, 4) parse_error(JSONParserContext *ctxt,
> + QObject *token, const char *msg, ...)
> {
> va_list ap;
> va_start(ap, msg);
> diff --git a/monitor.c b/monitor.c
> index e602480..377ab37 100644
> --- a/monitor.c
> +++ b/monitor.c
> @@ -316,7 +316,8 @@ void monitor_print_filename(Monitor *mon, const char *filename)
> }
> }
>
> -static int monitor_fprintf(FILE *stream, const char *fmt, ...)
> +static int GCC_FMT_ATTR(2, 3) monitor_fprintf(FILE *stream,
> + const char *fmt, ...)
> {
> va_list ap;
> va_start(ap, fmt);
> diff --git a/monitor.h b/monitor.h
> index 185cc3e..4a6cf82 100644
> --- a/monitor.h
> +++ b/monitor.h
> @@ -49,7 +49,8 @@ int monitor_read_bdrv_key_start(Monitor *mon, BlockDriverState *bs,
>
> int monitor_get_fd(Monitor *mon, const char *fdname);
>
> -void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap);
> +void monitor_vprintf(Monitor *mon, const char *fmt, va_list ap)
> + GCC_FMT_ATTR(2, 0);
> void monitor_printf(Monitor *mon, const char *fmt, ...) GCC_FMT_ATTR(2, 3);
> void monitor_print_filename(Monitor *mon, const char *filename);
> void monitor_flush(Monitor *mon);
> diff --git a/qemu-char.h b/qemu-char.h
> index 6ea01ba..18ad12b 100644
> --- a/qemu-char.h
> +++ b/qemu-char.h
> @@ -76,7 +76,8 @@ CharDriverState *qemu_chr_open_opts(QemuOpts *opts,
> void (*init)(struct CharDriverState *s));
> CharDriverState *qemu_chr_open(const char *label, const char *filename, void (*init)(struct CharDriverState *s));
> void qemu_chr_close(CharDriverState *chr);
> -void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
> +void qemu_chr_printf(CharDriverState *s, const char *fmt, ...)
> + GCC_FMT_ATTR(2, 3);
> int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
> void qemu_chr_send_event(CharDriverState *s, int event);
> void qemu_chr_add_handlers(CharDriverState *s,
> diff --git a/qemu-error.h b/qemu-error.h
> index 531ec63..4d5c537 100644
> --- a/qemu-error.h
> +++ b/qemu-error.h
> @@ -30,7 +30,7 @@ void loc_set_none(void);
> void loc_set_cmdline(char **argv, int idx, int cnt);
> void loc_set_file(const char *fname, int lno);
>
> -void error_vprintf(const char *fmt, va_list ap);
> +void error_vprintf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0);
> void error_printf(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> void error_printf_unless_qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
> void error_print_loc(void);
> diff --git a/qemu-img.c b/qemu-img.c
> index 4e035e4..578b8eb 100644
> --- a/qemu-img.c
> +++ b/qemu-img.c
> @@ -39,7 +39,7 @@ typedef struct img_cmd_t {
> /* Default to cache=writeback as data integrity is not important for qemu-tcg. */
> #define BDRV_O_FLAGS BDRV_O_CACHE_WB
>
> -static void error(const char *fmt, ...)
> +static void GCC_FMT_ATTR(1, 2) error(const char *fmt, ...)
> {
> va_list ap;
> va_start(ap, fmt);
> diff --git a/qerror.c b/qerror.c
> index 0af3ab3..ac2cdaf 100644
> --- a/qerror.c
> +++ b/qerror.c
> @@ -218,7 +218,8 @@ QError *qerror_new(void)
> return qerr;
> }
>
> -static void qerror_abort(const QError *qerr, const char *fmt, ...)
> +static void GCC_FMT_ATTR(2, 3) qerror_abort(const QError *qerr,
> + const char *fmt, ...)
> {
> va_list ap;
>
> @@ -233,7 +234,8 @@ static void qerror_abort(const QError *qerr, const char *fmt, ...)
> abort();
> }
>
> -static void qerror_set_data(QError *qerr, const char *fmt, va_list *va)
> +static void GCC_FMT_ATTR(2, 0) qerror_set_data(QError *qerr,
> + const char *fmt, va_list *va)
> {
> QObject *obj;
>
> diff --git a/qerror.h b/qerror.h
> index f2984dd..943a24b 100644
> --- a/qerror.h
> +++ b/qerror.h
> @@ -34,7 +34,7 @@ typedef struct QError {
>
> QError *qerror_new(void);
> QError *qerror_from_info(const char *file, int linenr, const char *func,
> - const char *fmt, va_list *va);
> + const char *fmt, va_list *va) GCC_FMT_ATTR(4, 0);
> QString *qerror_human(const QError *qerror);
> void qerror_print(QError *qerror);
> void qerror_report_internal(const char *file, int linenr, const char *func,
> diff --git a/qjson.h b/qjson.h
> index 7eef357..70d0afb 100644
> --- a/qjson.h
> +++ b/qjson.h
> @@ -18,9 +18,9 @@
> #include "qobject.h"
> #include "qstring.h"
>
> -QObject *qobject_from_json(const char *string);
> +QObject *qobject_from_json(const char *string) GCC_FMT_ATTR(1, 0);
> QObject *qobject_from_jsonf(const char *string, ...) GCC_FMT_ATTR(1, 2);
> -QObject *qobject_from_jsonv(const char *string, va_list *ap);
> +QObject *qobject_from_jsonv(const char *string, va_list *ap) GCC_FMT_ATTR(1, 0);
>
> QString *qobject_to_json(const QObject *obj);
>
> diff --git a/slirp/slirp.h b/slirp/slirp.h
> index 3a5d592..14edf66 100644
> --- a/slirp/slirp.h
> +++ b/slirp/slirp.h
> @@ -261,7 +261,7 @@ void if_start(struct ttys *);
> long gethostid(void);
> #endif
>
> -void lprint(const char *, ...);
> +void lprint(const char *, ...) GCC_FMT_ATTR(1, 2);
>
> #ifndef _WIN32
> #include <netdb.h>
> --
> 1.7.1
>
>
>
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?)
2010-09-25 7:46 ` Blue Swirl
@ 2010-10-04 19:29 ` Stefan Weil
2010-10-09 22:46 ` Andreas Färber
0 siblings, 1 reply; 13+ messages in thread
From: Stefan Weil @ 2010-10-04 19:29 UTC (permalink / raw)
To: QEMU Developers; +Cc: Blue Swirl
Am 25.09.2010 09:46, schrieb Blue Swirl:
> On Thu, Sep 23, 2010 at 8:44 PM, Stefan Weil <weil@mail.berlios.de> wrote:
>> Am 23.09.2010 22:33, schrieb Blue Swirl:
>>>
>>> On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de>
>>> wrote:
>>>>
>>>> Replace the remaining format attribute printf by macro
>>>> GCC_FMT_ATTR which uses gnu_printf (if supported).
>>>>
>>>> This needs additional code changes:
>>>>
>>>> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>>>>
>>>> * Remove standard includes when qemu-common.h was added.
>>>> qemu-common.h already provides these includes.
>>>>
>>>> * Remove local definitions which now come from stdio.h.
>>>> These definitions were needed before tcg was introduced.
>>>> They raise conflicts when qemu-common.h is included.
>>>
>>> IIRC the problem was that some system headers were incompatible with
>>> global asm variables. There is still one, AREG0.
>>>
>>> But I'd rather not keep the hideous local definitions forever. Maybe
>>> those systems which are broken by the patch are not interesting
>>> anymore?
>>
>> Are there such systems? Or did the problems with earlier
>> versions arise from the fact that a lot of global asm variables
>> were reserved by qemu? How could a correctly defined AREG0
>> interfere with system headers?
>
> One explanation is that the code in target-*/op_helper.c may assume
> that env/AREG0 is always available but since library functions may
> clobber that, we want to hide them.
>
>> For linux and win32, I did not notice problems caused by these changes.
>
> It looks like that code has origins in one of the very first patches,
> r16 or ba1c6e37fc5efc0f3d1e50d0760f9f4a1061187b. It was moved from
> exec-i386.h to dyngen-exec.h by r236 or
> 79638566e5b87058e92f537b989df0dbc23f8b41. R997 or
> 1e6cae953d6a37216359b79e05d23e1bf4dc6bbe added a warning about system
> headers. The commits around that add OS X support, maybe the problem
> was there?
Current qemu code includes several locations where standard headers
like stdio.h are forbidden. See qemu-common.h (__DYNGEN_EXEC_H__),
dyngen-exec.h, cris-dis.h and perhaps more examples of this
restriction.
Who knows the reason for this restriction? Was it use of global registers
with dyngen? Was it needed only for certain hosts (maybe OSX) or old
versions of gcc?
Most important: Is this restriction still needed?
It would simplify things like common declarations and also allow
cleaner code (without private declarations for FILE etc.) if we could
remove this restriction.
In my personal test environment (gcc-4.x, linux on different hosts, win32)
the restriction was not needed.
Regards,
Stefan
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?)
2010-10-04 19:29 ` [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?) Stefan Weil
@ 2010-10-09 22:46 ` Andreas Färber
2010-10-11 16:22 ` Stefan Weil
0 siblings, 1 reply; 13+ messages in thread
From: Andreas Färber @ 2010-10-09 22:46 UTC (permalink / raw)
To: Stefan Weil; +Cc: Blue Swirl, QEMU Developers
Am 04.10.2010 um 21:29 schrieb Stefan Weil:
> Am 25.09.2010 09:46, schrieb Blue Swirl:
>> On Thu, Sep 23, 2010 at 8:44 PM, Stefan Weil <weil@mail.berlios.de>
>> wrote:
>>> Am 23.09.2010 22:33, schrieb Blue Swirl:
>>>>
>>>> On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil
>>>> <weil@mail.berlios.de> wrote:
>>>>>
>>>>> Replace the remaining format attribute printf by macro
>>>>> GCC_FMT_ATTR which uses gnu_printf (if supported).
>>>>>
>>>>> This needs additional code changes:
>>>>>
>>>>> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>>>>>
>>>>> * Remove standard includes when qemu-common.h was added.
>>>>> qemu-common.h already provides these includes.
>>>>>
>>>>> * Remove local definitions which now come from stdio.h.
>>>>> These definitions were needed before tcg was introduced.
>>>>> They raise conflicts when qemu-common.h is included.
>>>>
>>>> IIRC the problem was that some system headers were incompatible
>>>> with
>>>> global asm variables. There is still one, AREG0.
>>>>
>>>> But I'd rather not keep the hideous local definitions forever.
>>>> Maybe
>>>> those systems which are broken by the patch are not interesting
>>>> anymore?
>>>
>>> Are there such systems? Or did the problems with earlier
>>> versions arise from the fact that a lot of global asm variables
>>> were reserved by qemu? How could a correctly defined AREG0
>>> interfere with system headers?
>>
>> One explanation is that the code in target-*/op_helper.c may assume
>> that env/AREG0 is always available but since library functions may
>> clobber that, we want to hide them.
>>
>>> For linux and win32, I did not notice problems caused by these
>>> changes.
>>
>> It looks like that code has origins in one of the very first patches,
>> r16 or ba1c6e37fc5efc0f3d1e50d0760f9f4a1061187b. It was moved from
>> exec-i386.h to dyngen-exec.h by r236 or
>> 79638566e5b87058e92f537b989df0dbc23f8b41. R997 or
>> 1e6cae953d6a37216359b79e05d23e1bf4dc6bbe added a warning about system
>> headers. The commits around that add OS X support, maybe the problem
>> was there?
>
>
> Current qemu code includes several locations where standard headers
> like stdio.h are forbidden. See qemu-common.h (__DYNGEN_EXEC_H__),
> dyngen-exec.h, cris-dis.h and perhaps more examples of this
> restriction.
>
> Who knows the reason for this restriction? Was it use of global
> registers
> with dyngen? Was it needed only for certain hosts (maybe OSX) or old
> versions of gcc?
>
> Most important: Is this restriction still needed?
>
> It would simplify things like common declarations and also allow
> cleaner code (without private declarations for FILE etc.) if we could
> remove this restriction.
>
> In my personal test environment (gcc-4.x, linux on different hosts,
> win32)
> the restriction was not needed.
Tested-by: Andreas Färber <andreas.faerber@web.de>
Patch 2/3 [1] compiles without warnings on Mac OS X v10.5 ppc64, using
Apple's GCC 4.0.1.
As guests, AIX/ppc64, Haiku/ppc, Fedora/x64 and Haiku/i386 booted as
before.
Andreas
[1] http://patchwork.ozlabs.org/patch/65574/
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?)
2010-10-09 22:46 ` Andreas Färber
@ 2010-10-11 16:22 ` Stefan Weil
2010-10-12 18:33 ` Blue Swirl
0 siblings, 1 reply; 13+ messages in thread
From: Stefan Weil @ 2010-10-11 16:22 UTC (permalink / raw)
To: Blue Swirl; +Cc: =?ISO-8859-1?Q?Andreas_F=E4?=, rber, QEMU Developers
Am 10.10.2010 00:46, schrieb Andreas Färber:
> Am 04.10.2010 um 21:29 schrieb Stefan Weil:
>
>> Am 25.09.2010 09:46, schrieb Blue Swirl:
>>> On Thu, Sep 23, 2010 at 8:44 PM, Stefan Weil <weil@mail.berlios.de>
>>> wrote:
>>>> Am 23.09.2010 22:33, schrieb Blue Swirl:
>>>>>
>>>>> On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil
>>>>> <weil@mail.berlios.de> wrote:
>>>>>>
>>>>>> Replace the remaining format attribute printf by macro
>>>>>> GCC_FMT_ATTR which uses gnu_printf (if supported).
>>>>>>
>>>>>> This needs additional code changes:
>>>>>>
>>>>>> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>>>>>>
>>>>>> * Remove standard includes when qemu-common.h was added.
>>>>>> qemu-common.h already provides these includes.
>>>>>>
>>>>>> * Remove local definitions which now come from stdio.h.
>>>>>> These definitions were needed before tcg was introduced.
>>>>>> They raise conflicts when qemu-common.h is included.
>>>>>
>>>>> IIRC the problem was that some system headers were incompatible with
>>>>> global asm variables. There is still one, AREG0.
>>>>>
>>>>> But I'd rather not keep the hideous local definitions forever. Maybe
>>>>> those systems which are broken by the patch are not interesting
>>>>> anymore?
>>>>
>>>> Are there such systems? Or did the problems with earlier
>>>> versions arise from the fact that a lot of global asm variables
>>>> were reserved by qemu? How could a correctly defined AREG0
>>>> interfere with system headers?
>>>
>>> One explanation is that the code in target-*/op_helper.c may assume
>>> that env/AREG0 is always available but since library functions may
>>> clobber that, we want to hide them.
>>>
>>>> For linux and win32, I did not notice problems caused by these
>>>> changes.
>>>
>>> It looks like that code has origins in one of the very first patches,
>>> r16 or ba1c6e37fc5efc0f3d1e50d0760f9f4a1061187b. It was moved from
>>> exec-i386.h to dyngen-exec.h by r236 or
>>> 79638566e5b87058e92f537b989df0dbc23f8b41. R997 or
>>> 1e6cae953d6a37216359b79e05d23e1bf4dc6bbe added a warning about system
>>> headers. The commits around that add OS X support, maybe the problem
>>> was there?
>>
>>
>> Current qemu code includes several locations where standard headers
>> like stdio.h are forbidden. See qemu-common.h (__DYNGEN_EXEC_H__),
>> dyngen-exec.h, cris-dis.h and perhaps more examples of this
>> restriction.
>>
>> Who knows the reason for this restriction? Was it use of global
>> registers
>> with dyngen? Was it needed only for certain hosts (maybe OSX) or old
>> versions of gcc?
>>
>> Most important: Is this restriction still needed?
>>
>> It would simplify things like common declarations and also allow
>> cleaner code (without private declarations for FILE etc.) if we could
>> remove this restriction.
>>
>> In my personal test environment (gcc-4.x, linux on different hosts,
>> win32)
>> the restriction was not needed.
>
> Tested-by: Andreas Färber <andreas.faerber@web.de>
>
> Patch 2/3 [1] compiles without warnings on Mac OS X v10.5 ppc64, using
> Apple's GCC 4.0.1.
> As guests, AIX/ppc64, Haiku/ppc, Fedora/x64 and Haiku/i386 booted as
> before.
>
> Andreas
>
> [1] http://patchwork.ozlabs.org/patch/65574/
Andreas, thank you for testing.
Blue Swirl, for the next steps towards getting full format checks
patch 2/3 or something equivalent is needed because GCC_FMT_ATTR
(which is defined in qemu-common.h) should be available
everywhere.
With Andreas test results, we now know that Linux, OSX and Win32
don't need the restriction regarding system include files like stdio.h.
Do you think more tests are needed, should we wait for more feedback
or can the patch be applied?
^ permalink raw reply [flat|nested] 13+ messages in thread
* [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking)
2010-09-23 19:28 ` [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute " Stefan Weil
2010-09-23 20:33 ` [Qemu-devel] " Blue Swirl
@ 2010-10-12 18:23 ` Blue Swirl
1 sibling, 0 replies; 13+ messages in thread
From: Blue Swirl @ 2010-10-12 18:23 UTC (permalink / raw)
To: Stefan Weil; +Cc: QEMU Developers
On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Replace the remaining format attribute printf by macro
> GCC_FMT_ATTR which uses gnu_printf (if supported).
>
> This needs additional code changes:
>
> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>
> * Remove standard includes when qemu-common.h was added.
> qemu-common.h already provides these includes.
>
> * Remove local definitions which now come from stdio.h.
> These definitions were needed before tcg was introduced.
> They raise conflicts when qemu-common.h is included.
>
> Cc: Blue Swirl <blauwirbel@gmail.com>
> Signed-off-by: Stefan Weil <weil@mail.berlios.de>
> ---
> cpu-all.h | 2 +-
> cpu-exec.c | 2 ++
> dyngen-exec.h | 9 ---------
> target-alpha/op_helper.c | 1 +
> target-arm/op_helper.c | 2 ++
> target-cris/op_helper.c | 1 +
> target-i386/op_helper.c | 1 +
> target-m68k/op_helper.c | 2 ++
> target-microblaze/op_helper.c | 2 +-
> target-mips/op_helper.c | 3 ++-
> target-ppc/op_helper.c | 3 ++-
> target-sh4/op_helper.c | 4 ++--
> target-sparc/op_helper.c | 1 +
> 13 files changed, 18 insertions(+), 15 deletions(-)
>
> diff --git a/cpu-all.h b/cpu-all.h
> index 67a3266..11edddc 100644
> --- a/cpu-all.h
> +++ b/cpu-all.h
> @@ -773,7 +773,7 @@ void cpu_dump_statistics (CPUState *env, FILE *f,
> int flags);
>
> void QEMU_NORETURN cpu_abort(CPUState *env, const char *fmt, ...)
> - __attribute__ ((__format__ (__printf__, 2, 3)));
> + GCC_FMT_ATTR(2, 3);
> extern CPUState *first_cpu;
> extern CPUState *cpu_single_env;
>
> diff --git a/cpu-exec.c b/cpu-exec.c
> index dbdfdcc..1cb36e0 100644
> --- a/cpu-exec.c
> +++ b/cpu-exec.c
> @@ -16,6 +16,8 @@
> * You should have received a copy of the GNU Lesser General Public
> * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> */
> +
> +#include "qemu-common.h"
This and other similar additions are not needed for GCC_FMT_ATTR,
qemu-common is already #included by exec-all.h (included by exec.h).
Only the macro definition needs to move up near QEMU_NORETURN etc so
that it's available to exec code.
> #include "config.h"
> #include "exec.h"
> #include "disas.h"
> diff --git a/dyngen-exec.h b/dyngen-exec.h
> index 5bfef3f..97e2556 100644
> --- a/dyngen-exec.h
> +++ b/dyngen-exec.h
> @@ -40,15 +40,6 @@
> /* XXX: This may be wrong for 64-bit ILP32 hosts. */
> typedef void * host_reg_t;
>
> -#ifdef CONFIG_BSD
> -typedef struct __sFILE FILE;
> -#else
> -typedef struct FILE FILE;
> -#endif
> -extern int fprintf(FILE *, const char *, ...);
> -extern int fputs(const char *, FILE *);
> -extern int printf(const char *, ...);
> -
This should be in a separate patch which removes __DYNGEN_EXEC_H.
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?)
2010-10-11 16:22 ` Stefan Weil
@ 2010-10-12 18:33 ` Blue Swirl
0 siblings, 0 replies; 13+ messages in thread
From: Blue Swirl @ 2010-10-12 18:33 UTC (permalink / raw)
To: Stefan Weil; +Cc: Andreas Färber, QEMU Developers
On Mon, Oct 11, 2010 at 4:22 PM, Stefan Weil <weil@mail.berlios.de> wrote:
> Am 10.10.2010 00:46, schrieb Andreas Färber:
>>
>> Am 04.10.2010 um 21:29 schrieb Stefan Weil:
>>
>>> Am 25.09.2010 09:46, schrieb Blue Swirl:
>>>>
>>>> On Thu, Sep 23, 2010 at 8:44 PM, Stefan Weil <weil@mail.berlios.de>
>>>> wrote:
>>>>>
>>>>> Am 23.09.2010 22:33, schrieb Blue Swirl:
>>>>>>
>>>>>> On Thu, Sep 23, 2010 at 7:28 PM, Stefan Weil <weil@mail.berlios.de>
>>>>>> wrote:
>>>>>>>
>>>>>>> Replace the remaining format attribute printf by macro
>>>>>>> GCC_FMT_ATTR which uses gnu_printf (if supported).
>>>>>>>
>>>>>>> This needs additional code changes:
>>>>>>>
>>>>>>> * Add qemu-common.h (which defined GCC_FMT_ATTR) were needed.
>>>>>>>
>>>>>>> * Remove standard includes when qemu-common.h was added.
>>>>>>> qemu-common.h already provides these includes.
>>>>>>>
>>>>>>> * Remove local definitions which now come from stdio.h.
>>>>>>> These definitions were needed before tcg was introduced.
>>>>>>> They raise conflicts when qemu-common.h is included.
>>>>>>
>>>>>> IIRC the problem was that some system headers were incompatible with
>>>>>> global asm variables. There is still one, AREG0.
>>>>>>
>>>>>> But I'd rather not keep the hideous local definitions forever. Maybe
>>>>>> those systems which are broken by the patch are not interesting
>>>>>> anymore?
>>>>>
>>>>> Are there such systems? Or did the problems with earlier
>>>>> versions arise from the fact that a lot of global asm variables
>>>>> were reserved by qemu? How could a correctly defined AREG0
>>>>> interfere with system headers?
>>>>
>>>> One explanation is that the code in target-*/op_helper.c may assume
>>>> that env/AREG0 is always available but since library functions may
>>>> clobber that, we want to hide them.
>>>>
>>>>> For linux and win32, I did not notice problems caused by these changes.
>>>>
>>>> It looks like that code has origins in one of the very first patches,
>>>> r16 or ba1c6e37fc5efc0f3d1e50d0760f9f4a1061187b. It was moved from
>>>> exec-i386.h to dyngen-exec.h by r236 or
>>>> 79638566e5b87058e92f537b989df0dbc23f8b41. R997 or
>>>> 1e6cae953d6a37216359b79e05d23e1bf4dc6bbe added a warning about system
>>>> headers. The commits around that add OS X support, maybe the problem
>>>> was there?
>>>
>>>
>>> Current qemu code includes several locations where standard headers
>>> like stdio.h are forbidden. See qemu-common.h (__DYNGEN_EXEC_H__),
>>> dyngen-exec.h, cris-dis.h and perhaps more examples of this
>>> restriction.
>>>
>>> Who knows the reason for this restriction? Was it use of global registers
>>> with dyngen? Was it needed only for certain hosts (maybe OSX) or old
>>> versions of gcc?
>>>
>>> Most important: Is this restriction still needed?
>>>
>>> It would simplify things like common declarations and also allow
>>> cleaner code (without private declarations for FILE etc.) if we could
>>> remove this restriction.
>>>
>>> In my personal test environment (gcc-4.x, linux on different hosts,
>>> win32)
>>> the restriction was not needed.
>>
>> Tested-by: Andreas Färber <andreas.faerber@web.de>
>>
>> Patch 2/3 [1] compiles without warnings on Mac OS X v10.5 ppc64, using
>> Apple's GCC 4.0.1.
>> As guests, AIX/ppc64, Haiku/ppc, Fedora/x64 and Haiku/i386 booted as
>> before.
>>
>> Andreas
>>
>> [1] http://patchwork.ozlabs.org/patch/65574/
>
> Andreas, thank you for testing.
>
> Blue Swirl, for the next steps towards getting full format checks
> patch 2/3 or something equivalent is needed because GCC_FMT_ATTR
> (which is defined in qemu-common.h) should be available
> everywhere.
>
> With Andreas test results, we now know that Linux, OSX and Win32
> don't need the restriction regarding system include files like stdio.h.
>
> Do you think more tests are needed, should we wait for more feedback
> or can the patch be applied?
What about the library compatibility situation, do we know anything about that?
On the other hand, we could apply the patch and wait for bug reports.
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2010-10-12 18:40 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-09-23 19:28 [Qemu-devel] [PATCH 1/3] Replace most gcc format attributes by macro GCC_FMT_ATTR (format checking) Stefan Weil
2010-09-23 19:28 ` [Qemu-devel] [PATCH 2/3] Replace remaining gcc format attribute " Stefan Weil
2010-09-23 20:33 ` [Qemu-devel] " Blue Swirl
2010-09-23 20:44 ` Stefan Weil
2010-09-25 7:46 ` Blue Swirl
2010-10-04 19:29 ` [Qemu-devel] [RFC] Can we remove special handling of standard headers (introduced for dyngen / OSX?) Stefan Weil
2010-10-09 22:46 ` Andreas Färber
2010-10-11 16:22 ` Stefan Weil
2010-10-12 18:33 ` Blue Swirl
2010-10-12 18:23 ` [Qemu-devel] Re: [PATCH 2/3] Replace remaining gcc format attribute by macro GCC_FMT_ATTR (format checking) Blue Swirl
2010-09-23 19:28 ` [Qemu-devel] [PATCH 3/3] Use " Stefan Weil
2010-10-03 7:49 ` Blue Swirl
2010-10-03 7:48 ` [Qemu-devel] Re: [PATCH 1/3] Replace most gcc format attributes by macro " 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).