avoid gcc warnings (and potential errors) when strict aliasing is on

This commit is contained in:
Markus Fröschle
2013-07-22 08:09:49 +00:00
parent 76634ec74c
commit 138b0ef794
2 changed files with 5 additions and 1 deletions

View File

@@ -23,6 +23,8 @@
* linker symbols must be defined in the linker command file. * linker symbols must be defined in the linker command file.
*/ */
typedef uint32_t __attribute__((__may_alias__)) uint32_t_a;
extern uint8_t _MBAR[]; extern uint8_t _MBAR[];
extern uint8_t _MMUBAR[]; extern uint8_t _MMUBAR[];
extern uint8_t _RAMBAR0[]; extern uint8_t _RAMBAR0[];

View File

@@ -24,7 +24,9 @@
*********************************************************************/ *********************************************************************/
/* Register read/write macros */ /* Register read/write macros */
#define MCF_MMU_MMUCR (*(volatile uint32_t*)(&_MMUBAR[0]))
/* note the uint32_t_a - this is to avoid gcc warnings about pointer aliasing */
#define MCF_MMU_MMUCR (*(volatile uint32_t_a*)(&_MMUBAR[0]))
#define MCF_MMU_MMUOR (*(volatile uint32_t*)(&_MMUBAR[0x4])) #define MCF_MMU_MMUOR (*(volatile uint32_t*)(&_MMUBAR[0x4]))
#define MCF_MMU_MMUSR (*(volatile uint32_t*)(&_MMUBAR[0x8])) #define MCF_MMU_MMUSR (*(volatile uint32_t*)(&_MMUBAR[0x8]))
#define MCF_MMU_MMUAR (*(volatile uint32_t*)(&_MMUBAR[0x10])) #define MCF_MMU_MMUAR (*(volatile uint32_t*)(&_MMUBAR[0x10]))