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

Alexander Best arundel at freebsd.org
Mon Dec 5 14:38:15 UTC 2011


On Mon Dec  5 11, Sergey Kandaurov wrote:
> 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.

no that didn't work, but the following patch fixed it for me.

cheers.
alex

> 
> 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
-------------- next part --------------
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%lx\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%04lx\n",	\
 			  (u32)(val), write + (offset) * sizeof(u32) );	\
 	}								\
 	*(volatile u32 *)(prim + write + (offset) * sizeof(u32)) = val;	\


More information about the freebsd-hackers mailing list