diff --git a/repos/base-foc/patches/0018-L4-enable-gcc_10.patch b/repos/base-foc/patches/0018-L4-enable-gcc_10.patch new file mode 100644 index 0000000000..02be589c40 --- /dev/null +++ b/repos/base-foc/patches/0018-L4-enable-gcc_10.patch @@ -0,0 +1,15 @@ +L4: enable GCC 10 + +diff --git a/l4/mk/Makeconf b/l4/mk/Makeconf +index eb59b51..a7b5955 100644 +--- a/l4/mk/Makeconf ++++ b/l4/mk/Makeconf +@@ -52,7 +52,7 @@ L4_KIP_OFFS_SYS_DEBUGGER = 0x900 + L4_STACK_ADDR ?= $(L4_STACK_ADDR_$(ARCH)) + L4_STACK_SIZE ?= $(if $(L4_STACK_SIZE_MAIN_THREAD),$(L4_STACK_SIZE_MAIN_THREAD),0x8000) + +-CC_WHITELIST-gcc := 4.7 4.8 4.9 5 6 7 8 9 ++CC_WHITELIST-gcc := 4.7 4.8 4.9 5 6 7 8 9 10 + CC_WHITELIST-clang := 3.5 3.6 3.7 3.8 3.9 + + # This is quite bad: There is no other chance to disable the page-alignedment diff --git a/repos/base-foc/patches/0019-Bootstrap-do-not-depend-on-any-libstdcxx-feature.patch b/repos/base-foc/patches/0019-Bootstrap-do-not-depend-on-any-libstdcxx-feature.patch new file mode 100644 index 0000000000..48c9d047a4 --- /dev/null +++ b/repos/base-foc/patches/0019-Bootstrap-do-not-depend-on-any-libstdcxx-feature.patch @@ -0,0 +1,162 @@ +From dd8842dbdae2bb11d4f726f8a49a6ecb4d5d6870 Mon Sep 17 00:00:00 2001 + +From: Frank Mehnert + +Subject: [PATCH] Do not depend on any libstdc++ feature + +The libc_minimal library does not provide support for libstdc++ so use +the normal libc headers instead and do not use any 'std' functions. + +Change-Id: I9b4e04ddba0e3f366550265a2c30ef0f37df5534 +--- + server/src/boot_modules.cc | 2 +- + server/src/multiboot2.cc | 24 ++++++++++++------------ + server/src/platform/exynos.cc | 2 +- + server/src/platform/x86_pc-base.h | 4 ++-- + server/src/platform_common.cc | 2 +- + server/src/support.h | 4 ++-- + 6 files changed, 19 insertions(+), 19 deletions(-) + +diff --git a/server/src/boot_modules.cc b/server/src/boot_modules.cc +index 2446967..6100749 100644 +--- a/server/src/boot_modules.cc ++++ b/server/src/boot_modules.cc +@@ -1,6 +1,6 @@ + #include "support.h" + #include "panic.h" +-#include ++#include + #include "mod_info.h" + #ifdef COMPRESS + #include "uncompress.h" +diff --git a/server/src/multiboot2.cc b/server/src/multiboot2.cc +index c7255a3..17a2fdd 100644 +--- a/server/src/multiboot2.cc ++++ b/server/src/multiboot2.cc +@@ -18,7 +18,7 @@ + #include + #include + +-#include ++#include + + #include + #include +@@ -62,7 +62,7 @@ public: + // by some other tag type) + void process_modules(l4util_mb2_tag_t *tag) + { +- std::size_t cnt = 0; ++ size_t cnt = 0; + + while (tag->type == L4UTIL_MB2_MODULE_INFO_TAG) + { +@@ -146,8 +146,8 @@ public: + void finalize() + { + assert(sizeof(_mbi) <= _size); +- std::memcpy(_buf, &_mbi, sizeof(_mbi)); +- std::memset(_buf + sizeof(_mbi), 0, _size - sizeof(_mbi)); ++ memcpy(_buf, &_mbi, sizeof(_mbi)); ++ memset(_buf + sizeof(_mbi), 0, _size - sizeof(_mbi)); + } + + private: +@@ -157,25 +157,25 @@ private: + { + char buf[1024]; + +- std::size_t size = l4_round_size(tag->size, L4UTIL_MB2_TAG_ALIGN_SHIFT); ++ size_t size = l4_round_size(tag->size, L4UTIL_MB2_TAG_ALIGN_SHIFT); + l4util_mb2_tag_t *dst_tag = + reinterpret_cast(end() - size); + char *_src = reinterpret_cast(tag); + + while (size) + { +- std::size_t copied = cxx::min(sizeof(buf), size); ++ size_t copied = cxx::min(sizeof(buf), size); + char *_dst = end() - copied; +- std::memcpy(buf, _src, copied); +- std::memmove(_src, _src + copied, (end() - _src) - copied); +- std::memcpy(_dst, buf, copied); ++ memcpy(buf, _src, copied); ++ memmove(_src, _src + copied, (end() - _src) - copied); ++ memcpy(_dst, buf, copied); + size -= copied; + } + + return dst_tag; + } + +- void reserve_from_end(std::size_t size) ++ void reserve_from_end(size_t size) + { + size = l4_round_size(size, L4UTIL_MB2_TAG_ALIGN_SHIFT); + assert(_size >= size); +@@ -183,8 +183,8 @@ private: + } + + char *_buf; +- std::size_t _size; +- const std::size_t _total_size; ++ size_t _size; ++ const size_t _total_size; + + l4util_mb_info_t _mbi; + }; +diff --git a/server/src/platform/exynos.cc b/server/src/platform/exynos.cc +index d10d70d..bcd6d02 100644 +--- a/server/src/platform/exynos.cc ++++ b/server/src/platform/exynos.cc +@@ -17,7 +17,7 @@ + #include "support.h" + #include + +-#include ++#include + + namespace { + class Platform_arm_exynos : public Platform_single_region_ram +diff --git a/server/src/platform/x86_pc-base.h b/server/src/platform/x86_pc-base.h +index d5d53bf..fe0e0dd 100644 +--- a/server/src/platform/x86_pc-base.h ++++ b/server/src/platform/x86_pc-base.h +@@ -12,8 +12,8 @@ + #include + #include + +-#include +-#include ++#include ++#include + + /** VGA console output */ + +diff --git a/server/src/platform_common.cc b/server/src/platform_common.cc +index 0503802..26ae0a9 100644 +--- a/server/src/platform_common.cc ++++ b/server/src/platform_common.cc +@@ -1,6 +1,6 @@ + #include "support.h" + #include +-#include ++#include + + #ifdef RAM_SIZE_MB + +diff --git a/server/src/support.h b/server/src/support.h +index 472e40e..20d2c04 100644 +--- a/server/src/support.h ++++ b/server/src/support.h +@@ -21,8 +21,8 @@ + #include + #include + #include "region.h" +-#include +-#include ++#include ++#include + + L4::Uart *uart(); + void set_stdio_uart(L4::Uart *uart); diff --git a/repos/base-foc/patches/0020-Bootstrap-fix-amd64-build-with-binutils-2_32.patch b/repos/base-foc/patches/0020-Bootstrap-fix-amd64-build-with-binutils-2_32.patch new file mode 100644 index 0000000000..b2d1b39d1d --- /dev/null +++ b/repos/base-foc/patches/0020-Bootstrap-fix-amd64-build-with-binutils-2_32.patch @@ -0,0 +1,25 @@ +From a4d6d7877c0050308a9c28308fa8a233c86902e1 Mon Sep 17 00:00:00 2001 +From: Alexander Warg +Date: Mon, 29 Jul 2019 00:00:00 +0000 +Subject: [PATCH] Fix amd64 build with binutils 2.32+ + +We have to make sure that a linker script is not given twice to ld. + +Change-Id: Ibd0f8972083f665fb7824df2a65b319183d7b1e7 +--- + server/src/Make.rules | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/server/src/Make.rules b/server/src/Make.rules +index 43e8775..c1bbfec 100644 +--- a/server/src/Make.rules ++++ b/server/src/Make.rules +@@ -439,7 +439,7 @@ $(OBJ_DIR)/ARCH-amd64/libc32/OBJ-$(ARCH)_$(CPU)/libc32.a: FORCE + bootstrap32.elf: $(OBJ32) bootstrap32.bin $(SRC_DIR)/ARCH-amd64/boot32/bootstrap32.ld $(OBJ_DIR)/ARCH-amd64/libc32/OBJ-$(ARCH)_$(CPU)/libc32.a + @$(LINK_MESSAGE) + $(VERBOSE)$(CC32) -o $@ -nostdlib -static \ +- -Wl,-T,$(SRC_DIR)/ARCH-amd64/boot32/bootstrap32.ld,--gc-sections $^ -lgcc ++ -Wl,-T,$(SRC_DIR)/ARCH-amd64/boot32/bootstrap32.ld,--gc-sections $(filter-out %/bootstrap32.ld,$^) -lgcc + $(VERBOSE)chmod 755 $@ + + bootstrap: bootstrap32.elf diff --git a/repos/base-foc/patches/0021-FOC-enable-gcc_10.patch b/repos/base-foc/patches/0021-FOC-enable-gcc_10.patch new file mode 100644 index 0000000000..b1eb44487a --- /dev/null +++ b/repos/base-foc/patches/0021-FOC-enable-gcc_10.patch @@ -0,0 +1,15 @@ +FOC: enable GCC 10 + +diff --git a/src/Makeconf b/src/Makeconf +index de5b656..7660daa 100644 +--- a/src/Makeconf ++++ b/src/Makeconf +@@ -244,7 +244,7 @@ ifeq ($(CC_TYPE),gcc) + endif + + +-CC_WHITELIST-gcc := 4.7 4.8 4.9 5 6 7 8 9 ++CC_WHITELIST-gcc := 4.7 4.8 4.9 5 6 7 8 9 10 + CC_WHITELIST-clang := 3.6 3.7 3.8 3.9 4.0 5.0 6.0 7.0 8.0 9.0 + CC_WHITELIST := $(CC_WHITELIST-$(CC_TYPE)) + diff --git a/repos/base-foc/patches/0022-FOC-amd64-split-_syscall_entry-into-code-and-data.patch b/repos/base-foc/patches/0022-FOC-amd64-split-_syscall_entry-into-code-and-data.patch new file mode 100644 index 0000000000..77c421be81 --- /dev/null +++ b/repos/base-foc/patches/0022-FOC-amd64-split-_syscall_entry-into-code-and-data.patch @@ -0,0 +1,234 @@ +From f29031cdbe8cebf6c39d02a72dd50c736cec3a69 Mon Sep 17 00:00:00 2001 + +From: =?UTF-8?q?Jakub=20Jerm=C3=A1=C5=99?= + +Subject: [PATCH] amd64: Split _syscall_entry into code and data + +This change makes the entire syscall entry table smaller, sparing 32 +bytes per a statically configured CPU. Note that some padding is still +used to achieve cacheline alignment of the per-CPU entries of the data +part of the table. + +Furthemore, by moving the two data members into a data section and +allowing to modify the handler offset from JDB only, the amd64 kernel is +easier to make completely W^X in the future. The handler entry offset +remains a part of the jump instruction opcode (there is no data +indirection) and JDB is enhanced to be able to patch it when needed. + +Change-Id: I22b91f9fd2b108d99e3ceea6611a15ab3db26bb6 + +Edit for Genode: UX changes not included because of more dependencies +--- + src/jdb/ia32/jdb_trace_set-ia32-ux.cpp | 4 +- + src/kern/ia32/64/cpu-64.cpp | 31 +++++------------- + src/kern/ia32/64/entry.S | 29 +++++++++++++++++ + src/kern/ia32/64/syscall_entry.cpp | 54 +++++--------------------------- + 4 files changed, 48 insertions(+), 70 deletions(-) + +diff --git a/src/jdb/ia32/jdb_trace_set-ia32-ux.cpp b/src/jdb/ia32/jdb_trace_set-ia32-ux.cpp +index ec23322..0a2f309 100644 +--- a/src/jdb/ia32/jdb_trace_set-ia32-ux.cpp ++++ b/src/jdb/ia32/jdb_trace_set-ia32-ux.cpp +@@ -39,7 +39,7 @@ Jdb_set_trace::set_ipc_vector() + + Idt::set_entry(0x30, (Address) int30_entry, true); + Jdb::on_each_cpu([fast_entry](Cpu_number cpu){ +- Cpu::cpus.cpu(cpu).set_fast_entry(fast_entry); ++ //Cpu::cpus.cpu(cpu).set_fast_entry(fast_entry); + }); + + if (Jdb_ipc_trace::_trace) +@@ -98,7 +98,7 @@ struct Jdb_ipc_log_pm : Pm_object + else + fast_entry = entry_sys_fast_ipc_c; + +- Cpu::cpus.cpu(cpu).set_fast_entry(fast_entry); ++ //Cpu::cpus.cpu(cpu).set_fast_entry(fast_entry); + } + + void pm_on_suspend(Cpu_number) override {} +diff --git a/src/kern/ia32/64/cpu-64.cpp b/src/kern/ia32/64/cpu-64.cpp +index 974c677..d18ad16 100644 +--- a/src/kern/ia32/64/cpu-64.cpp ++++ b/src/kern/ia32/64/cpu-64.cpp +@@ -4,7 +4,8 @@ INTERFACE [amd64 && !kernel_isolation]: + + EXTENSION class Cpu + { +- static Per_cpu_array _syscall_entry; ++ static Per_cpu_array ++ _syscall_entry_data asm("syscall_entry_data"); + }; + + +@@ -13,14 +14,7 @@ IMPLEMENTATION[amd64 && !kernel_isolation]: + #include "mem_layout.h" + #include "tss.h" + +-Per_cpu_array Cpu::_syscall_entry; +- +-PUBLIC +-void +-Cpu::set_fast_entry(void (*func)()) +-{ +- _syscall_entry[id()].set_entry(func); +-} ++Per_cpu_array Cpu::_syscall_entry_data; + + IMPLEMENT inline NEEDS["tss.h"] + Address volatile & +@@ -31,11 +25,13 @@ PUBLIC inline + void + Cpu::setup_sysenter() + { ++ extern Per_cpu_array syscall_entry_text; ++ + wrmsr(0, GDT_CODE_KERNEL | ((GDT_CODE_USER32 | 3) << 16), MSR_STAR); +- wrmsr((Unsigned64)&_syscall_entry[id()], MSR_LSTAR); +- wrmsr((Unsigned64)&_syscall_entry[id()], MSR_CSTAR); ++ wrmsr((Unsigned64)&syscall_entry_text[id()], MSR_LSTAR); ++ wrmsr((Unsigned64)&syscall_entry_text[id()], MSR_CSTAR); + wrmsr(~0U, MSR_SFMASK); +- _syscall_entry[id()].set_rsp((Address)&kernel_sp()); ++ _syscall_entry_data[id()].set_rsp((Address)&kernel_sp()); + } + + IMPLEMENTATION[amd64 && kernel_isolation]: +@@ -43,16 +39,6 @@ IMPLEMENTATION[amd64 && kernel_isolation]: + #include "mem_layout.h" + #include "tss.h" + +-PUBLIC +-void +-Cpu::set_fast_entry(void (*func)()) +-{ +- extern char const syscall_entry_code[]; +- extern char const syscall_entry_reloc[]; +- auto ofs = syscall_entry_reloc - syscall_entry_code + 3; // 3 byte movebas +- *reinterpret_cast(Mem_layout::Mem_layout::Kentry_cpu_page + ofs + 0xa0) = (Signed32)(Signed64)func; +-} +- + PUBLIC inline + void + Cpu::setup_sysenter() const +@@ -78,7 +64,6 @@ Cpu::init_sysenter() + { + setup_sysenter(); + wrmsr(rdmsr(MSR_EFER) | 1, MSR_EFER); +- set_fast_entry(entry_sys_fast_ipc_c); + } + + +diff --git a/src/kern/ia32/64/entry.S b/src/kern/ia32/64/entry.S +index 1cb8137..ed5a04c 100644 +--- a/src/kern/ia32/64/entry.S ++++ b/src/kern/ia32/64/entry.S +@@ -372,7 +372,36 @@ entry_\name: + jmp all_syscalls + .endm + ++#ifndef CONFIG_KERNEL_ISOLATION ++#ifdef CONFIG_MP ++MAX_NUM_CPUS = CONFIG_MP_MAX_CPUS ++#else ++MAX_NUM_CPUS = 1 ++#endif ++ ++#define SYSCALL_ENTRY_DATA_SIZE 64 ++#define SYSCALL_ENTRY_TEXT_SIZE (0f - 0b) ++#define SYSCALL_ENTRY_OFFSET ((0b - syscall_entry_text) / SYSCALL_ENTRY_TEXT_SIZE) ++#define SYSCALL_ENTRY_DATA (syscall_entry_data + SYSCALL_ENTRY_OFFSET * SYSCALL_ENTRY_DATA_SIZE) ++#define KERN_SP (SYSCALL_ENTRY_DATA + 0) ++#define USER_SP (SYSCALL_ENTRY_DATA + 8) + .section ".entry.text.syscalls", "ax", @progbits ++ .global syscall_entry_text ++ .align 64 ++syscall_entry_text: ++.rept MAX_NUM_CPUS ++0: ++ mov %rsp, USER_SP(%rip) ++ mov KERN_SP(%rip), %rsp ++ mov (%rsp), %rsp ++ pushq $GDT_DATA_USER | 3 ++ pushq USER_SP(%rip) ++ jmp entry_sys_fast_ipc_c ++ .align 32 ++0: ++.endr ++#endif /* !CONFIG_KERNEL_ISOLATION */ ++ + .p2align 4 + .type all_syscalls,@function + all_syscalls: +diff --git a/src/kern/ia32/64/syscall_entry.cpp b/src/kern/ia32/64/syscall_entry.cpp +index b03d1ad..3dd7db3 100644 +--- a/src/kern/ia32/64/syscall_entry.cpp ++++ b/src/kern/ia32/64/syscall_entry.cpp +@@ -2,58 +2,22 @@ INTERFACE [amd64]: + + #include "types.h" + +-class Syscall_entry ++class Syscall_entry_data + { +-private: +- template +- struct Mem_insn +- { +- Unsigned32 _insn:INSN_LEN * 8; +- Unsigned32 _offset; +- Mem_insn(Unsigned32 insn, void *mem) +- : _insn(insn), +- _offset((Address)mem - (Address)(&_offset + 1)) +- {} +- } __attribute__((packed)); +- +- Mem_insn<3> _mov_rsp_user_sp; +- Mem_insn<3> _mov_kern_sp_rsp; +- Unsigned32 _mov_rsp_rsp; +- Unsigned8 _push_ss, _ss_value; +- Mem_insn<2> _push_user_rsp; +- Unsigned8 _jmp; +- Signed32 _entry_offset; +- Unsigned8 _pading[33]; // pad to the next 64 byte boundary +- Unsigned64 _kern_sp; +- Unsigned64 _user_sp; +-} __attribute__((packed, aligned(64))); ++ Unsigned64 _kern_sp = 0; ++ Unsigned64 _user_sp = 0; ++} __attribute__((packed, aligned(64))); // Enforce cacheline alignment + ++struct Syscall_entry_text ++{ ++ char _res[32]; // Keep this in sync with code in syscall_entry_text! ++} __attribute__((packed, aligned(32))); + + IMPLEMENTATION [amd64]: + +-#include "config_gdt.h" +- +-PUBLIC inline NEEDS["config_gdt.h"] +-Syscall_entry::Syscall_entry() +-: /* mov %rsp, _user_sp(%rip) */ _mov_rsp_user_sp(0x258948, &_user_sp), +- /* mov _kern_sp(%rip), %rsp */ _mov_kern_sp_rsp(0x258b48, &_kern_sp), +- /* mov (%rsp), %rsp */ _mov_rsp_rsp(0x24248b48), +- /* pushq GDT_DATA_USER | 3 */ _push_ss(0x6a), _ss_value(GDT_DATA_USER | 3), +- /* pushq _user_sp(%rip) */ _push_user_rsp(0x35ff, &_user_sp), +- /* jmp *_entry_offset */ _jmp(0xe9) +-{} +- +-PUBLIC inline +-void +-Syscall_entry::set_entry(void (*func)(void)) +-{ +- _entry_offset = (Address)func +- - ((Address)&_entry_offset + sizeof(_entry_offset)); +-} +- + PUBLIC inline + void +-Syscall_entry::set_rsp(Address rsp) ++Syscall_entry_data::set_rsp(Address rsp) + { + _kern_sp = rsp; + } diff --git a/repos/base-foc/patches/0023-FOC-arm-link-bootstrap-as-et_rel.patch b/repos/base-foc/patches/0023-FOC-arm-link-bootstrap-as-et_rel.patch new file mode 100644 index 0000000000..a1f3adc942 --- /dev/null +++ b/repos/base-foc/patches/0023-FOC-arm-link-bootstrap-as-et_rel.patch @@ -0,0 +1,94 @@ +ARM: link bootstrap as ET_REL not ET_EXEC + +From: Frank Mehnert + +Support for linking of ET_EXEC section was deprecated in binutils 2.35 +and dropped in binutils 2.36. + +Instead, extract the raw section of the fully linked bootstrap object +and create a relocatable object which can be linked to the kernel. The +required symbols for the linker are extracted separately. + +Fixes ticket #CD-301. + +Change-Id: I0cdc2aacb5dbd01677d93e2bb1103940ac60e848 + +Edit: fixed merge error for Genode +--- + src/Makeconf.arm | 6 ++++++ + src/kern/arm/Makerules.KERNEL | 20 ++++++++++++++++---- + src/kernel.arm.ld | 4 ++-- + 3 files changed, 24 insertions(+), 6 deletions(-) + +diff --git a/src/Makeconf.arm b/src/Makeconf.arm +index 7c66a8d..89b9e7d 100644 +--- a/src/Makeconf.arm ++++ b/src/Makeconf.arm +@@ -31,3 +31,9 @@ LDFLAGS += $(LDFLAGS-y) + LD_EMULATION_CHOICE-$(CONFIG_BIT32) := armelf armelf_linux_eabi armelf_fbsd + LD_EMULATION_CHOICE-$(CONFIG_BIT64) := aarch64linux aarch64elf + LD_EMULATION_CHOICE := $(LD_EMULATION_CHOICE-y) ++OBJCOPY_BFDNAME-$(CONFIG_BIT32) := elf32-littlearm ++OBJCOPY_BFDNAME-$(CONFIG_BIT64) := elf64-littleaarch64 ++OBJCOPY_BFDNAME := $(OBJCOPY_BFDNAME-y) ++OBJCOPY_BFDARCH-$(CONFIG_BIT32) := arm ++OBJCOPY_BFDARCH-$(CONFIG_BIT64) := aarch64 ++OBJCOPY_BFDARCH := $(OBJCOPY_BFDARCH-y) +diff --git a/src/kern/arm/Makerules.KERNEL b/src/kern/arm/Makerules.KERNEL +index d706444..fae3013 100644 +--- a/src/kern/arm/Makerules.KERNEL ++++ b/src/kern/arm/Makerules.KERNEL +@@ -21,16 +21,28 @@ bootstrap_ldflags += -T$(bootstrap_lds) + + bootstrap_export = _start start_of_loader end_of_bootstrap_info + bootstrap_strip = --strip-all $(addprefix --keep-symbol=,$(bootstrap_export)) ++bootstrap_syms = end_of_bootstrap_info|_start|start_of_loader ++bootstrap_sed = 's/^0*([0-9a-f]*) [a-zA-Z] ($(bootstrap_syms))/\2 = 0x\1;/p' + + bootstrap.$(KERNEL).pre.o: $(OBJ_BOOTSTRAP) $(LIBGCC) $(bootstrap_lds) + $(LINK_MESSAGE) + $(VERBOSE)$(LD) $(bootstrap_ldflags) $(OBJ_BOOTSTRAP) $(LIBGCC) -o $@ + +-bootstrap.$(KERNEL).o: bootstrap.$(KERNEL).pre.o +- $(LINK_MESSAGE) +- $(VERBOSE)$(OBJCOPY) $(bootstrap_strip) $< $@ ++bootstrap.$(KERNEL).bin: bootstrap.$(KERNEL).pre.o ++ $(COMP_MESSAGE) ++ $(VERBOSE)$(OBJCOPY) -O binary --only-section=.bootstrap.text $< $@ ++ ++bootstrap.$(KERNEL).rel: bootstrap.$(KERNEL).bin ++ $(COMP_MESSAGE) ++ $(VERBOSE)$(OBJCOPY) -I binary -O $(OBJCOPY_BFDNAME) -B $(OBJCOPY_BFDARCH) \ ++ --rename-section .data=.bootstrap.text $< $@ ++ ++# The linker will treat this file as linker script. ++bootstrap.$(KERNEL).sym: bootstrap.$(KERNEL).pre.o ++ $(COMP_MESSAGE) ++ $(VERBOSE)$(NM) $< | sed -n -E $(bootstrap_sed) > $@ + +-$(KERNEL).image: kernel.arm.lds $(CRT0) bootstrap.$(KERNEL).o $(OBJ_KERNEL_noboot) $(JDB) $(LIBK) $(KERNEL_EXTRA_LIBS) $(LIBDISASM) $(ABI) libdrivers.a $(LIBUART) $(CXXLIB) $(MINILIBC) $(LIBGCC) $(MINILIBC) libgluedriverslibc.a ++$(KERNEL).image: kernel.arm.lds $(CRT0) bootstrap.$(KERNEL).rel bootstrap.$(KERNEL).sym $(OBJ_KERNEL_noboot) $(JDB) $(LIBK) $(KERNEL_EXTRA_LIBS) $(LIBDISASM) $(ABI) libdrivers.a $(LIBUART) $(CXXLIB) $(MINILIBC) $(LIBGCC) $(MINILIBC) libgluedriverslibc.a + $(LINK_MESSAGE) + $(VERBOSE)$(LD) $(LDFLAGS) -m $(LD_EMULATION) $(KERNEL_LDFLAGS) -N -defsym kernel_load_addr=$(CONFIG_KERNEL_LOAD_ADDR) \ + -T $< -o $@ $(filter-out $<,$+) +diff --git a/src/kernel.arm.ld b/src/kernel.arm.ld +index 1e3ec75..86c16b3 100644 +--- a/src/kernel.arm.ld ++++ b/src/kernel.arm.ld +@@ -61,14 +61,14 @@ SECTIONS { + + . = kernel_load_addr + 0x1000; + +- .text : { ++ .text kernel_load_addr + 0x1000 : { + MWORD(_start_kernel) + MWORD(my_kernel_info_page) + KEEP(*(.bootstrap.info)) + ASSERT (ABSOLUTE(.) == end_of_bootstrap_info, "invalid size of bootstrap.info"); + + . = ABSOLUTE(start_of_loader); +- *(.bootstrap.text) ++ KEEP(*(.bootstrap.text)) + } :bstrap + + . = ALIGN(4K); diff --git a/repos/base-foc/ports/foc.hash b/repos/base-foc/ports/foc.hash index e2947d29c1..9553e9dc52 100644 --- a/repos/base-foc/ports/foc.hash +++ b/repos/base-foc/ports/foc.hash @@ -1 +1 @@ -2e8cbb44d4c009238d96b66a9fc085e038f22e61 +abe2de76835f33297ca4e4ac687e69bc04f83dc5 diff --git a/repos/base-foc/ports/foc.port b/repos/base-foc/ports/foc.port index 81496991b2..f77ab1b37b 100644 --- a/repos/base-foc/ports/foc.port +++ b/repos/base-foc/ports/foc.port @@ -37,5 +37,11 @@ PATCH_OPT(patches/0014-Always-enable-user-mode-access-for-performance-monit.patc PATCH_OPT(patches/0015-VMX-disable-event-injection-if-requested-by-VMM.patch) := -p3 -d${DIR(foc)} PATCH_OPT(patches/0016-svm-provide-cr0-to-guest-if-np-enabled.patch) := -p3 -d${DIR(foc)} PATCH_OPT(patches/0017-svm-avoid-forceful-exit-on-task-switch.patch) := -p3 -d${DIR(foc)} +PATCH_OPT(patches/0018-L4-enable-gcc_10.patch) := -p2 -d${DIR(mk)} +PATCH_OPT(patches/0019-Bootstrap-do-not-depend-on-any-libstdcxx-feature.patch) := -p1 -d${DIR(bootstrap)} +PATCH_OPT(patches/0020-Bootstrap-fix-amd64-build-with-binutils-2_32.patch) := -p1 -d${DIR(bootstrap)} +PATCH_OPT(patches/0021-FOC-enable-gcc_10.patch) := -p1 -d${DIR(foc)} +PATCH_OPT(patches/0022-FOC-amd64-split-_syscall_entry-into-code-and-data.patch) := -p1 -d${DIR(foc)} +PATCH_OPT(patches/0023-FOC-arm-link-bootstrap-as-et_rel.patch) := -p1 -d${DIR(foc)} $(call check_tool,gawk)