diff mbox

[v2,07/16] stellaris: Convert conditional compilation of debug printfs to regular ifs

Message ID 1399964572-5376-8-git-send-email-marc.mari.barcelo@gmail.com
State New
Headers show

Commit Message

Marc Marí May 13, 2014, 7:02 a.m. UTC
Modify debug macros to have the same format through the codebase and use regular
ifs instead of ifdef.

As the debug printf is always put in code, some casting had to be added to avoid
warnings treated as errors at compile time.

Signed-off-by: Marc Marí <marc.mari.barcelo@gmail.com>
---
 hw/net/stellaris_enet.c |   21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

Comments

Eric Blake May 13, 2014, 3:05 p.m. UTC | #1
On 05/13/2014 01:02 AM, Marc Marí wrote:
> Modify debug macros to have the same format through the codebase and use regular
> ifs instead of ifdef.
> 
> As the debug printf is always put in code, some casting had to be added to avoid
> warnings treated as errors at compile time.

Same comments as in 1/16 about long lines and gcc extensions (probably
for the entire series).  Additionally...

> 
> Signed-off-by: Marc Marí <marc.mari.barcelo@gmail.com>
> ---
>  hw/net/stellaris_enet.c |   21 +++++++++++----------
>  1 file changed, 11 insertions(+), 10 deletions(-)
> 
> diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
> index d04e6a4..f6737a9 100644
> --- a/hw/net/stellaris_enet.c
> +++ b/hw/net/stellaris_enet.c
> @@ -13,16 +13,17 @@
>  //#define DEBUG_STELLARIS_ENET 1
>  
>  #ifdef DEBUG_STELLARIS_ENET
> -#define DPRINTF(fmt, ...) \
> -do { printf("stellaris_enet: " fmt , ## __VA_ARGS__); } while (0)

In this case, the old code was also relying on the gcc extension.  But
pre-patch, the gcc extension was only encountered if
DEBUG_StELLARIS_ENET was set (probably only by a developer using gcc for
temporary debugging), while post-patch the gcc extension is ALWAYS
encountered, regardless of developer.

> -#define BADF(fmt, ...) \
> -do { fprintf(stderr, "stellaris_enet: error: " fmt , ## __VA_ARGS__); exit(1);} while (0)

In the old code, BADF() could be used in a single statement context,
such as:

if (foo)
    BADF("blah")
else
    something();

(of course, that violates our coding style, but hear me out).

> +#define DEBUG_STELLARIS_ENET_ENABLED 1
>  #else
> -#define DPRINTF(fmt, ...) do {} while(0)
> -#define BADF(fmt, ...) \
> -do { fprintf(stderr, "stellaris_enet: error: " fmt , ## __VA_ARGS__);} while (0)
> +#define DEBUG_STELLARIS_ENET_ENABLED 0
>  #endif
>  
> +#define DPRINTF(fmt, ...) QEMU_DPRINTF(DEBUG_STELLARIS_ENET_ENABLED, "stellaris_enet", fmt, ## __VA_ARGS__)
> +
> +#define BADF(fmt, ...) \
> +    QEMU_DPRINTF(1, "stellaris_enet error", fmt, ## __VA_ARGS__); \
> +    do { if (DEBUG_STELLARIS_ENET_ENABLED) { exit(1); } } while (0)

However, in the new code, BADF() is no longer a single statement.  You
either need to move the "do {" to appear before the QEMU_PRINTF
[preferred], or you can just declare that this is no longer a
single-statement macro at which point you could just drop the do/while
altogether [depends on our coding standard for safety].  The example
above, even though it violates coding standards, should demonstrate why
your change is wrong - the bare "else" is now a syntax error.

>  
> -    DPRINTF("Received packet len=%d\n", size);
> +    DPRINTF("Received packet len=%d\n", (int)size);

Ah, we FINALLY get to an added cast.  What you SHOULD be doing is using
len=%zu coupled with un-casted size, rather than papering over the type
mismatch.

>      n = s->next_packet + s->np;
>      if (n >= 31)
>          n -= 31;
> @@ -212,14 +213,14 @@ static void stellaris_enet_write(void *opaque, hwaddr offset,
>      switch (offset) {
>      case 0x00: /* IACK */
>          s->ris &= ~value;
> -        DPRINTF("IRQ ack %02x/%02x\n", value, s->ris);
> +        DPRINTF("IRQ ack %02x/%02x\n", (unsigned)value, s->ris);
>          stellaris_enet_update(s);
>          /* Clearing TXER also resets the TX fifo.  */
>          if (value & SE_INT_TXER)
>              s->tx_frame_len = -1;
>          break;
>      case 0x04: /* IM */
> -        DPRINTF("IRQ mask %02x/%02x\n", value, s->ris);
> +        DPRINTF("IRQ mask %02x/%02x\n", (unsigned)value, s->ris);

More cases where you should be fixing the % format to use the correct
type, rather than adding a cast.
diff mbox

Patch

diff --git a/hw/net/stellaris_enet.c b/hw/net/stellaris_enet.c
index d04e6a4..f6737a9 100644
--- a/hw/net/stellaris_enet.c
+++ b/hw/net/stellaris_enet.c
@@ -13,16 +13,17 @@ 
 //#define DEBUG_STELLARIS_ENET 1
 
 #ifdef DEBUG_STELLARIS_ENET
-#define DPRINTF(fmt, ...) \
-do { printf("stellaris_enet: " fmt , ## __VA_ARGS__); } while (0)
-#define BADF(fmt, ...) \
-do { fprintf(stderr, "stellaris_enet: error: " fmt , ## __VA_ARGS__); exit(1);} while (0)
+#define DEBUG_STELLARIS_ENET_ENABLED 1
 #else
-#define DPRINTF(fmt, ...) do {} while(0)
-#define BADF(fmt, ...) \
-do { fprintf(stderr, "stellaris_enet: error: " fmt , ## __VA_ARGS__);} while (0)
+#define DEBUG_STELLARIS_ENET_ENABLED 0
 #endif
 
+#define DPRINTF(fmt, ...) QEMU_DPRINTF(DEBUG_STELLARIS_ENET_ENABLED, "stellaris_enet", fmt, ## __VA_ARGS__)
+
+#define BADF(fmt, ...) \
+    QEMU_DPRINTF(1, "stellaris_enet error", fmt, ## __VA_ARGS__); \
+    do { if (DEBUG_STELLARIS_ENET_ENABLED) { exit(1); } } while (0)
+
 #define SE_INT_RX       0x01
 #define SE_INT_TXER     0x02
 #define SE_INT_TXEMP    0x04
@@ -97,7 +98,7 @@  static ssize_t stellaris_enet_receive(NetClientState *nc, const uint8_t *buf, si
         return -1;
     }
 
-    DPRINTF("Received packet len=%d\n", size);
+    DPRINTF("Received packet len=%d\n", (int)size);
     n = s->next_packet + s->np;
     if (n >= 31)
         n -= 31;
@@ -212,14 +213,14 @@  static void stellaris_enet_write(void *opaque, hwaddr offset,
     switch (offset) {
     case 0x00: /* IACK */
         s->ris &= ~value;
-        DPRINTF("IRQ ack %02x/%02x\n", value, s->ris);
+        DPRINTF("IRQ ack %02x/%02x\n", (unsigned)value, s->ris);
         stellaris_enet_update(s);
         /* Clearing TXER also resets the TX fifo.  */
         if (value & SE_INT_TXER)
             s->tx_frame_len = -1;
         break;
     case 0x04: /* IM */
-        DPRINTF("IRQ mask %02x/%02x\n", value, s->ris);
+        DPRINTF("IRQ mask %02x/%02x\n", (unsigned)value, s->ris);
         s->im = value;
         stellaris_enet_update(s);
         break;