]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
s390: Do not replace brcth referencing undefined weak symbol
authorJens Remus <jremus@linux.ibm.com>
Fri, 12 Jul 2024 14:53:47 +0000 (16:53 +0200)
committerJens Remus <jremus@linux.ibm.com>
Fri, 12 Jul 2024 14:53:47 +0000 (16:53 +0200)
Branch Relative on Count High (brcth) is a conditional branch relative
instruction. It is not guaranteed that it only appears within loops
that sooner or later will take the branch. It may very well be used to
check a condition that will prevent the branch from ever being taken.

bfd/
* elf64-s390.c (elf_s390_relocate_section): Do not replace brcth
referencing undefined weak symbol with a trap.

ld/
* testsuite/ld-s390/weakundef-1.s: Update test case accordingly.
* testsuite/ld-s390/weakundef-1.dd: Likewise.

Fixes: 896a639babe2 ("s390: Avoid reloc overflows on undefined weak symbols")
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
bfd/elf64-s390.c
ld/testsuite/ld-s390/weakundef-1.dd
ld/testsuite/ld-s390/weakundef-1.s

index 05dd4e80c6b392bc0d23981a4ea1941518c1ec28..2f35da4a6275128008c183ca5401060f54e7c5cb 100644 (file)
@@ -2517,10 +2517,9 @@ elf_s390_relocate_section (bfd *output_bfd,
                 - store halfword relative long (sthrl)
                 - execute relative long (exrl)
                 - compare (logical) relative long (crl, clrl, cgrl, clgrl, cgfrl, clgfrl)
-                - compare (logical) halfword relative long (chrl, cghrl, clhrl, clghrl)
-                - branch relative on count high (brcth)  */
+                - compare (logical) halfword relative long (chrl, cghrl, clhrl, clghrl)  */
              else if (op == 0xc005 || (op & 0xff00) == 0xc400
-                      || (op & 0xff00) == 0xc600 || op == 0xcc06)
+                      || (op & 0xff00) == 0xc600)
                {
                  /* Emit a 6-byte trap: jg .+2  */
                  bfd_put_16 (output_bfd, 0xc0f4, insn_start);
index e5145245602ecb7168baa3e204d0ec2532fe0ce2..04d53c91d58e8866d257d70459beba4537745672 100644 (file)
@@ -3,13 +3,13 @@ tmpdir/weakundef-1:     file format elf64-s390
 Disassembly of section .text:
 
 .* <foo>:
-.*:    c0 10 00 00 00 1e [      ]*larl %r1,20000003c <d>
-.*:    c0 10 00 00 00 1f [      ]*larl %r1,200000044 <wd>
+.*:    c0 10 00 00 00 1c [      ]*larl %r1,200000038 <d>
+.*:    c0 10 00 00 00 1d [      ]*larl %r1,200000040 <wd>
 .*:    e3 10 00 00 00 71 [      ]*lay  %r1,0
 .*:    c0 f4 00 00 00 01 [      ]*jg   .*
 .*:    c0 f4 00 00 00 01 [      ]*jg   .*
 .*:    c0 f4 00 00 00 01 [      ]*jg   .*
 .*:    c0 f4 00 00 00 01 [      ]*jg   .*
 .*:    c0 f4 00 00 00 01 [      ]*jg   .*
-.*:    c0 f4 00 00 00 01 [      ]*jg   .*
 .*:    c0 04 00 00 00 00 [      ]*jgnop        .*
+.*:    07 07 [  ]*nopr %r7
index aeaef8d2456fc04e9af83fd3a989e1f9b41a42a6..db909329cda6b3248219e36709cb4dc0cb09dcc4 100644 (file)
@@ -9,7 +9,6 @@ foo:
        lrl     %r1,wu
        strl    %r1,wu
        exrl    %r1,wu
-       brcth   %r1,wu
        pfdrl   %r1,wu
        .weak   wd
        .weak   wu