mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-29 10:01:25 +00:00
s390/boot: enable .bss section for compressed kernel
- Support static uninitialized variables in compressed kernel. - Remove chkbss script - Get rid of workarounds for not having .bss section Signed-off-by: Alexander Egorenkov <egorenar@linux.ibm.com> Reviewed-by: Vasily Gorbik <gor@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
1a80b54d1c
commit
980d5f9ab3
9 changed files with 25 additions and 41 deletions
|
@ -73,7 +73,3 @@ $(obj)/startup.a: $(OBJECTS) FORCE
|
||||||
install:
|
install:
|
||||||
sh -x $(srctree)/$(obj)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
|
sh -x $(srctree)/$(obj)/install.sh $(KERNELRELEASE) $(obj)/bzImage \
|
||||||
System.map "$(INSTALL_PATH)"
|
System.map "$(INSTALL_PATH)"
|
||||||
|
|
||||||
chkbss := $(obj-y)
|
|
||||||
chkbss-target := startup.a
|
|
||||||
include $(srctree)/arch/s390/scripts/Makefile.chkbss
|
|
||||||
|
|
|
@ -62,7 +62,3 @@ $(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
|
||||||
OBJCOPYFLAGS_piggy.o := -I binary -O elf64-s390 -B s390:64-bit --rename-section .data=.vmlinux.bin.compressed
|
OBJCOPYFLAGS_piggy.o := -I binary -O elf64-s390 -B s390:64-bit --rename-section .data=.vmlinux.bin.compressed
|
||||||
$(obj)/piggy.o: $(obj)/vmlinux.bin$(suffix-y) FORCE
|
$(obj)/piggy.o: $(obj)/vmlinux.bin$(suffix-y) FORCE
|
||||||
$(call if_changed,objcopy)
|
$(call if_changed,objcopy)
|
||||||
|
|
||||||
chkbss := $(filter-out piggy.o info.o, $(obj-y))
|
|
||||||
chkbss-target := vmlinux.bin
|
|
||||||
include $(srctree)/arch/s390/scripts/Makefile.chkbss
|
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
* gzip declarations
|
* gzip declarations
|
||||||
*/
|
*/
|
||||||
#define STATIC static
|
#define STATIC static
|
||||||
#define STATIC_RW_DATA static __section(.data)
|
|
||||||
|
|
||||||
#undef memset
|
#undef memset
|
||||||
#undef memcpy
|
#undef memcpy
|
||||||
|
|
|
@ -58,6 +58,19 @@ SECTIONS
|
||||||
BOOT_DATA
|
BOOT_DATA
|
||||||
BOOT_DATA_PRESERVED
|
BOOT_DATA_PRESERVED
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the BSS section of the decompressor and not of the decompressed Linux kernel.
|
||||||
|
* It will consume place in the decompressor's image.
|
||||||
|
*/
|
||||||
|
. = ALIGN(8);
|
||||||
|
.bss : {
|
||||||
|
_bss = . ;
|
||||||
|
*(.bss)
|
||||||
|
*(.bss.*)
|
||||||
|
*(COMMON)
|
||||||
|
_ebss = .;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* uncompressed image info used by the decompressor it should match
|
* uncompressed image info used by the decompressor it should match
|
||||||
* struct vmlinux_info. It comes from .vmlinux.info section of
|
* struct vmlinux_info. It comes from .vmlinux.info section of
|
||||||
|
@ -81,15 +94,6 @@ SECTIONS
|
||||||
FILL(0xff);
|
FILL(0xff);
|
||||||
. = ALIGN(4096);
|
. = ALIGN(4096);
|
||||||
}
|
}
|
||||||
. = ALIGN(256);
|
|
||||||
.bss : {
|
|
||||||
_bss = . ;
|
|
||||||
*(.bss)
|
|
||||||
*(.bss.*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(8); /* For convenience during zeroing */
|
|
||||||
_ebss = .;
|
|
||||||
}
|
|
||||||
_end = .;
|
_end = .;
|
||||||
|
|
||||||
/* Sections to be discarded */
|
/* Sections to be discarded */
|
||||||
|
|
|
@ -313,6 +313,12 @@ ENTRY(startup_kdump)
|
||||||
spt 6f-.LPG0(%r13)
|
spt 6f-.LPG0(%r13)
|
||||||
mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13)
|
mvc __LC_LAST_UPDATE_TIMER(8),6f-.LPG0(%r13)
|
||||||
l %r15,.Lstack-.LPG0(%r13)
|
l %r15,.Lstack-.LPG0(%r13)
|
||||||
|
// Clear decompressor's BSS section
|
||||||
|
larl %r2,_bss
|
||||||
|
slgr %r3,%r3
|
||||||
|
larl %r4,_ebss
|
||||||
|
slgr %r4,%r2
|
||||||
|
brasl %r14,memset
|
||||||
brasl %r14,verify_facilities
|
brasl %r14,verify_facilities
|
||||||
brasl %r14,startup_kernel
|
brasl %r14,startup_kernel
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ unsigned long __bootdata(memory_end);
|
||||||
int __bootdata(memory_end_set);
|
int __bootdata(memory_end_set);
|
||||||
int __bootdata(noexec_disabled);
|
int __bootdata(noexec_disabled);
|
||||||
|
|
||||||
int kaslr_enabled __section(.data);
|
int kaslr_enabled;
|
||||||
|
|
||||||
static inline int __diag308(unsigned long subcode, void *addr)
|
static inline int __diag308(unsigned long subcode, void *addr)
|
||||||
{
|
{
|
||||||
|
@ -209,7 +209,7 @@ static void modify_fac_list(char *str)
|
||||||
check_cleared_facilities();
|
check_cleared_facilities();
|
||||||
}
|
}
|
||||||
|
|
||||||
static char command_line_buf[COMMAND_LINE_SIZE] __section(.data);
|
static char command_line_buf[COMMAND_LINE_SIZE];
|
||||||
void parse_boot_command_line(void)
|
void parse_boot_command_line(void)
|
||||||
{
|
{
|
||||||
char *param, *val;
|
char *param, *val;
|
||||||
|
|
|
@ -120,6 +120,9 @@ static void handle_relocs(unsigned long offset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function clears the BSS section of the decompressed Linux kernel and NOT the decompressor's.
|
||||||
|
*/
|
||||||
static void clear_bss_section(void)
|
static void clear_bss_section(void)
|
||||||
{
|
{
|
||||||
memset((void *)vmlinux.default_lma + vmlinux.image_size, 0, vmlinux.bss_size);
|
memset((void *)vmlinux.default_lma + vmlinux.image_size, 0, vmlinux.bss_size);
|
||||||
|
|
|
@ -307,7 +307,7 @@ void machine_power_off(void)
|
||||||
void (*pm_power_off)(void) = machine_power_off;
|
void (*pm_power_off)(void) = machine_power_off;
|
||||||
EXPORT_SYMBOL_GPL(pm_power_off);
|
EXPORT_SYMBOL_GPL(pm_power_off);
|
||||||
|
|
||||||
void *restart_stack __section(.data);
|
void *restart_stack;
|
||||||
|
|
||||||
unsigned long stack_alloc(void)
|
unsigned long stack_alloc(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
|
||||||
|
|
||||||
chkbss-target ?= built-in.a
|
|
||||||
$(obj)/$(chkbss-target): chkbss
|
|
||||||
|
|
||||||
chkbss-files := $(addsuffix .chkbss, $(chkbss))
|
|
||||||
clean-files += $(chkbss-files)
|
|
||||||
|
|
||||||
PHONY += chkbss
|
|
||||||
chkbss: $(addprefix $(obj)/, $(chkbss-files))
|
|
||||||
|
|
||||||
quiet_cmd_chkbss = CHKBSS $<
|
|
||||||
cmd_chkbss = \
|
|
||||||
if ! $(OBJSIZE) --common $< | $(AWK) 'END { if ($$3) exit 1 }'; then \
|
|
||||||
echo "error: $< .bss section is not empty" >&2; exit 1; \
|
|
||||||
fi; \
|
|
||||||
touch $@;
|
|
||||||
|
|
||||||
$(obj)/%.o.chkbss: $(obj)/%.o
|
|
||||||
$(call cmd,chkbss)
|
|
Loading…
Add table
Add a link
Reference in a new issue