Bug 6068 - Enhancement: Add warning -Wcast-align for GCC
Summary: Enhancement: Add warning -Wcast-align for GCC
Status: NEW
Alias: None
Product: uClibc
Classification: Unclassified
Component: Other (show other bugs)
Version: unspecified
Hardware: All Linux
: P5 enhancement
Target Milestone: ---
Assignee: unassigned
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-03-05 21:26 UTC by Jeffrey Walton
Modified: 2015-10-19 12:57 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jeffrey Walton 2013-03-05 21:26:22 UTC
Mis-aligned data on ARM and other embedded devices is toxic - it causes a bus error.
Comment 1 Jeffrey Walton 2013-03-05 21:42:03 UTC
clang -c ldso/ldso/ldso.c -o ldso/ldso/ldso.oS -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC -DSHARED -DNOT_IN_libc -DIS_IN_rtld -fno-stack-protector -fno-omit-frame-pointer -I./ldso/ldso/x86_64 -I./ldso/include -I./ldso/ldso -DUCLIBC_RUNTIME_PREFIX=\"/usr/x86_64-linux-uclibc/\" -DUCLIBC_LDSO=\"ld64-uClibc.so.0\"  -DLDSO_ELFINTERP=\"x86_64/elfinterp.c\" -DNOT_IN_libc -DIS_IN_rtld -fno-stack-protector -fno-omit-frame-pointer -I./ldso/ldso/x86_64 -I./ldso/include -I./ldso/ldso -DUCLIBC_RUNTIME_PREFIX=\"/usr/x86_64-linux-uclibc/\" -DUCLIBC_LDSO=\"ld64-uClibc.so.0\"  -MT ldso/ldso/ldso.oS -MD -MP -MF ldso/ldso/.ldso.oS.dep



./ldso/ldso/x86_64/elfinterp.c:61:15: warning: cast from 'char *' to
      'Elf64_Rela *' increases required alignment from 1 to 8 [-Wcast-align]
        this_reloc = (ELF_RELOC *)(rel_addr + reloc_entry);
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ldso/ldso/ldso.c:93:
./ldso/ldso/dl-startup.c:200:15: warning: cast from 'unsigned char (*)[16]' to
      'uint32_t *' (aka 'unsigned int *') increases required alignment from 1 to
      4 [-Wcast-align]
                        || *(p32 = (uint32_t*)&header->e_ident) != ELFMAG_U32
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from ldso/ldso/ldso.c:1432:
./ldso/ldso/dl-elf.c:68:11: warning: cast from 'caddr_t' (aka 'char *') to
      'header_t *' increases required alignment from 1 to 4 [-Wcast-align]
        header = (header_t *) _dl_cache_addr;
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~
./ldso/ldso/dl-elf.c:270:22: warning: cast from 'caddr_t' (aka 'char *') to
      'header_t *' increases required alignment from 1 to 4 [-Wcast-align]
                header_t *header = (header_t *) _dl_cache_addr;
                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
./ldso/ldso/dl-elf.c:513:8: warning: cast from 'unsigned char (*)[16]' to
      'uint32_t *' (aka 'unsigned int *') increases required alignment from 1 to
      4 [-Wcast-align]
        p32 = (uint32_t*)&epnt->e_ident;
              ^~~~~~~~~~~~~~~~~~~~~~~~~
5 warnings generated.
Comment 2 Jeffrey Walton 2013-03-05 21:43:26 UTC
clang -c libc/sysdeps/linux/common/cmsg_nxthdr.c -o libc/sysdeps/linux/common/cmsg_nxthdr.os -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC     -MT libc/sysdeps/linux/common/cmsg_nxthdr.os -MD -MP -MF libc/sysdeps/linux/common/.cmsg_nxthdr.os.dep



libc/sysdeps/linux/common/cmsg_nxthdr.c:34:10: warning: cast from
      'unsigned char *' to 'struct cmsghdr *' increases required alignment from
      1 to 8 [-Wcast-align]
  cmsg = (struct cmsghdr *) ((unsigned char *) cmsg
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Comment 3 Jeffrey Walton 2013-03-05 21:44:18 UTC
clang -c libc/sysdeps/linux/common/getdents64.c -o libc/sysdeps/linux/common/getdents64.os -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC     -MT libc/sysdeps/linux/common/getdents64.os -MD -MP -MF libc/sysdeps/linux/common/.getdents64.os.dep



libc/sysdeps/linux/common/getdents64.c:54:10: warning: cast from 'char *' to
      'struct dirent64 *' increases required alignment from 1 to 8
      [-Wcast-align]
    dp = (struct dirent64 *) buf;
         ^~~~~~~~~~~~~~~~~~~~~~~
libc/sysdeps/linux/common/getdents64.c:92:7: warning: cast from 'char *' to
      'struct dirent64 *' increases required alignment from 1 to 8
      [-Wcast-align]
        dp = (struct dirent64 *) ((char *) dp + new_reclen);
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
libc/sysdeps/linux/common/getdents64.c:93:8: warning: cast from 'char *' to
      'struct kernel_dirent64 *' increases required alignment from 1 to 8
      [-Wcast-align]
        kdp = (struct kernel_dirent64 *) (((char *) kdp) + kdp->d_reclen);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 warnings generated.
Comment 4 Jeffrey Walton 2013-03-05 21:45:07 UTC
clang -c libc/misc/dirent/readdir.c -o libc/misc/dirent/readdir.os -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC     -MT libc/misc/dirent/readdir.os -MD -MP -MF libc/misc/dirent/.readdir.os.dep



libc/misc/dirent/readdir.c:41:11: warning: cast from 'char *' to
      'struct dirent *' increases required alignment from 1 to 8 [-Wcast-align]
            de = (struct dirent *) (((char *) dir->dd_buf) + dir->dd_nextloc);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
Comment 5 Jeffrey Walton 2013-03-05 21:45:36 UTC
clang -c libc/misc/dirent/readdir64.c -o libc/misc/dirent/readdir64.os -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC     -MT libc/misc/dirent/readdir64.os -MD -MP -MF libc/misc/dirent/.readdir64.os.dep



libc/misc/dirent/readdir64.c:40:11: warning: cast from 'char *' to
      'struct dirent64 *' increases required alignment from 1 to 8
      [-Wcast-align]
            de = (struct dirent64 *) (((char *) dir->dd_buf) + dir->dd_nextloc);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.
Comment 6 Jeffrey Walton 2013-03-05 21:46:40 UTC
clang -c libc/misc/gnu/obstack.c -o libc/misc/gnu/obstack.os -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC     -MT libc/misc/gnu/obstack.os -MD -MP -MF libc/misc/gnu/.obstack.os.dep



libc/misc/gnu/obstack.c:301:3: warning: cast from 'char *' to 'int *' increases
      required alignment from 1 to 4 [-Wcast-align]
        ((COPYING_UNIT *)object_base)[i]
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
libc/misc/gnu/obstack.c:302:7: warning: cast from 'char *' to 'int *' increases
      required alignment from 1 to 4 [-Wcast-align]
          = ((COPYING_UNIT *)h->object_base)[i];
             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.
Comment 7 Jeffrey Walton 2013-03-05 21:47:02 UTC
clang -c libc/misc/locale/localeconv.c -o libc/misc/locale/localeconv.os -include ./include/libc-symbols.h -Wall -Wstrict-prototypes -Wstrict-aliasing -Wformat=2 -Wmissing-noreturn -Wmissing-format-attribute -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -Wnonnull -Wold-style-definition -Wshadow -Wundef -Wdeclaration-after-statement -funsigned-char -fno-builtin -fno-asm -std=gnu99 -fno-stack-protector -nostdinc -I./include -I./include -I. -I./libc/sysdeps/linux -I./libc/sysdeps/linux/x86_64  -Os -funit-at-a-time -fmerge-all-constants -fstrict-aliasing -Wcast-align -fno-common -I./libc/sysdeps/linux/common -I/usr/src/linux-headers-3.2.0-38/include/ -isystem /usr/local/bin/../lib/clang/3.1/include-fixed -isystem /usr/local/bin/../lib/clang/3.1/include -DNDEBUG -fPIC     -MT libc/misc/locale/localeconv.os -MD -MP -MF libc/misc/locale/.localeconv.os.dep



In file included from libc/misc/locale/localeconv.c:8:
libc/misc/locale/locale.c:304:4: warning: cast from 'char *' to 'char **'
      increases required alignment from 1 to 8 [-Wcast-align]
        *((char **)p) = (char *) decpt;
          ^~~~~~~~~~
libc/misc/locale/locale.c:307:5: warning: cast from 'char *' to 'char **'
      increases required alignment from 1 to 8 [-Wcast-align]
                *((char **)p) = (char *) (decpt+1);
                  ^~~~~~~~~~
2 warnings generated.