From 9ce3833d5aebf0f0a663ffb2126da7440d0b50f7 Mon Sep 17 00:00:00 2001 From: Daniel Stodden Date: Tue, 15 Feb 2011 01:37:44 -0800 Subject: [PATCH] Add some useful gccisms. This are all named after the linux/compiler.h ones, not to get uneccessarily creative. Signed-off-by: Daniel Stodden --- drivers/tapdisk-interface.c | 2 +- drivers/tapdisk-interface.h | 2 +- drivers/tapdisk-log.c | 3 +-- drivers/tapdisk-log.h | 10 ++++------ drivers/tapdisk-stats.c | 2 +- drivers/tapdisk.h | 1 + include/compiler.h | 35 +++++++++++++++++++++++++++++++++++ 7 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 include/compiler.h diff --git a/drivers/tapdisk-interface.c b/drivers/tapdisk-interface.c index af3c315..49471c4 100644 --- a/drivers/tapdisk-interface.c +++ b/drivers/tapdisk-interface.c @@ -261,7 +261,7 @@ td_debug(td_image_t *image) tapdisk_driver_debug(driver); } -void +__noreturn void td_panic(void) { tlog_precious(); diff --git a/drivers/tapdisk-interface.h b/drivers/tapdisk-interface.h index 4ee5424..d696681 100644 --- a/drivers/tapdisk-interface.h +++ b/drivers/tapdisk-interface.h @@ -50,6 +50,6 @@ void td_prep_read(struct tiocb *, int, char *, size_t, long long, td_queue_callback_t, void *); void td_prep_write(struct tiocb *, int, char *, size_t, long long, td_queue_callback_t, void *); -void td_panic(void) __attribute__((noreturn)); +void td_panic(void) __noreturn; #endif diff --git a/drivers/tapdisk-log.c b/drivers/tapdisk-log.c index bf7cdd6..e531c3f 100644 --- a/drivers/tapdisk-log.c +++ b/drivers/tapdisk-log.c @@ -65,8 +65,7 @@ tlog_logfile_vprint(const char *fmt, va_list ap) tapdisk_logfile_vprintf(&tapdisk_log.logfile, fmt, ap); } -static void -__attribute__((format(printf, 1, 2))) +static void __printf(1, 2) tlog_logfile_print(const char *fmt, ...) { va_list ap; diff --git a/drivers/tapdisk-log.h b/drivers/tapdisk-log.h index 678d78b..eeac304 100644 --- a/drivers/tapdisk-log.h +++ b/drivers/tapdisk-log.h @@ -36,12 +36,13 @@ #define TLOG_DIR "/var/log/blktap" #include +#include "compiler.h" int tlog_open(const char *, int, int); void tlog_close(void); void tlog_precious(void); void tlog_vsyslog(int, const char *, va_list); -void tlog_syslog(int, const char *, ...); +void tlog_syslog(int, const char *, ...) __printf(2, 3); #include @@ -49,11 +50,8 @@ void tlog_syslog(int, const char *, ...); #define DPRINTF(_f, _a...) syslog(LOG_INFO, _f, ##_a) #define PERROR(_f, _a...) EPRINTF(_f ": %s", ##_a, strerror(errno)) -void __tlog_write(int, const char *, ...) - __attribute__((format(printf, 2, 3))); - -void __tlog_error(const char *fmt, ...) - __attribute__((format(printf, 1, 2))); +void __tlog_write(int, const char *, ...) __printf(2, 3); +void __tlog_error(const char *fmt, ...) __printf(1, 2); #define tlog_write(_level, _f, _a...) \ __tlog_write(_level, "%s: " _f, __func__, ##_a) diff --git a/drivers/tapdisk-stats.c b/drivers/tapdisk-stats.c index c073fa2..42f420d 100644 --- a/drivers/tapdisk-stats.c +++ b/drivers/tapdisk-stats.c @@ -43,7 +43,7 @@ __stats_vsprintf(td_stats_t *st, st->pos += vsnprintf(st->pos, size, fmt, ap); } -static void __attribute__((format (printf, 2, 3))) +static void __printf(2, 3) __stats_sprintf(td_stats_t *st, const char *fmt, ...) { diff --git a/drivers/tapdisk.h b/drivers/tapdisk.h index d552b28..eb454b4 100644 --- a/drivers/tapdisk.h +++ b/drivers/tapdisk.h @@ -60,6 +60,7 @@ #include #include "list.h" +#include "compiler.h" #include "tapdisk-log.h" #include "tapdisk-utils.h" #include "tapdisk-stats.h" diff --git a/include/compiler.h b/include/compiler.h new file mode 100644 index 0000000..2c39fbb --- /dev/null +++ b/include/compiler.h @@ -0,0 +1,35 @@ +#ifndef _BLKTAP_COMPILER_H +#define _BLKTAP_COMPILER_H + +#ifdef __GNUC__ +#define likely(_cond) __builtin_expect(!!(_cond), 1) +#define unlikely(_cond) __builtin_expect(!!(_cond), 0) +#endif + +#ifndef likely +#define likely(_cond) (_cond) +#endif + +#ifndef unlikely +#define unlikely(_cond) (_cond) +#endif + +#ifdef __GNUC__ +#define __printf(_f, _a) __attribute__((format (printf, _f, _a))) +#define __scanf(_f, _a) __attribute__((format (scanf, _f, _a))) +#define __noreturn __attribute__((noreturn)) +#endif + +#ifndef __printf +#define __printf(_f, _a) +#endif + +#ifndef __scanf +#define __scanf(_f, _a) +#endif + +#ifndef __noreturn +#define __noreturn +#endif + +#endif /* _BLKTAP_COMPILER_H */ -- 2.39.5