strange printf(9) format specifier ("Z") in dev/drm code

Sergey Kandaurov pluknet at freebsd.org
Mon Dec 5 13:39:03 UTC 2011


On 5 December 2011 02:22, Alexander Best <arundel at freebsd.org> wrote:
> hi there,
>
> i was going through the clang warnings from a GENERIC buildkernel and noticed
> the following:
>
> ===> drm/mga (all)
> /usr/subversion-src/sys/modules/drm/mga/../../../dev/drm/mga_state.c:56:2: error: invalid conversion specifier 'Z' [-Werror,-Wformat-invalid-specifier]
>        BEGIN_DMA(2);
>        ^~~~~~~~~~~
> @/dev/drm/mga_drv.h:291:35: note: expanded from:
>                DRM_INFO( "   space=0x%x req=0x%Zx\n",                  \
>                                                ^
> @/dev/drm/drmP.h:317:60: note: expanded from:
> #define DRM_INFO(fmt, ...)  printf("info: [" DRM_NAME "] " fmt , ##__VA_ARGS__)
>                                                           ^
> these lines should cover all warnings:
>
> otaku% egrep -r "%[0-9]*Zx" /usr/src/sys/dev/drm
> dev/drm/mga_drv.h:              DRM_INFO( "   space=0x%x req=0x%Zx\n",                  \
> dev/drm/mga_drv.h:              DRM_INFO( "   DMA_WRITE( 0x%08x ) at 0x%04Zx\n",        \
>
> ... i couldn't find a reference to an upercase "Z" in the printf(9) man page.
> i talked to dinoex on #freebsd-clang (EFNet) and he said that the "Z" might
> come from linux'es libc5 and is the equaivalent to glibc's "z".
>
> can we adjust those lines, so the clang warnings disappear?

Hi, Alexander.

Can you build-test with this change?
Thanks in advance.

Index: sys/dev/drm/mga_drv.h
===================================================================
--- sys/dev/drm/mga_drv.h      (revision 228276)
+++ sys/dev/drm/mga_drv.h      (working copy)
@@ -288,7 +288,7 @@
 do {                                                                   \
        if ( MGA_VERBOSE ) {                                            \
                DRM_INFO( "BEGIN_DMA( %d )\n", (n) );           \
-               DRM_INFO( "   space=0x%x req=0x%Zx\n",                  \
+               DRM_INFO( "   space=0x%x req=0x%x\n",                   \
                          dev_priv->prim.space, (n) * DMA_BLOCK_SIZE ); \
        }                                                               \
        prim = dev_priv->prim.start;                                    \
@@ -338,7 +338,7 @@
 #define DMA_WRITE( offset, val )                                       \
 do {                                                                   \
        if ( MGA_VERBOSE ) {                                            \
-               DRM_INFO( "   DMA_WRITE( 0x%08x ) at 0x%04Zx\n",        \
+               DRM_INFO( "   DMA_WRITE( 0x%08x ) at 0x%04x\n", \
                          (u32)(val), write + (offset) * sizeof(u32) ); \
        }                                                               \
        *(volatile u32 *)(prim + write + (offset) * sizeof(u32)) = val; \

-- 
wbr,
pluknet


More information about the freebsd-hackers mailing list