mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
The first component that gets control after IPL is the zIPL-provided stage 3 boot loader. This boot loader is based on a binary image linked into the zIPL executable. When preparing a disk for IPL, zIPL updates runtime parameters in the boot loader image and writes the resulting data to disk. To support the Secure Boot firmware feature, the stage 3 code must be signed, and can therefore no longer contain variable parameter portions. Also the boot loader image should be accessible as a separate file to enable the use of external programs for creating the signature. This patch moves the stage 3 boot loader code to an external file location and splits out the parameter portion into a separate, unsigned on-disk component. The new memory layout of the stage 3 loader during its execution looks as follows: * 0x0000-0x1fff Lowcore * 0x2000-0x5fff Memory allocation (heap) * 0x7000-0x8fff free * 0x9000-0x9fff Stage3 parameter * 0xa000-0xcfff Stage3 code * 0xd000-0xefff Section: bss, rodata, data * 0xf000-0xffff Stack Signed-off-by: Stefan Haberland <sth@linux.ibm.com> Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
93 lines
2.6 KiB
Makefile
93 lines
2.6 KiB
Makefile
# Common definitions
|
|
include ../../common.mak
|
|
|
|
CFLAGS_BOOT = $(NO_PIE_CFLAGS) -Os -g -I../include -D__ASSEMBLY__ \
|
|
-DS390_TOOLS_RELEASE=$(S390_TOOLS_RELEASE) \
|
|
-fno-builtin -ffreestanding -fno-asynchronous-unwind-tables \
|
|
-fno-delete-null-pointer-checks \
|
|
-fexec-charset=IBM1047 -m64 -mpacked-stack \
|
|
-mstack-size=8192 -mstack-guard=128 -msoft-float \
|
|
-W -Wall -Wformat-security
|
|
|
|
FILES = fba0.bin fba1b.bin fba2.bin \
|
|
eckd0_ldl.bin eckd0_cdl.bin \
|
|
eckd1.bin eckd1b.bin eckd2.bin \
|
|
tape0.bin \
|
|
eckd2dump_sv.bin tape2dump.bin fba2dump.bin eckd2dump_mv.bin
|
|
|
|
all: data.o data.h tape0.bin stage3.bin
|
|
|
|
# Prevent make from using some default rules...
|
|
%: %.S
|
|
|
|
%.o: %.S
|
|
$(CC) $(CFLAGS_BOOT) -c -o $@ $<
|
|
|
|
%.o: %.c
|
|
$(CC) $(CFLAGS_BOOT) -c -o $@ $<
|
|
|
|
eckd2dump_sv.exec: \
|
|
head.o stage2dump.o cio.o eckd2dump.o eckd2dump_sv.o \
|
|
libc.o sclp.o entry.o
|
|
eckd2dump_mv.exec: \
|
|
head.o stage2dump.o cio.o eckd2dump.o eckd2dump_mv.o \
|
|
libc.o sclp.o entry.o
|
|
fba2dump.exec: \
|
|
head.o stage2dump.o cio.o fba2dump.o \
|
|
libc.o sclp.o entry.o
|
|
tape2dump.exec: \
|
|
head.o stage2dump.o cio.o tape2dump.o \
|
|
libc.o sclp.o entry.o
|
|
eckd2.exec: head.o stage2.o cio.o eckd2.o libc.o menu.o sclp.o \
|
|
kdump2.o kdump.o entry.o
|
|
fba2.exec: head.o stage2.o cio.o fba2.o libc.o menu.o sclp.o \
|
|
kdump2.o kdump.o entry.o
|
|
stage3.exec: head.o stage3.o kdump3.o libc.o sclp.o sclp_stage3.o \
|
|
kdump.o entry.o stage3.lds
|
|
|
|
%.exec: %.o
|
|
@STAGE=$$( \
|
|
echo $@ | awk ' \
|
|
match($$0,/[0-9]+b*/){ \
|
|
print substr($$0,RSTART,RLENGTH) \
|
|
}' \
|
|
); \
|
|
case $$STAGE in \
|
|
0) SFLAGS="$(NO_PIE_LINKFLAGS) -nostdlib -Wl,-Ttext,0";; \
|
|
1) SFLAGS="$(NO_PIE_LINKFLAGS) -nostdlib -Wl,-Ttext,0x18";; \
|
|
1b) SFLAGS="$(NO_PIE_LINKFLAGS) -nostdlib -Wl,-Ttext,0xE000";; \
|
|
2) SFLAGS="$(NO_PIE_LINKFLAGS) -nostdlib -Wl,-T,stage2.lds";; \
|
|
3) SFLAGS="$(NO_PIE_LINKFLAGS) -nostdlib -Wl,-T,stage3.lds";; \
|
|
esac; \
|
|
$(LINK) $$SFLAGS -m64 $^ -o $@
|
|
|
|
%.bin: %.exec
|
|
$(OBJCOPY) -O binary \
|
|
--only-section=.stage2.head \
|
|
--only-section=.text.dummy \
|
|
--only-section=.text.start \
|
|
--only-section=.text \
|
|
--only-section=.ex_table \
|
|
--only-section=.data \
|
|
--only-section=.rodata.str1.2 \
|
|
--only-section=.rodata.cst8 \
|
|
--only-section=.rodata \
|
|
--only-section=.stage2dump.tail \
|
|
--only-section=.eckd2dump_mv.tail \
|
|
--only-section=.fixup \
|
|
$< $@
|
|
|
|
data.o: $(FILES)
|
|
$(LD) $(NO_PIE_LDFLAGS) -r -b binary -o data.o $(FILES)
|
|
|
|
data.h: data.o
|
|
rm -f data.h
|
|
$(NM) data.o | while read ADDR TYPE SYMBOL ; do \
|
|
echo "extern char $$SYMBOL;" >>data.h; done
|
|
|
|
clean:
|
|
rm -f *.o *.exec *.bin $(FILES) data.o data.h tape0.bin *.xxx *.yyy \
|
|
stage3.bin
|
|
|
|
.PHONY: all clean
|