From dc52da281942aa2c7f009eac1ece4f0f10e451cb Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Fri, 8 Oct 2021 12:46:23 -0700 Subject: [PATCH] kern: simplify rela-in-bss impl --- mesosphere/build_mesosphere.py | 31 +++++-------------------------- mesosphere/kernel/Makefile | 2 +- mesosphere/kernel/kernel.ld | 16 +++++++--------- 3 files changed, 13 insertions(+), 36 deletions(-) diff --git a/mesosphere/build_mesosphere.py b/mesosphere/build_mesosphere.py index b64fba912..be51da4f0 100644 --- a/mesosphere/build_mesosphere.py +++ b/mesosphere/build_mesosphere.py @@ -9,23 +9,6 @@ def align_up(val, algn): val += algn - 1 return val - (val % algn) -def find_rela(kernel, dynamic): - rela_offset, rela_size = (None, None) - while True: - dyn_type, dyn_val = up('= bss_start) - bss_size = bss_end - bss_start assert (bss_end == kernel_end) - assert (kernel_end <= len(kernel)) - rela_offset, rela_size = find_rela(kernel, dynamic) - assert (rela_size == len(kernel) - kernel_end) - assert (bss_start <= rela_offset and rela_offset + rela_size <= bss_end) - assert (kernel[bss_start:bss_end] == (b'\x00'* bss_size)) - - kernel = kernel[:rela_offset] + kernel[bss_end:] + (b'\x00' * (bss_size - (rela_size + (rela_offset - bss_start)))) + assert (len(kernel) <= kernel_end) + if len(kernel) < kernel_end: + kernel += b'\x00' * (kernel_end - len(kernel)) assert (kernel_end == len(kernel)) embedded_ini = b'' diff --git a/mesosphere/kernel/Makefile b/mesosphere/kernel/Makefile index d5e3deb68..b73a399b9 100644 --- a/mesosphere/kernel/Makefile +++ b/mesosphere/kernel/Makefile @@ -102,7 +102,7 @@ DEPENDS := $(OFILES:.o=.d) # main targets #--------------------------------------------------------------------------------- $(OUTPUT).bin : $(OUTPUT).elf - $(OBJCOPY) -S -O binary --set-section-flags .bss=alloc,load,contents $< $@ + $(OBJCOPY) -S -O binary $< $@ @echo built ... $(notdir $@) $(OUTPUT).elf : $(OFILES) diff --git a/mesosphere/kernel/kernel.ld b/mesosphere/kernel/kernel.ld index 8d7da0ff0..efbc1c1e9 100644 --- a/mesosphere/kernel/kernel.ld +++ b/mesosphere/kernel/kernel.ld @@ -154,16 +154,14 @@ SECTIONS __bss_start__ = .; - OVERLAY : NOCROSSREFS { - .bss { - *(.dynbss) - *(.bss .bss.* .gnu.linkonce.b.*) - *(COMMON) - . = ALIGN(0x1000); - } - .rela.dyn { *(.rela.*) } - } :data + .rela.dyn : { *(.rela.*) } :data + .bss ADDR(.rela.dyn) (NOLOAD) : { + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + . = ALIGN(0x1000); + } __bss_end__ = .;