Fix SPARC64 handling of R_SPARC_H34 (bug 24231).
authorJoseph Myers <joseph@codesourcery.com>
Mon, 18 Feb 2019 22:33:29 +0000 (22:33 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Mon, 18 Feb 2019 22:33:29 +0000 (22:33 +0000)
Building glibc with -Wextra shows a -Wimplicit-fallthrough warning for
SPARC64 that appears to be a real bug in glibc.  The dynamic linker
handling of R_SPARC_H34 falls through to that of R_SPARC_H44, which in
the case of this code is nonsensical (it means the value computed for
R_SPARC_H34 gets overwritten by one computed with the different logic
for R_SPARC_H44).  Thus, this patch adds the missing break there.
Note: I do not have a testcase to demonstrate this bug.

Tested with build-many-glibcs.py.

[BZ #24231]
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Add break
after R_SPARC_H34 case.

ChangeLog
sysdeps/sparc/sparc64/dl-machine.h

index 312ef3b..de10cb5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-02-18  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #24231]
+       * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Add break
+       after R_SPARC_H34 case.
+
 2019-02-18  Florian Weimer  <fweimer@redhat.com>
 
        * resolv/compat-gethnamaddr.c (Dprintf): Remove definition.
index 2fb207d..1493089 100644 (file)
@@ -573,6 +573,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
       *(unsigned int *) reloc_addr =
        ((*(unsigned int *)reloc_addr & 0xffc00000) |
         ((value >> 12) & 0x3fffff));
+      break;
 
       /* MEDMID code model relocs */
     case R_SPARC_H44: