Subject: s390 defconfig fails to build after 4afeb670710efa5cd5ed8b1d9f2d22d6ce332bcc

From: Nathan Chancellor <[email-masked]>
Date: Mon, 28 Mar 2022 11:34:21 -0700

Hi all,

Apologies if this has been reported or fixed already, I did not see a
report when searching lore.kernel.org and it is reproducible as of
commit 7dcfe50f58d2 ("s390/pci: rename get_zdev_by_bus() to
zdev_from_bus()") in s390/linux.git.

Our continuous integration noticed a build failure on next-20220328 in
arch/s390/kernel/entry.S, which does not appear to be compiler specific,
as I can reproduce this with GCC easily:

https://builds.tuxbuild.com/2716QwFVG9408TJ43vkEc7trVCI/build.log

$ make -skj"$(nproc)" ARCH=s390 CROSS_COMPILE=s390x-linux-gnu- defconfig arch/s390/kernel/entry.o
arch/s390/kernel/entry.S: Assembler messages:
arch/s390/kernel/entry.S:335: Error: Unrecognized opcode: `jgnop'
arch/s390/kernel/entry.S:493: Error: Unrecognized opcode: `jgnop'
arch/s390/kernel/entry.S:494: Error: Unrecognized opcode: `jgnop'

Bisect converged on commit 4afeb670710e ("s390/alternatives: use
instructions instead of byte patterns"):

# bad: [7dcfe50f58d28e0e2ba79e9e4333888bcf9442a4] s390/pci: rename get_zdev_by_bus() to zdev_from_bus()
# good: [895ae58da4a2360d9c2d255cd9fc8de64e265022] s390/zcrypt: Add admask to zcdn
git bisect start '7dcfe50f58d2' '895ae58da4a2'
# bad: [09bc20c8fb35cf1afed1612b287e9ddbe6a7d73c] s390/kprobes: enable kretprobes framepointer verification
git bisect bad 09bc20c8fb35cf1afed1612b287e9ddbe6a7d73c
# good: [f09354ffd84eef3c88efa8ba6df05efe50cfd16a] s390/traps: improve panic message for translation-specification exception
git bisect good f09354ffd84eef3c88efa8ba6df05efe50cfd16a
# bad: [2d6c0008be64bd813008d2a796108e89edec1030] s390/ap: use insn format for new instructions
git bisect bad 2d6c0008be64bd813008d2a796108e89edec1030
# bad: [6982dba181deba54c5ccb301aaed6f6ec14c6310] s390/alternatives: use insn format for new instructions
git bisect bad 6982dba181deba54c5ccb301aaed6f6ec14c6310
# bad: [4afeb670710efa5cd5ed8b1d9f2d22d6ce332bcc] s390/alternatives: use instructions instead of byte patterns
git bisect bad 4afeb670710efa5cd5ed8b1d9f2d22d6ce332bcc
# first bad commit: [4afeb670710efa5cd5ed8b1d9f2d22d6ce332bcc] s390/alternatives: use instructions instead of byte patterns

I can reproduce with TuxMake's [1] gcc-8, gcc-9, and gcc-10 containers,
but not the gcc-11 one. The version information of GCC and binutils of
each container is provided below in case it helps with reproducing.
Given this is out of line assembly, I am sure the compiler has little to
do with it, but as the compiler is the driver for .S files, I included
it to be thorough.

s390x-linux-gnu-gcc (Debian 8.3.0-2) 8.3.0
GNU assembler (GNU Binutils for Debian) 2.31.1

s390x-linux-gnu-gcc (Debian 9.3.0-22) 9.3.0
GNU assembler (GNU Binutils for Debian) 2.35.2

s390x-linux-gnu-gcc (Debian 10.2.1-6) 10.2.1 20210110
GNU assembler (GNU Binutils for Debian) 2.35.2

s390x-linux-gnu-gcc (Debian 11.2.0-18) 11.2.0
GNU assembler (GNU Binutils for Debian) 2.38

[1]: https://tuxmake.org/

Cheers,
Nathan