[PATCH 2/4] secmem: fix compiler warnings on ARM

Jussi Kivilinna jussi.kivilinna at iki.fi
Tue Dec 23 16:36:26 CET 2014


* src/secmem.c (ADDR_TO_BLOCK, mb_get_next, mb_get_new): Cast pointer
from 'char *' to 'memblock_t *' through 'void *'.
(MB_WIPE_OUT): Remove unneeded cast to 'memblock_t *'.
--

Patch fixes 'cast increases required alignment' warnings seen on GCC:

secmem.c: In function 'mb_get_next':
secmem.c:140:13: warning: cast increases required alignment of target type [-Wcast-align]
   mb_next = (memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE + mb->size);
             ^
secmem.c: In function 'mb_get_new':
secmem.c:208:17: warning: cast increases required alignment of target type [-Wcast-align]
      mb_split = (memblock_t *) (((char *) mb) + BLOCK_HEAD_SIZE + size);
                 ^
secmem.c: In function '_gcry_secmem_free_internal':
secmem.c:101:3: warning: cast increases required alignment of target type [-Wcast-align]
   (memblock_t *) ((char *) addr - BLOCK_HEAD_SIZE)
   ^
secmem.c:603:8: note: in expansion of macro 'ADDR_TO_BLOCK'
   mb = ADDR_TO_BLOCK (a);
        ^
In file included from secmem.c:40:0:
secmem.c:609:16: warning: cast increases required alignment of target type [-Wcast-align]
   wipememory2 ((memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE), (byte), size);
                ^
g10lib.h:309:54: note: in definition of macro 'wipememory2'
               volatile char *_vptr=(volatile char *)(_ptr); \
                                                      ^
secmem.c:611:3: note: in expansion of macro 'MB_WIPE_OUT'
   MB_WIPE_OUT (0xff);
   ^
secmem.c:609:16: warning: cast increases required alignment of target type [-Wcast-align]
   wipememory2 ((memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE), (byte), size);
                ^
g10lib.h:309:54: note: in definition of macro 'wipememory2'
               volatile char *_vptr=(volatile char *)(_ptr); \
                                                      ^
secmem.c:612:3: note: in expansion of macro 'MB_WIPE_OUT'
   MB_WIPE_OUT (0xaa);
   ^
secmem.c:609:16: warning: cast increases required alignment of target type [-Wcast-align]
   wipememory2 ((memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE), (byte), size);
                ^
g10lib.h:309:54: note: in definition of macro 'wipememory2'
               volatile char *_vptr=(volatile char *)(_ptr); \
                                                      ^
secmem.c:613:3: note: in expansion of macro 'MB_WIPE_OUT'
   MB_WIPE_OUT (0x55);
   ^
secmem.c:609:16: warning: cast increases required alignment of target type [-Wcast-align]
   wipememory2 ((memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE), (byte), size);
                ^
g10lib.h:309:54: note: in definition of macro 'wipememory2'
               volatile char *_vptr=(volatile char *)(_ptr); \
                                                      ^
secmem.c:614:3: note: in expansion of macro 'MB_WIPE_OUT'
   MB_WIPE_OUT (0x00);
   ^
secmem.c: In function '_gcry_secmem_realloc':
secmem.c:644:8: warning: cast increases required alignment of target type [-Wcast-align]
   mb = (memblock_t *) ((char *) p - ((size_t) &((memblock_t *) 0)->aligned.c));
        ^

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 src/secmem.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/secmem.c b/src/secmem.c
index cfea921..df15df0 100644
--- a/src/secmem.c
+++ b/src/secmem.c
@@ -98,7 +98,7 @@ GPGRT_LOCK_DEFINE (secmem_lock);
 
 /* Convert an address into the according memory block structure.  */
 #define ADDR_TO_BLOCK(addr) \
-  (memblock_t *) ((char *) addr - BLOCK_HEAD_SIZE)
+  (memblock_t *) (void *) ((char *) addr - BLOCK_HEAD_SIZE)
 
 /* Check whether P points into the pool.  */
 static int
@@ -137,7 +137,7 @@ mb_get_next (memblock_t *mb)
 {
   memblock_t *mb_next;
 
-  mb_next = (memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE + mb->size);
+  mb_next = (memblock_t *) (void *) ((char *) mb + BLOCK_HEAD_SIZE + mb->size);
 
   if (! ptr_into_pool_p (mb_next))
     mb_next = NULL;
@@ -205,7 +205,8 @@ mb_get_new (memblock_t *block, size_t size)
 	  {
 	    /* Split block.  */
 
-	    mb_split = (memblock_t *) (((char *) mb) + BLOCK_HEAD_SIZE + size);
+	    mb_split = (memblock_t *) (void *) (((char *) mb) + BLOCK_HEAD_SIZE
+						+ size);
 	    mb_split->size = mb->size - size - BLOCK_HEAD_SIZE;
 	    mb_split->flags = 0;
 
@@ -606,7 +607,7 @@ _gcry_secmem_free_internal (void *a)
   /* This does not make much sense: probably this memory is held in the
    * cache. We do it anyway: */
 #define MB_WIPE_OUT(byte) \
-  wipememory2 ((memblock_t *) ((char *) mb + BLOCK_HEAD_SIZE), (byte), size);
+  wipememory2 (((char *) mb + BLOCK_HEAD_SIZE), (byte), size);
 
   MB_WIPE_OUT (0xff);
   MB_WIPE_OUT (0xaa);
@@ -641,7 +642,8 @@ _gcry_secmem_realloc (void *p, size_t newsize)
 
   SECMEM_LOCK;
 
-  mb = (memblock_t *) ((char *) p - ((size_t) &((memblock_t *) 0)->aligned.c));
+  mb = (memblock_t *) (void *) ((char *) p
+				- ((size_t) &((memblock_t *) 0)->aligned.c));
   size = mb->size;
   if (newsize < size)
     {




More information about the Gcrypt-devel mailing list