NDS32/BFD: Correct an aliasing error in `nds32_elf_check_relocs'
authorMaciej W. Rozycki <macro@imgtec.com>
Tue, 18 Oct 2016 03:34:36 +0000 (04:34 +0100)
committerMaciej W. Rozycki <macro@imgtec.com>
Tue, 18 Oct 2016 03:36:55 +0000 (04:36 +0100)
Fix an aliasing build error:

cc1: warnings being treated as errors
.../bfd/elf32-nds32.c: In function 'nds32_elf_check_relocs':
.../bfd/elf32-nds32.c:6644: warning: dereferencing type-punned pointer will break strict-aliasing rules
make[3]: *** [elf32-nds32.lo] Error 1

in a way following commit 6edfbbad0864 ("Fix up gcc4.1 aliasing
warnings"), <https://sourceware.org/ml/binutils/2005-10/msg00071.html>.

bfd/
* elf32-nds32.c (nds32_elf_check_relocs): Avoid aliasing warning
from GCC.

bfd/ChangeLog
bfd/elf32-nds32.c

index 4dc5256..1e34b19 100644 (file)
@@ -1,5 +1,10 @@
 2016-10-18  Maciej W. Rozycki  <macro@imgtec.com>
 
 2016-10-18  Maciej W. Rozycki  <macro@imgtec.com>
 
+       * elf32-nds32.c (nds32_elf_check_relocs): Avoid aliasing warning
+       from GCC.
+
+2016-10-18  Maciej W. Rozycki  <macro@imgtec.com>
+
        * elf32-arm.c (elf32_arm_update_relocs): Rename `index' local
        variable to `reloc_index'.
 
        * elf32-arm.c (elf32_arm_update_relocs): Rename `index' local
        variable to `reloc_index'.
 
index 81195a4..fdeada7 100644 (file)
@@ -6629,6 +6629,7 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
              else
                {
                  asection *s;
              else
                {
                  asection *s;
+                 void *vpp;
 
                  Elf_Internal_Sym *isym;
                  isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
 
                  Elf_Internal_Sym *isym;
                  isym = bfd_sym_from_r_symndx (&htab->sym_cache, abfd, r_symndx);
@@ -6640,8 +6641,8 @@ nds32_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
                  if (s == NULL)
                    return FALSE;
 
                  if (s == NULL)
                    return FALSE;
 
-                 head = ((struct elf_nds32_dyn_relocs **)
-                       &elf_section_data (s)->local_dynrel);
+                 vpp = &elf_section_data (s)->local_dynrel;
+                 head = (struct elf_nds32_dyn_relocs **) vpp;
                }
 
              p = *head;
                }
 
              p = *head;