Dominique Leuenberger 2023-02-22 14:21:41 +00:00 committed by Git OBS Bridge
commit ffb7bc260c
18 changed files with 923 additions and 1 deletions

View File

@ -1,6 +1,6 @@
/********************************************************************************/
/* */
/* Copyright (C) 2014-2015, 2019-2020 SUSE LLC */
/* Copyright (C) 2014-2015, 2019-2023 SUSE LLC */
/* */
/* All rights reserved.

View File

@ -0,0 +1,41 @@
---
zipl/boot/stage2.lds.S | 7 ++++++-
zipl/boot/stage3.lds.S | 7 ++++++-
2 files changed, 12 insertions(+), 2 deletions(-)
--- a/zipl/boot/stage2.lds.S
+++ b/zipl/boot/stage2.lds.S
@@ -88,6 +88,11 @@ SECTIONS
}
__stack_end = .;
- .eh_frame : { *(.eh_frame) }
.note.gnu.build-id : { *(.note.gnu.build-id) }
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.eh_frame)
+ *(.interp)
+ }
}
--- a/zipl/boot/stage3.lds.S
+++ b/zipl/boot/stage3.lds.S
@@ -39,7 +39,6 @@ SECTIONS
__ex_table_start = .;
.ex_table : { *(.ex_table) }
__ex_table_stop = .;
- .eh_frame : { *(.eh_frame) }
__bss_start = .;
.bss : { *(.bss) }
@@ -75,4 +74,10 @@ SECTIONS
.notes : {
*(.note.*)
}
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.eh_frame)
+ *(.interp)
+ }
}

View File

@ -0,0 +1,47 @@
---
zipl/boot/entry.S | 5 +++++
zipl/boot/head.S | 5 +++++
zipl/boot/stage2.lds.S | 1 +
zipl/boot/stage3.lds.S | 1 +
4 files changed, 12 insertions(+)
--- a/zipl/boot/entry.S
+++ b/zipl/boot/entry.S
@@ -18,3 +18,8 @@ pgm_check_handler:
basr %r14,%r14
lmg %r0,%r15,__LC_SAVE_AREA_SYNC
lpswe __LC_PGM_OLD_PSW(%r0)
+
+/* The code doesn't require an executable stack */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
--- a/zipl/boot/head.S
+++ b/zipl/boot/head.S
@@ -28,3 +28,8 @@ _start:
brasl %r14,initialize
.Lstack: .long 0x10000-160
.previous
+
+/* The code doesn't require an executable stack */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
--- a/zipl/boot/stage2.lds.S
+++ b/zipl/boot/stage2.lds.S
@@ -94,5 +94,6 @@ SECTIONS
/DISCARD/ : {
*(.eh_frame)
*(.interp)
+ *(.note.GNU-stack)
}
}
--- a/zipl/boot/stage3.lds.S
+++ b/zipl/boot/stage3.lds.S
@@ -79,5 +79,6 @@ SECTIONS
/DISCARD/ : {
*(.eh_frame)
*(.interp)
+ *(.note.GNU-stack)
}
}

View File

@ -0,0 +1,39 @@
---
common.mak | 14 ++++++++++++++
zipl/boot/Makefile | 2 +-
2 files changed, 15 insertions(+), 1 deletion(-)
--- a/common.mak
+++ b/common.mak
@@ -146,6 +146,20 @@ then \
fi
#
+# Test for linker option
+#
+# $1: Linker option
+#
+# Returns the linker option if available and nothing otherwise
+#
+define test_linker_flag
+$(shell printf "int main(void) {return 0;}\n" | \
+ ( $(CC) "-Wl,$1" -o /dev/null -x c - ) >/dev/null 2>&1 && printf -- '-Wl,%s' "$1")
+endef
+
+NO_WARN_RWX_SEGMENTS_LDFLAGS := $(call test_linker_flag,"--no-warn-rwx-segments")
+
+#
# Support alternate install root
#
# INSTALLDIR: Finally install s390-tools to INSTALLDIR. This can be used
--- a/zipl/boot/Makefile
+++ b/zipl/boot/Makefile
@@ -75,7 +75,7 @@ stage3.exec: head.o stage3.o kdump3.o li
2) SFLAGS="-Wl,-T,stage2.lds";; \
3) SFLAGS="-Wl,-T,stage3.lds";; \
esac; \
- $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) -m64 -static -nostdlib $(filter %.o, $^) -o $@
+ $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -m64 -static -nostdlib $(filter %.o, $^) -o $@
%.bin: %.exec
$(OBJCOPY) -O binary \

View File

@ -0,0 +1,43 @@
---
zipl/boot/Makefile | 2 +-
zipl/boot/stage2.lds.S | 2 --
zipl/boot/stage3.lds.S | 6 ------
3 files changed, 1 insertion(+), 9 deletions(-)
--- a/zipl/boot/Makefile
+++ b/zipl/boot/Makefile
@@ -75,7 +75,7 @@ stage3.exec: head.o stage3.o kdump3.o li
2) SFLAGS="-Wl,-T,stage2.lds";; \
3) SFLAGS="-Wl,-T,stage3.lds";; \
esac; \
- $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -m64 -static -nostdlib $(filter %.o, $^) -o $@
+ $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
%.bin: %.exec
$(OBJCOPY) -O binary \
--- a/zipl/boot/stage2.lds.S
+++ b/zipl/boot/stage2.lds.S
@@ -88,8 +88,6 @@ SECTIONS
}
__stack_end = .;
- .note.gnu.build-id : { *(.note.gnu.build-id) }
-
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
--- a/zipl/boot/stage3.lds.S
+++ b/zipl/boot/stage3.lds.S
@@ -69,12 +69,6 @@ SECTIONS
}
__stack_end = .;
- /* List this explicitly as otherwise .note.gnu.build-id will be
- * put at 0x0 */
- .notes : {
- *(.note.*)
- }
-
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)

View File

@ -0,0 +1,45 @@
---
zipl/boot/Makefile | 32 +-------------------------------
1 file changed, 1 insertion(+), 31 deletions(-)
--- a/zipl/boot/Makefile
+++ b/zipl/boot/Makefile
@@ -78,37 +78,7 @@ stage3.exec: head.o stage3.o kdump3.o li
$(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -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 \
- $< $@
-
-stage3.bin: stage3.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 \
- --only-section=.sb.trailer \
- $< $@
+ $(OBJCOPY) -O binary $< $@
data.o: $(FILES)
$(LINK) $(NO_PIE_LDFLAGS) -static -nostdlib -Wl,--relocatable -Wl,--format,binary -o data.o $(FILES)

View File

@ -0,0 +1,69 @@
---
include/boot/loaders_layout.h | 3 +++
zipl/src/boot.c | 10 ++++------
2 files changed, 7 insertions(+), 6 deletions(-)
--- a/include/boot/loaders_layout.h
+++ b/include/boot/loaders_layout.h
@@ -14,12 +14,15 @@
#include "lib/zt_common.h"
#include "linux_layout.h"
+#define STAGE1B_LOAD_ADDRESS _AC(0xe000, UL)
+
#define STAGE2_DESC _AC(0x78, UL)
#define STAGE2_ENTRY _AC(0x2018, UL)
#define STAGE2_HEAP_ADDRESS _AC(0x6000, UL)
#define STAGE2_HEAP_SIZE _AC(0x3000, UL)
#define STAGE2_STACK_ADDRESS _AC(0xe400, UL)
#define STAGE2_STACK_SIZE _AC(0x1c00, UL)
+#define STAGE2_MAX_SIZE _AC(0x3000, UL)
#define STAGE3_ENTRY _AC(0xa000, UL)
--- a/zipl/src/boot.c
+++ b/zipl/src/boot.c
@@ -17,6 +17,7 @@
#include <fcntl.h>
#include <sys/stat.h>
#include "lib/util_libc.h"
+#include "boot/loaders_layout.h"
#include "stage3.h"
@@ -29,15 +30,13 @@
#define DATA_SIZE(x) ((size_t) (&_binary_##x##_bin_end - &_binary_##x##_bin_start))
#define DATA_ADDR(x) (&_binary_##x##_bin_start)
-#define STAGE2_MAX_SIZE 0x3000
-#define STAGE1B_LOAD_ADDR 0xe000
#define CCW_FLAG_CC 0x40
#define CCW_FLAG_SLI 0x20
#define FBA_BLK_SIZE 512
static struct boot_ccw0 tic_to_stage1b = {
.cmd = 0x08, /* tic */
- .address_lo = STAGE1B_LOAD_ADDR,
+ .address_lo = STAGE1B_LOAD_ADDRESS,
};
/* Check sizes of internal objects. Return 0 if everything is correct,
@@ -133,8 +132,7 @@ boot_init_fba_stage0(struct boot_fba_sta
for (i = 0; i < stage1b_count; i++) {
stage0->locdata[i].blocknr =
(uint32_t) stage1b_list[i].linear.block;
- stage0->locread[i].read.address_lo =
- STAGE1B_LOAD_ADDR + i * FBA_BLK_SIZE;
+ stage0->locread[i].read.address_lo = STAGE1B_LOAD_ADDRESS + i * FBA_BLK_SIZE;
}
/* Terminate CCW chain: Tic to stage 1b */
memcpy(&stage0->locread[i], &tic_to_stage1b, sizeof(tic_to_stage1b));
@@ -178,7 +176,7 @@ boot_init_eckd_stage1(struct boot_eckd_s
((stage1b_list[i].chs.cyl >> 12) & 0xfff0);
stage1->seek[i].sec = stage1b_list[i].chs.sec;
stage1->ssrt[i].read.address_lo =
- STAGE1B_LOAD_ADDR + i * stage1b_list[i].chs.size;
+ STAGE1B_LOAD_ADDRESS + i * stage1b_list[i].chs.size;
stage1->ssrt[i].read.flags = CCW_FLAG_CC | CCW_FLAG_SLI;
}
/* Terminate CCW chain: Tic to stage 1b */

View File

@ -0,0 +1,123 @@
---
include/boot/loaders_layout.h | 3 +++
zipl/boot/Makefile | 24 ++++++++++--------------
zipl/boot/stage0.lds.S | 18 ++++++++++++++++++
zipl/boot/stage1.lds.S | 18 ++++++++++++++++++
zipl/boot/stage1b.lds.S | 18 ++++++++++++++++++
5 files changed, 67 insertions(+), 14 deletions(-)
--- a/include/boot/loaders_layout.h
+++ b/include/boot/loaders_layout.h
@@ -14,6 +14,9 @@
#include "lib/zt_common.h"
#include "linux_layout.h"
+#define STAGE0_LOAD_ADDRESS _AC(0x0, UL)
+
+#define STAGE1_LOAD_ADDRESS _AC(0x18, UL)
#define STAGE1B_LOAD_ADDRESS _AC(0xe000, UL)
#define STAGE2_DESC _AC(0x78, UL)
--- a/zipl/boot/Makefile
+++ b/zipl/boot/Makefile
@@ -42,6 +42,15 @@ endif
%.lds: %.lds.S
$(CPP) -Wp,-MD,.$@.d,-MT,$@ $(INCLUDE_PARMS) -P -C -o $@ $<
+fba0.exec eckd0_ldl.exec eckd0_cdl.exec tape0.exec: \
+ stage0.lds
+
+eckd1.exec: \
+ stage1.lds
+
+eckd1b.exec fba1b.exec: \
+ stage1b.lds
+
eckd2dump_sv.exec: \
head.o stage2dump.o cio.o eckd2dump.o eckd2dump_sv.o \
libc.o ebcdic.o sclp.o entry.o stage2.lds
@@ -62,20 +71,7 @@ stage3.exec: head.o stage3.o kdump3.o li
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="-Wl,-Ttext,0";; \
- 1) SFLAGS="-Wl,-Ttext,0x18";; \
- 1b) SFLAGS="-Wl,-Ttext,0xE000";; \
- 2) SFLAGS="-Wl,-T,stage2.lds";; \
- 3) SFLAGS="-Wl,-T,stage3.lds";; \
- esac; \
- $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
+ $(LINK) -Wl,-T,$(filter %.lds,$^) $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
%.bin: %.exec
$(OBJCOPY) -O binary $< $@
--- /dev/null
+++ b/zipl/boot/stage0.lds.S
@@ -0,0 +1,18 @@
+#include "boot/loaders_layout.h"
+
+ENTRY(_start)
+
+SECTIONS
+{
+ . = STAGE0_LOAD_ADDRESS;
+ .text : {
+ *(.text .text.*)
+ }
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.eh_frame)
+ *(.interp)
+ *(.note.GNU-stack)
+ }
+}
--- /dev/null
+++ b/zipl/boot/stage1.lds.S
@@ -0,0 +1,18 @@
+#include "boot/loaders_layout.h"
+
+ENTRY(_start)
+
+SECTIONS
+{
+ . = STAGE1_LOAD_ADDRESS;
+ .text : {
+ *(.text .text.*)
+ }
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.eh_frame)
+ *(.interp)
+ *(.note.GNU-stack)
+ }
+}
--- /dev/null
+++ b/zipl/boot/stage1b.lds.S
@@ -0,0 +1,18 @@
+#include "boot/loaders_layout.h"
+
+ENTRY(_start)
+
+SECTIONS
+{
+ . = STAGE1B_LOAD_ADDRESS;
+ .text : {
+ *(.text .text.*)
+ }
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.eh_frame)
+ *(.interp)
+ *(.note.GNU-stack)
+ }
+}

View File

@ -0,0 +1,59 @@
---
genprotimg/boot/head.S | 5 +++++
genprotimg/boot/stage3a.lds.S | 1 +
genprotimg/boot/stage3a_init.S | 5 +++++
genprotimg/boot/stage3b.lds.S | 1 +
genprotimg/boot/stage3b_reloc.S | 5 +++++
5 files changed, 17 insertions(+)
--- a/genprotimg/boot/head.S
+++ b/genprotimg/boot/head.S
@@ -29,3 +29,8 @@ _start:
brasl %r14, initialize
.Lstack: .long STACK_ADDRESS + STACK_SIZE - STACK_FRAME_OVERHEAD
.previous
+
+/* The code doesn't require an executable stack */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
--- a/genprotimg/boot/stage3a.lds.S
+++ b/genprotimg/boot/stage3a.lds.S
@@ -99,5 +99,6 @@ SECTIONS
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
+ *(.note.GNU-stack)
}
}
--- a/genprotimg/boot/stage3a_init.S
+++ b/genprotimg/boot/stage3a_init.S
@@ -26,3 +26,8 @@ _init:
br %r1
.Lstage3a_entry: .long STAGE3A_ENTRY
.previous
+
+/* The code doesn't require an executable stack */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif
--- a/genprotimg/boot/stage3b.lds.S
+++ b/genprotimg/boot/stage3b.lds.S
@@ -83,5 +83,6 @@ SECTIONS
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
+ *(.note.GNU-stack)
}
}
--- a/genprotimg/boot/stage3b_reloc.S
+++ b/genprotimg/boot/stage3b_reloc.S
@@ -53,3 +53,8 @@ stage3b_start:
.incbin "stage3b.bin"
stage3b_end:
.previous
+
+/* The code doesn't require an executable stack */
+#if defined(__linux__) && defined(__ELF__)
+.section .note.GNU-stack,"",%progbits
+#endif

View File

@ -0,0 +1,15 @@
---
genprotimg/boot/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/genprotimg/boot/Makefile
+++ b/genprotimg/boot/Makefile
@@ -79,7 +79,7 @@ stage3b_reloc.elf:
stage3b) SFLAGS="-Wl,-T,stage3b.lds";; \
stage3b_reloc) SFLAGS="-Wl,-estage3b_reloc_start,-Ttext,0";; \
esac; \
- $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) -m64 -static -nostdlib $(filter %.o, $^) -o $@
+ $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -m64 -static -nostdlib $(filter %.o, $^) -o $@
@chmod a-x $@
%.bin: %.elf

View File

@ -0,0 +1,47 @@
---
genprotimg/boot/Makefile | 2 +-
genprotimg/boot/stage3a.lds.S | 6 ------
genprotimg/boot/stage3b.lds.S | 6 ------
3 files changed, 1 insertion(+), 13 deletions(-)
--- a/genprotimg/boot/Makefile
+++ b/genprotimg/boot/Makefile
@@ -79,7 +79,7 @@ stage3b_reloc.elf:
stage3b) SFLAGS="-Wl,-T,stage3b.lds";; \
stage3b_reloc) SFLAGS="-Wl,-estage3b_reloc_start,-Ttext,0";; \
esac; \
- $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -m64 -static -nostdlib $(filter %.o, $^) -o $@
+ $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
@chmod a-x $@
%.bin: %.elf
--- a/genprotimg/boot/stage3a.lds.S
+++ b/genprotimg/boot/stage3a.lds.S
@@ -90,12 +90,6 @@ SECTIONS
ASSERT(ABSOLUTE(.) < 0x13000, "Data section doesn't conform to the described memory layout");
}
- /* List this explicitly as otherwise .note.gnu.build-id will be
- * put at 0x0 */
- .notes : {
- *(.note.*)
- }
-
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
--- a/genprotimg/boot/stage3b.lds.S
+++ b/genprotimg/boot/stage3b.lds.S
@@ -74,12 +74,6 @@ SECTIONS
}
__stack_end = .;
- /* List this explicitly as otherwise .note.gnu.build-id will be
- * put at 0x0 */
- .notes : {
- *(.note.*)
- }
-
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)

View File

@ -0,0 +1,23 @@
---
genprotimg/boot/Makefile | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
--- a/genprotimg/boot/Makefile
+++ b/genprotimg/boot/Makefile
@@ -82,14 +82,8 @@ stage3b_reloc.elf:
$(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
@chmod a-x $@
-%.bin: %.elf
- $(OBJCOPY) -O binary \
- --only-section=.text* \
- --only-section=.ex_table* \
- --only-section=.fixup* \
- --only-section=.data* \
- --only-section=.rodata* \
- $< $@
+%.bin: %.elf
+ $(OBJCOPY) -O binary $< $@
@chmod a-x $@
clean:

View File

@ -0,0 +1,92 @@
---
genprotimg/boot/stage3a.lds.S | 11 +++++------
genprotimg/boot/stage3b.lds.S | 9 ++++-----
2 files changed, 9 insertions(+), 11 deletions(-)
--- a/genprotimg/boot/stage3a.lds.S
+++ b/genprotimg/boot/stage3a.lds.S
@@ -23,8 +23,6 @@ ENTRY(_init)
SECTIONS
{
- . = 0x0;
-
. = HEAP_ADDRESS;
__heap_start = .;
.heap : {
@@ -46,7 +44,7 @@ SECTIONS
. = STAGE3A_INIT_ENTRY;
__text_init_start = .;
.text : {
- stage3a_init.o(.text.init)
+ *(.text.init)
__text_init_stop = ABSOLUTE(.);
/* Text size of text_init must be smaller than 'PARMAREA - IMAGE_ENTRY',
* otherwise the text data could be overwritten by the original zipl stage3
@@ -56,8 +54,8 @@ SECTIONS
. = 0x1000;
ASSERT(ABSOLUTE(.) == STAGE3A_ENTRY,
"Text section doesn't conform to the described memory layout");
- head.o(.text.start)
- *(.text)
+ *(.text.start)
+ *(.text .text.*)
}
.ex_table ALIGN(16) : {
@@ -74,7 +72,7 @@ SECTIONS
.rodata ALIGN(16) : {
*(.rodata)
- *(.rodata.*)
+ *(.rodata*)
}
.data ALIGN(16) : {
@@ -93,6 +91,7 @@ SECTIONS
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
+ *(.interp)
*(.note.GNU-stack)
}
}
--- a/genprotimg/boot/stage3b.lds.S
+++ b/genprotimg/boot/stage3b.lds.S
@@ -21,8 +21,6 @@ ENTRY(_start)
SECTIONS
{
- . = 0x0;
-
. = HEAP_ADDRESS;
__heap_start = .;
.heap : {
@@ -34,8 +32,8 @@ SECTIONS
. = STAGE3B_ENTRY;
.text : {
- head.o(.text.start)
- *(.text)
+ *(.text.start)
+ *(.text .text.*)
}
.ex_table ALIGN(16) : {
@@ -52,7 +50,7 @@ SECTIONS
.rodata ALIGN(16) : {
*(.rodata)
- *(.rodata.*)
+ *(.rodata*)
}
.data ALIGN(16) : {
@@ -77,6 +75,7 @@ SECTIONS
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)
+ *(.interp)
*(.note.GNU-stack)
}
}

View File

@ -0,0 +1,15 @@
---
genprotimg/boot/stage3b.lds.S | 2 ++
1 file changed, 2 insertions(+)
--- a/genprotimg/boot/stage3b.lds.S
+++ b/genprotimg/boot/stage3b.lds.S
@@ -72,6 +72,8 @@ SECTIONS
}
__stack_end = .;
+ ASSERT(. <= IMAGE_ENTRY, "stage3b size must be smaller than 0x10000 bytes")
+
/* Sections to be discarded */
/DISCARD/ : {
*(.eh_frame)

View File

@ -0,0 +1,65 @@
---
genprotimg/boot/Makefile | 14 ++++----------
genprotimg/boot/stage3b_reloc.S | 4 ++--
genprotimg/boot/stage3b_reloc.lds.S | 19 +++++++++++++++++++
3 files changed, 25 insertions(+), 12 deletions(-)
--- a/genprotimg/boot/Makefile
+++ b/genprotimg/boot/Makefile
@@ -69,17 +69,11 @@ endif
stage3b_reloc.o: stage3b.bin
-stage3a.elf: head.o stage3a_init.o stage3a.o stage3a.lds $(ZIPL_OBJS)
-stage3b.elf: head.o stage3b.o stage3b.lds $(ZIPL_OBJS)
-stage3b_reloc.elf:
+stage3a.elf: head.o stage3a_init.o $(ZIPL_OBJS)
+stage3b.elf: head.o $(ZIPL_OBJS)
-%.elf: %.o
- case $* in \
- stage3a) SFLAGS="-Wl,-T,stage3a.lds";; \
- stage3b) SFLAGS="-Wl,-T,stage3b.lds";; \
- stage3b_reloc) SFLAGS="-Wl,-estage3b_reloc_start,-Ttext,0";; \
- esac; \
- $(LINK) $$SFLAGS $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
+%.elf: %.lds %.o
+ $(LINK) $(NO_PIE_LDFLAGS) $(NO_WARN_RWX_SEGMENTS_LDFLAGS) -Wl,-T,$< -Wl,--build-id=none -m64 -static -nostdlib $(filter %.o, $^) -o $@
@chmod a-x $@
%.bin: %.elf
--- a/genprotimg/boot/stage3b_reloc.S
+++ b/genprotimg/boot/stage3b_reloc.S
@@ -22,8 +22,8 @@
.org 0x0
.section .text.start
-.globl stage3b_reloc_start
-stage3b_reloc_start:
+.globl _start
+_start:
/* Might be called after a diag308 so better set
* architecture and addressing mode
*/
--- /dev/null
+++ b/genprotimg/boot/stage3b_reloc.lds.S
@@ -0,0 +1,19 @@
+OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
+OUTPUT_ARCH(s390:64-bit)
+
+ENTRY(_start)
+
+SECTIONS
+{
+ .text : {
+ *(.text.start)
+ *(.text .text.*)
+ }
+
+ /* Sections to be discarded */
+ /DISCARD/ : {
+ *(.eh_frame)
+ *(.interp)
+ *(.note.GNU-stack)
+ }
+}

View File

@ -0,0 +1,162 @@
---
.gitignore | 1 +
common.mak | 4 ++--
zipl/boot/Makefile | 16 ++++++----------
zipl/src/Makefile | 14 +++++---------
zipl/src/boot.c | 41 ++++++++++++++++++++++++++++++++++++++---
5 files changed, 52 insertions(+), 24 deletions(-)
--- a/.gitignore
+++ b/.gitignore
@@ -110,6 +110,7 @@ ziomon/ziorep_traffic
ziomon/ziorep_utilization
zipl/boot/*.bin
zipl/boot/*.exec
+zipl/boot/.loaders
zipl/boot/data.h
zipl/src/chreipl_helper.device-mapper
zdev/src/zdev_id
--- a/common.mak
+++ b/common.mak
@@ -410,8 +410,8 @@ $(rootdir)/libpv/libpv.a: $(rootdir)/lib
$(MAKE) -C $(rootdir)/libpv libpv.a
.PHONY: $(rootdir)/libpv
-$(rootdir)/zipl/boot/data.o:
- $(MAKE) -C $(rootdir)/zipl/boot/ data.o
+$(rootdir)/zipl/boot/.loaders:
+ $(MAKE) -C $(rootdir)/zipl/boot/ .loaders
install_dirs:
for dir in $(INSTDIRS); do \
--- a/zipl/boot/Makefile
+++ b/zipl/boot/Makefile
@@ -20,7 +20,10 @@ FILES = fba0.bin fba1b.bin fba2.bin \
tape0.bin \
eckd2dump_sv.bin tape2dump.bin fba2dump.bin eckd2dump_mv.bin
-all: data.o data.h tape0.bin stage3.bin
+all: .loaders tape0.bin stage3.bin
+
+.loaders: $(FILES)
+ touch .loaders
# Prevent make from using some default rules...
%: %.S
@@ -76,16 +79,9 @@ stage3.exec: head.o stage3.o kdump3.o li
%.bin: %.exec
$(OBJCOPY) -O binary $< $@
-data.o: $(FILES)
- $(LINK) $(NO_PIE_LDFLAGS) -static -nostdlib -Wl,--relocatable -Wl,--format,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 *.lds .*.lds.d
+ rm -f -- *.o *.exec *.bin $(FILES) tape0.bin *.xxx *.yyy \
+ stage3.bin *.lds .*.lds.d .loaders
.PHONY: all clean
--- a/zipl/src/Makefile
+++ b/zipl/src/Makefile
@@ -4,14 +4,14 @@ include ../../common.mak
ALL_CPPFLAGS += -I../include -I../boot \
-DZFCPDUMP_IMAGE="STRINGIFY($(ZFCPDUMP_DIR)/$(ZFCPDUMP_IMAGE))" \
-DZFCPDUMP_INITRD="STRINGIFY($(ZFCPDUMP_DIR)/$(ZFCPDUMP_INITRD))" \
- -D_FILE_OFFSET_BITS=64 $(NO_PIE_CFLAGS)
+ -D_FILE_OFFSET_BITS=64 $(NO_PIE_CFLAGS) -DBUILD_PATH="../boot"
ALL_LDFLAGS += -Wl,-z,noexecstack $(NO_PIE_LDFLAGS)
libs = $(rootdir)/libutil/libutil.a \
$(rootdir)/libvtoc/libvtoc.a \
objects = misc.o error.o scan.o job.o boot.o bootmap.o fs-map.o disk.o \
- bootmap_header.o envblk.o install.o zipl.o $(rootdir)/zipl/boot/data.o
+ bootmap_header.o envblk.o install.o zipl.o
zipl_helpers = $(basename $(wildcard zipl_helper.*.c))
chreipl_helpers = $(subst zipl_,chreipl_, $(zipl_helpers))
@@ -19,6 +19,7 @@ zipl_stage3 = ../boot/stage3.bin
all: zipl zipl-editenv $(chreipl_helpers) $(zipl_stage3)
+boot.o: ../boot/.loaders
zipl: $(objects) $(libs)
zipl_helper.device-mapper: $(rootdir)/libdasd/libdasd.a \
@@ -47,13 +48,8 @@ clean:
# Additional manual dependencies
-.boot.o.d boot.o: ../boot/data.h
-
-../boot/data.h:
- $(MAKE) -C ../boot data.h
-
-../boot/data.o:
- $(MAKE) -C ../boot data.o
+../boot/.loaders:
+ $(MAKE) -C ../boot .loaders
../boot/stage3.bin:
$(MAKE) -C ../boot stage3.bin
--- a/zipl/src/boot.c
+++ b/zipl/src/boot.c
@@ -21,14 +21,49 @@
#include "stage3.h"
-#include "../boot/data.h"
#include "boot.h"
#include "bootmap.h"
#include "error.h"
#include "misc.h"
-#define DATA_SIZE(x) ((size_t) (&_binary_##x##_bin_end - &_binary_##x##_bin_start))
-#define DATA_ADDR(x) (&_binary_##x##_bin_start)
+/* Import a binary file */
+/* clang-format off */
+#define DATA_NAME(SYM, SUFFIX) _binary_##SYM##_bin##SUFFIX
+#define DATA_SIZE(SYM) ((size_t)(&DATA_NAME(SYM, _end) - &DATA_NAME(SYM, _start)))
+#define DATA_ADDR(SYM) (&DATA_NAME(SYM, _start))
+#define BIN_FILE_PATH(FILE_NAME) STRINGIFY(BUILD_PATH) "/" STRINGIFY(FILE_NAME) ".bin"
+#define IMPORT_DATA(SYM) \
+ extern const uint8_t DATA_NAME(SYM, _start); \
+ extern const uint8_t DATA_NAME(SYM, _end); \
+ asm(".section \".rodata\", \"a\", @progbits\n" \
+ ".balign 4\n" \
+ ".global " STRINGIFY(DATA_NAME(SYM, _start)) "\n" \
+ STRINGIFY(DATA_NAME(SYM, _start)) ":\n" \
+ ".incbin \"" BIN_FILE_PATH(SYM) "\"\n" \
+ ".global " STRINGIFY(DATA_NAME(SYM, _end)) "\n" \
+ STRINGIFY(DATA_NAME(SYM, _end)) ":\n" \
+ ".balign 4\n" \
+ ".previous\n")
+/* clang-format on */
+
+/* Stage 0 Loader */
+IMPORT_DATA(eckd0_cdl);
+IMPORT_DATA(eckd0_ldl);
+IMPORT_DATA(fba0);
+IMPORT_DATA(tape0);
+/* Stage 1 Loader */
+IMPORT_DATA(eckd1);
+/* Stage 1b Loader */
+IMPORT_DATA(eckd1b);
+IMPORT_DATA(fba1b);
+/* Stage 2 Loader */
+IMPORT_DATA(eckd2);
+IMPORT_DATA(fba2);
+/* Stage 2 Dump Loader */
+IMPORT_DATA(eckd2dump_mv);
+IMPORT_DATA(eckd2dump_sv);
+IMPORT_DATA(fba2dump);
+IMPORT_DATA(tape2dump);
#define CCW_FLAG_CC 0x40
#define CCW_FLAG_SLI 0x20

View File

@ -1,3 +1,23 @@
-------------------------------------------------------------------
Tue Feb 21 13:49:29 UTC 2023 - Nikolay Gueorguiev <nikolay.gueorguiev@suse.com>
- Apllied the following patches (bsc#1208527, bsc#1206173)
* s390-tools-sles15sp5-01-zipl-boot-discard-.eh_frame-and-.interp-input-sectio.patch
* s390-tools-sles15sp5-02-zipl-boot-declare-that-no-executable-stack-is-requir.patch
* s390-tools-sles15sp5-03-zipl-boot-use-no-warn-rwx-segments-linker-flag.patch
* s390-tools-sles15sp5-04-zipl-boot-disable-build-id.patch
* s390-tools-sles15sp5-05-zipl-boot-simplify-objcopy-commands.patch
* s390-tools-sles15sp5-06-zipl-move-STAGE2_MAX_SIZE-and-STAGE1B_LOAD_ADDR-to-l.patch
* s390-tools-sles15sp5-07-zipl-boot-use-linker-scripts-for-all-bootloaders.patch
* s390-tools-sles15sp5-08-genprotimg-boot-declare-that-no-executable-stack-is-.patch
* s390-tools-sles15sp5-09-genprotimg-boot-use-no-warn-rwx-segments-linker-flag.patch
* s390-tools-sles15sp5-10-genprotimg-boot-disable-build-id.patch
* s390-tools-sles15sp5-11-genprotimg-boot-Makefile-simplify-objcopy-command.patch
* s390-tools-sles15sp5-12-genprotimg-boot-improve-linker-scripts.patch
* s390-tools-sles15sp5-13-genprotimg-boot-stage3b-add-size-check-to-the-linker.patch
* s390-tools-sles15sp5-14-genprotimg-boot-stage3b_reloc.bin-add-linker-script.patch
* s390-tools-sles15sp5-15-zipl-Embed-loader-data-directly-into-boot-object.patch
-------------------------------------------------------------------
Thu Feb 16 16:24:33 UTC 2023 - José Gómez <jose.gomez@suse.com>

View File

@ -148,6 +148,23 @@ Patch908: s390-tools-sles15sp3-dasdfmt-retry-BIODASDINFO-if-device-is-busy
Patch909: s390-tools-sles12-fdasd-skip-partition-check-and-BLKRRPART-ioctl.patch
Patch910: s390-tools-sles15sp1-11-zdev-Do-not-call-zipl-on-initrd-update.patch
Patch911: s390-tools-sles15sp5-remove-no-pie-link-arguments.patch
# Bug 1208527, and bug 1206173
Patch912: s390-tools-sles15sp5-01-zipl-boot-discard-.eh_frame-and-.interp-input-sectio.patch
Patch913: s390-tools-sles15sp5-02-zipl-boot-declare-that-no-executable-stack-is-requir.patch
Patch914: s390-tools-sles15sp5-03-zipl-boot-use-no-warn-rwx-segments-linker-flag.patch
Patch915: s390-tools-sles15sp5-04-zipl-boot-disable-build-id.patch
Patch916: s390-tools-sles15sp5-05-zipl-boot-simplify-objcopy-commands.patch
Patch917: s390-tools-sles15sp5-06-zipl-move-STAGE2_MAX_SIZE-and-STAGE1B_LOAD_ADDR-to-l.patch
Patch918: s390-tools-sles15sp5-07-zipl-boot-use-linker-scripts-for-all-bootloaders.patch
Patch919: s390-tools-sles15sp5-08-genprotimg-boot-declare-that-no-executable-stack-is-.patch
Patch920: s390-tools-sles15sp5-09-genprotimg-boot-use-no-warn-rwx-segments-linker-flag.patch
Patch921: s390-tools-sles15sp5-10-genprotimg-boot-disable-build-id.patch
Patch922: s390-tools-sles15sp5-11-genprotimg-boot-Makefile-simplify-objcopy-command.patch
Patch923: s390-tools-sles15sp5-12-genprotimg-boot-improve-linker-scripts.patch
Patch924: s390-tools-sles15sp5-13-genprotimg-boot-stage3b-add-size-check-to-the-linker.patch
Patch925: s390-tools-sles15sp5-14-genprotimg-boot-stage3b_reloc.bin-add-linker-script.patch
Patch926: s390-tools-sles15sp5-15-zipl-Embed-loader-data-directly-into-boot-object.patch
#
Patch999: s390-tools-sles15sp5-fix-chown-commands-syntax.patch
BuildRequires: curl-devel