arm_jtag.h: In function `arm7flip32':
arm_jtag.h:64: warning: cast increases required alignment of target type
arm_jtag.h: In function `arm_le_to_h_u32':
arm_jtag.h:70: warning: cast increases required alignment of target type
...

I made 3 patch files, all warnings are same, but way of fixing are different.
patch1: Cast from "uint32_t *" to "uint8_t *".
patch2: use union
patch3: "uint8_t *" => "ulong" => "uint32_t *"

tested with gcc 3.4.5 and 4.4.0.
--------
Hiroshi Ito
Media Lab. Inc.,
URL http://www.mlb.co.jp ( Sorry, Japanese only. )
TEL +81-3-5294-7255  FAX +81-3-5294-7256


Index: src/pld/virtex2.c
===================================================================
--- src/pld/virtex2.c   (revision 2589)
+++ src/pld/virtex2.c   (working copy)
@@ -90,8 +90,8 @@
 
 static __inline__ void virtexflip32(jtag_callback_data_t arg)
 {
-  uint8_t *in = (uint8_t *)arg;
-       *((uint32_t *)in) = flip_u32(le_to_h_u32(in), 32);
+       uint32_t *in = (uint32_t *)arg;
+       *in = flip_u32(le_to_h_u32((uint8_t *)in), 32);
 }
 
 static int virtex2_receive_32(struct pld_device_s *pld_device,
Index: src/target/etb.c
===================================================================
--- src/target/etb.c    (revision 2589)
+++ src/target/etb.c    (working copy)
@@ -160,8 +160,8 @@
 
 static void etb_getbuf(jtag_callback_data_t arg)
 {
-  uint8_t *in = (uint8_t *)arg;
-       *((uint32_t *)in) = buf_get_u32(in, 0, 32);
+       uint32_t *in = (uint32_t *)arg;
+       *in = buf_get_u32((uint8_t *)in, 0, 32);
 }
 
 
Index: src/target/xscale.c
===================================================================
--- src/target/xscale.c (revision 2589)
+++ src/target/xscale.c (working copy)
@@ -295,8 +295,8 @@
 
 static void xscale_getbuf(jtag_callback_data_t arg)
 {
-  uint8_t *in = (uint8_t *)arg;
-       *((uint32_t *)in) = buf_get_u32(in, 0, 32);
+       uint32_t *in = (uint32_t *)arg;
+       *in = buf_get_u32((uint8_t *)in, 0, 32);
 }
 
 int xscale_receive(target_t *target, uint32_t *buffer, int num_words)
Index: src/target/arm_jtag.h
===================================================================
--- src/target/arm_jtag.h       (revision 2589)
+++ src/target/arm_jtag.h       (working copy)
@@ -60,14 +60,14 @@
 /* use this as a static so we can inline it in -O3 and refer to it via a 
pointer  */
 static __inline__ void arm7flip32(jtag_callback_data_t arg)
 {
-  uint8_t *in = (uint8_t *)arg;
-  *((uint32_t *)in) = flip_u32(le_to_h_u32(in), 32);
+  uint32_t *in = (uint32_t *)arg;
+  *in = flip_u32(le_to_h_u32((uint8_t *)in), 32);
 }
 
 static __inline__ void arm_le_to_h_u32(jtag_callback_data_t arg)
 {
-  uint8_t *in = (uint8_t *)arg;
-  *((uint32_t *)in) = le_to_h_u32(in);
+  uint32_t *in = (uint32_t *)arg;
+  *in = le_to_h_u32((uint8_t *)in);
 }
 
 
Index: src/target/arm11.c
===================================================================
--- src/target/arm11.c  (revision 2589)
+++ src/target/arm11.c  (working copy)
@@ -1092,7 +1092,14 @@
  */
 int arm11_read_memory(struct target_s *target, uint32_t address, uint32_t 
size, uint32_t count, uint8_t *buffer)
 {
-       /** \todo TODO: check if buffer cast to uint32_t* and uint16_t* might 
cause alignment problems */
+       
+       /* gcc says, warning: cast increases required alignment of target type 
*/
+       /* just make gcc happy */
+       union {
+               uint8_t  *bytes;
+               uint32_t *words;
+       } buf;
+       buf.bytes = buffer;
 
        FNC_INFO;
 
@@ -1128,7 +1135,7 @@
                        /* MCR p14,0,R1,c0,c5,0 */
                        arm11_run_instr_data_from_core(arm11, 0xEE001E15, &res, 
1);
 
-                       *buffer++ = res;
+                       *buf.bytes++ = res;
                }
 
                break;
@@ -1149,7 +1156,7 @@
                                arm11_run_instr_data_from_core(arm11, 
0xEE001E15, &res, 1);
 
                                uint16_t svalue = res;
-                               memcpy(buffer + i * sizeof(uint16_t), &svalue, 
sizeof(uint16_t));
+                               memcpy(buf.bytes + i * sizeof(uint16_t), 
&svalue, sizeof(uint16_t));
                        }
 
                        break;
@@ -1158,12 +1165,10 @@
        case 4:
                {
                uint32_t instr = !arm11_config_memrw_no_increment ? 0xecb05e01 
: 0xed905e00;
-               /** \todo TODO: buffer cast to uint32_t* causes alignment 
warnings */
-               uint32_t *words = (uint32_t *)buffer;
 
                /* LDC p14,c5,[R0],#4 */
                /* LDC p14,c5,[R0] */
-               arm11_run_instr_data_from_core(arm11, instr, words, count);
+               arm11_run_instr_data_from_core(arm11, instr, buf.words, count);
                break;
                }
        }
@@ -1176,6 +1181,13 @@
 int arm11_write_memory(struct target_s *target, uint32_t address, uint32_t 
size, uint32_t count, uint8_t *buffer)
 {
        FNC_INFO;
+       /* gcc says, warning: cast increases required alignment of target type 
*/
+       /* just make gcc happy */
+       union {
+               uint8_t  *bytes;
+               uint32_t *words;
+       } buf;
+       buf.bytes = buffer;
 
        if (target->state != TARGET_HALTED)
        {
@@ -1201,7 +1213,7 @@
                        for (size_t i = 0; i < count; i++)
                        {
                                /* MRC p14,0,r1,c0,c5,0 */
-                               arm11_run_instr_data_to_core1(arm11, 
0xee101e15, *buffer++);
+                               arm11_run_instr_data_to_core1(arm11, 
0xee101e15, *buf.bytes++);
 
                                /* strb    r1, [r0], #1 */
                                /* strb    r1, [r0] */
@@ -1219,7 +1231,7 @@
                        for (size_t i = 0; i < count; i++)
                        {
                                uint16_t value;
-                               memcpy(&value, buffer + i * sizeof(uint16_t), 
sizeof(uint16_t));
+                               memcpy(&value, buf.bytes + i * 
sizeof(uint16_t), sizeof(uint16_t));
 
                                /* MRC p14,0,r1,c0,c5,0 */
                                arm11_run_instr_data_to_core1(arm11, 
0xee101e15, value);
@@ -1236,20 +1248,17 @@
        case 4: {
                uint32_t instr = !arm11_config_memrw_no_increment ? 0xeca05e01 
: 0xed805e00;
 
-               /** \todo TODO: buffer cast to uint32_t* causes alignment 
warnings */
-               uint32_t *words = (uint32_t*)buffer;
-
                if (!arm11_config_memwrite_burst)
                {
                        /* STC p14,c5,[R0],#4 */
                        /* STC p14,c5,[R0]*/
-                       arm11_run_instr_data_to_core(arm11, instr, words, 
count);
+                       arm11_run_instr_data_to_core(arm11, instr, buf.words, 
count);
                }
                else
                {
                        /* STC p14,c5,[R0],#4 */
                        /* STC p14,c5,[R0]*/
-                       arm11_run_instr_data_to_core_noack(arm11, instr, words, 
count);
+                       arm11_run_instr_data_to_core_noack(arm11, instr, 
buf.words, count);
                }
 
                break;
Index: src/flash/at91sam3.c
===================================================================
--- src/flash/at91sam3.c        (revision 2589)
+++ src/flash/at91sam3.c        (working copy)
@@ -1423,7 +1423,7 @@
        // By using prototypes - we can detect what would
        // be casting errors.
 
-       return ((uint32_t *)(((char *)(pCfg)) + pList->struct_offset));
+       return ((uint32_t *)(((ulong)(pCfg)) + pList->struct_offset));
 }
 
 
@@ -1477,7 +1477,7 @@
                // calculate where this one go..
                // it is "possibly" this register.
 
-               pPossible = ((uint32_t *)(((char *)(&(pChip->cfg))) + 
pReg->struct_offset));
+               pPossible = ((uint32_t *)(((ulong)(&(pChip->cfg))) + 
pReg->struct_offset));
 
                // well? Is it this register
                if (pPossible == goes_here) {
Index: src/flash/mflash.c
===================================================================
--- src/flash/mflash.c  (revision 2589)
+++ src/flash/mflash.c  (working copy)
@@ -1124,7 +1124,7 @@
                        != ERROR_OK)
                return ret;
 
-       mg_gen_ataid((mg_io_type_drv_info *)buff);
+       mg_gen_ataid((mg_io_type_drv_info *)(ulong)buff);
 
        if ((ret = mg_mflash_do_write_sects(buff, 0, 1, 
mg_vcmd_update_stgdrvinfo))
                        != ERROR_OK)
@@ -1152,7 +1152,7 @@
        buff[0] = mg_op_mode_snd;               /* operation mode */
        buff[1] = MG_UNLOCK_OTP_AREA;
        buff[2] = 4;                            /* boot size */
-       *((uint32_t *)(buff + 4)) = 0;          /* XIP size */
+       *((uint32_t *)(ulong)(buff + 4)) = 0;           /* XIP size */
 
        if ((ret = mg_mflash_do_write_sects(buff, 0, 1, mg_vcmd_update_xipinfo))
                        != ERROR_OK)
_______________________________________________
Openocd-development mailing list
Openocd-development@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to