Blame SOURCES/kvm-tests-boot-sector-Fix-the-bad-s390x-assembler-code.patch

902636
From f73b18e03c6758500bf367b1575205772d1f878f Mon Sep 17 00:00:00 2001
902636
From: Thomas Huth <thuth@redhat.com>
902636
Date: Fri, 29 May 2020 05:53:52 -0400
902636
Subject: [PATCH 10/42] tests/boot-sector: Fix the bad s390x assembler code
902636
902636
RH-Author: Thomas Huth <thuth@redhat.com>
902636
Message-id: <20200529055420.16855-11-thuth@redhat.com>
902636
Patchwork-id: 97031
902636
O-Subject: [RHEL-8.3.0 qemu-kvm PATCH v2 10/38] tests/boot-sector: Fix the bad s390x assembler code
902636
Bugzilla: 1828317
902636
RH-Acked-by: Claudio Imbrenda <cimbrend@redhat.com>
902636
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
902636
RH-Acked-by: David Hildenbrand <david@redhat.com>
902636
902636
There are currently two bugs in s390x_code[]: First, the initial jump
902636
uses the wrong offset, so it was jumping to 0x10014 instead of 0x10010.
902636
Second, LHI only loads the lower 32-bit of the register.
902636
902636
Everything worked fine as long as the s390-ccw bios code was jumping
902636
here with r3 containing zeroes in the uppermost 48 bit - which just
902636
happened to be the case so far by accident. But we can not rely on this
902636
fact, and indeed one of the recent suggested patches to jump2ipl.c cause
902636
the newer GCCs to put different values into r3. In that case the code
902636
from s390x_code[] crashes very ungracefully.
902636
902636
Thus let's make sure to jump to the right instruction, and use LGHI
902636
instead of LHI to make sure that we always zero out the upper bits
902636
of the register.
902636
902636
Signed-off-by: Thomas Huth <thuth@redhat.com>
902636
Message-Id: <20191217150642.27946-1-thuth@redhat.com>
902636
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
902636
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
902636
(cherry picked from commit 5afec76fbe2c07d03fd8c9ac525140059499637a)
902636
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
902636
---
902636
 tests/boot-sector.c | 4 ++--
902636
 1 file changed, 2 insertions(+), 2 deletions(-)
902636
902636
diff --git a/tests/boot-sector.c b/tests/boot-sector.c
902636
index 7824286b9a..9e66c6d013 100644
902636
--- a/tests/boot-sector.c
902636
+++ b/tests/boot-sector.c
902636
@@ -75,11 +75,11 @@ static const uint8_t s390x_psw_and_magic[] = {
902636
     0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40   /* in the s390-ccw bios */
902636
 };
902636
 static const uint8_t s390x_code[] = {
902636
-    0xa7, 0xf4, 0x00, 0x0a,                                /* j 0x10010 */
902636
+    0xa7, 0xf4, 0x00, 0x08,                                /* j 0x10010 */
902636
     0x00, 0x00, 0x00, 0x00,
902636
     'S', '3', '9', '0',
902636
     'E', 'P', 0x00, 0x01,
902636
-    0xa7, 0x38, HIGH(SIGNATURE_ADDR), LOW(SIGNATURE_ADDR), /* lhi r3,0x7c10 */
902636
+    0xa7, 0x39, HIGH(SIGNATURE_ADDR), LOW(SIGNATURE_ADDR), /* lghi r3,0x7c10 */
902636
     0xa7, 0x48, LOW(SIGNATURE), HIGH(SIGNATURE),           /* lhi r4,0xadde */
902636
     0x40, 0x40, 0x30, 0x00,                                /* sth r4,0(r3) */
902636
     0xa7, 0xf4, 0xff, 0xfa                                 /* j 0x10010 */
902636
-- 
902636
2.27.0
902636