mirror_qemu/pc-bios/s390-ccw
Thomas Huth 7cd50cbe4c pc-bios/s390-ccw: Don't use __bss_start with the "larl" instruction
start.S currently cannot be compiled with Clang 16 and binutils 2.40:

 ld: start.o(.text+0x8): misaligned symbol `__bss_start' (0xc1e5) for
     relocation R_390_PC32DBL

According to the built-in linker script of ld, the symbol __bss_start
can actually point *before* the .bss section and does not need to have
any alignment, so in certain situations (like when using the internal
assembler of Clang), the __bss_start symbol can indeed be unaligned
and thus it is not suitable for being used with the "larl" instruction
that needs an address that is at least aligned to halfwords.
The problem went unnoticed so far since binutils <= 2.39 did not
check the alignment, but starting with binutils 2.40, such unaligned
addresses are now refused.

Fix it by loading the address indirectly instead.

Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=2216662
Reported-by: Miroslav Rezanina <mrezanin@redhat.com>
Suggested-by:  Andreas Krebbel <andreas.krebbel@de.ibm.com>
Message-Id: <20230629104821.194859-8-thuth@redhat.com>
Reviewed-by: Claudio Imbrenda <imbrenda@linux.ibm.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
2023-06-29 20:45:12 +02:00
..
Makefile pc-bios/s390-ccw/Makefile: Use -z noexecstack to silence linker warning 2023-06-29 20:45:12 +02:00
bootmap.c pc-bios: Add support for List-Directed IPL from ECKD DASD 2023-03-08 08:57:42 +01:00
bootmap.h pc-bios: Add support for List-Directed IPL from ECKD DASD 2023-03-08 08:57:42 +01:00
bswap.h pc-bios/s390-ccw: Move byteswap functions to a separate header 2017-07-14 12:29:48 +02:00
cio.c pc-bios: s390x: cio.c cleanup and compile fix 2020-07-02 09:59:10 +02:00
cio.h pc-bios/s390-ccw: Get rid of the the __u* types 2023-06-29 20:45:12 +02:00
dasd-ipl.c docs: fix references to docs/devel/s390-dasd-ipl.rst 2021-06-02 06:51:09 +02:00
dasd-ipl.h s390-bios: Support booting from real dasd device 2019-04-12 12:40:35 +02:00
helper.h s390-ccw: Getting rid of ulong 2023-06-29 20:43:19 +02:00
iplb.h s390x: Fix spelling errors 2022-11-16 10:15:26 +01:00
jump2ipl.c pc-bios/s390-ccw: Fix inline assembly for older versions of Clang 2021-05-14 12:38:43 +02:00
libc.c pc-bios/s390-ccw: Clean up harmless misuse of isdigit() 2019-05-08 10:52:14 +02:00
libc.h s390-bios: cio error handling 2019-04-12 12:40:35 +02:00
main.c pc-bios/s390-ccw: Move the stack array into start.S 2023-06-29 20:45:12 +02:00
menu.c pc-bios/s390-ccw: Fix inline assembly for older versions of Clang 2021-05-14 12:38:43 +02:00
netboot.mak pc-bios/s390-ccw: Adopt meson style Make output 2022-10-06 11:53:40 +01:00
netmain.c pc-bios/s390-ccw: Move the stack array into start.S 2023-06-29 20:45:12 +02:00
s390-arch.h pc-bios: s390x: Clear out leftover S390EP string 2020-11-23 09:48:45 +01:00
s390-ccw.h pc-bios/s390-ccw: Move the stack array into start.S 2023-06-29 20:45:12 +02:00
s390-time.h pc-bios: s390x: Consolidate timing functions into time.h 2020-07-02 09:59:24 +02:00
sclp.c pc-bios/s390-ccw: fix sclp_get_loadparm_ascii 2019-11-29 09:16:02 +01:00
sclp.h misc: Replace zero-length arrays with flexible array member (automatic) 2020-03-16 22:07:42 +01:00
scsi.h pc-bios/s390-ccw: Get Block Limits VPD device data 2017-05-19 12:29:01 +02:00
start.S pc-bios/s390-ccw: Don't use __bss_start with the "larl" instruction 2023-06-29 20:45:12 +02:00
virtio-blkdev.c s390-ccw: Getting rid of ulong 2023-06-29 20:43:19 +02:00
virtio-net.c pc-bios: s390x: Move sleep and yield to helper.h 2020-07-02 09:59:51 +02:00
virtio-scsi.c s390-ccw: Getting rid of ulong 2023-06-29 20:43:19 +02:00
virtio-scsi.h s390-ccw: Getting rid of ulong 2023-06-29 20:43:19 +02:00
virtio.c s390-ccw: Getting rid of ulong 2023-06-29 20:43:19 +02:00
virtio.h s390-ccw: Getting rid of ulong 2023-06-29 20:43:19 +02:00