linux/arch/s390/boot
Vasily Gorbik 2d6f74f797 s390/decompressor: correct EXCLUDE_FILE construct
The following linker construct is problematic with linkers of
binutils < 2.28:

EXCLUDE_FILE (*piggy.o) *(.rodata.*)

from 8f1732fc2a11dc of binutils:
"though the linker accepts this without complaint the
EXCLUDE_FILE part is silently ignored and has no effect."

Silent ignoring of EXCLUDE_FILE construct made .rodata.compressed be
part of .rodata, and in case of .rodata.compressed following some
unaligned data, input_len would also become unaligned.

from arch/s390/boot/compressed/vmlinux.map:
 .rodata.compressed
                0x0000000000012fea   0x4d57e7 arch/s390/boot/compressed/piggy.o
                0x0000000000012fea                input_len
                0x0000000000012fee                input_data

input_len is later used here:
arch/s390/boot/compressed/misc.c:113
	__decompress(input_data, input_len, NULL, NULL, output, 0, NULL, error);

asm generated by gcc looks like:
	.loc 3 113 0
egfrl	%r11,input_len

from what assembler generates invalid (the second operand must be aligned
on a doubleword boundary):
   0x00000000000129b4 <+148>:   c4 bc 00 00 03 1b       lgfrl   %r11,0x12fea
hence specification exception is recognized.

To avoid an issue use EXCLUDE_FILE construct which is recognized by
older linkers (since at least binutils-2_11)
	*(EXCLUDE_FILE (*piggy.o) .rodata.compressed)

Also ensure that .rodata.compressed is at least doubleword aligned.

Fixes: 89b5202e81 ("s390/decompressor: support uncompressed kernel")
Reported-by: Halil Pasic <pasic@linux.ibm.com>
Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2018-07-02 11:25:01 +02:00
..
compressed s390/decompressor: correct EXCLUDE_FILE construct 2018-07-02 11:25:01 +02:00
.gitignore s390: add various .gitignore files. 2012-05-16 14:42:41 +02:00
Makefile s390/decompressor: extend .bss check for early code 2018-06-25 10:14:40 +02:00
als.c s390/als: avoid .init.* sections usage 2018-06-25 10:14:38 +02:00
ebcdic.c s390/decompressor: avoid reusing uncompressed image objects 2018-06-25 10:14:39 +02:00
head.S s390/decompressor: support uncompressed kernel 2018-06-25 10:14:40 +02:00
head_kdump.S s390/boot: make head.S and als.c be part of the decompressor only 2018-06-25 10:14:38 +02:00
install.sh s390: Remove redundant license text 2017-11-24 15:37:24 +01:00
mem.S s390/decompressor: reuse lib/mem.S for mem functions 2018-06-25 10:14:39 +02:00
sclp_early_core.c s390/decompressor: avoid reusing uncompressed image objects 2018-06-25 10:14:39 +02:00