foc: fix errors with gcc 10 and binutils 2.36

Fixes #4118
This commit is contained in:
Christian Prochaska 2021-04-15 05:45:47 +02:00 committed by Christian Helmuth
parent eb94f03416
commit c7b2314d23
8 changed files with 552 additions and 1 deletions

View File

@ -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

View File

@ -0,0 +1,162 @@
From dd8842dbdae2bb11d4f726f8a49a6ecb4d5d6870 Mon Sep 17 00:00:00 2001
From: Frank Mehnert <frank.mehnert@kernkonzept.com>
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 <cassert>
+#include <assert.h>
#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 <l4/sys/consts.h>
#include <l4/cxx/minmax>
-#include <cstring>
+#include <string.h>
#include <assert.h>
#include <stddef.h>
@@ -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<l4util_mb2_tag_t *>(end() - size);
char *_src = reinterpret_cast<char *>(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 <l4/drivers/uart_s3c2410.h>
-#include <cstdio>
+#include <stdio.h>
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 <l4/util/port_io.h>
#include <l4/cxx/static_container>
-#include <cassert>
-#include <cstdio>
+#include <assert.h>
+#include <stdio.h>
/** 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 <l4/cxx/minmax>
-#include <cassert>
+#include <assert.h>
#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 <l4/util/mb_info.h>
#include <stdio.h>
#include "region.h"
-#include <cstring>
-#include <cstdlib>
+#include <string.h>
+#include <stdlib.h>
L4::Uart *uart();
void set_stdio_uart(L4::Uart *uart);

View File

@ -0,0 +1,25 @@
From a4d6d7877c0050308a9c28308fa8a233c86902e1 Mon Sep 17 00:00:00 2001
From: Alexander Warg <alexander.warg@kernkonzept.com>
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

View File

@ -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))

View File

@ -0,0 +1,234 @@
From f29031cdbe8cebf6c39d02a72dd50c736cec3a69 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Jerm=C3=A1=C5=99?= <jakub.jermar@kernkonzept.com>
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> _syscall_entry;
+ static Per_cpu_array<Syscall_entry_data>
+ _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<Syscall_entry> Cpu::_syscall_entry;
-
-PUBLIC
-void
-Cpu::set_fast_entry(void (*func)())
-{
- _syscall_entry[id()].set_entry(func);
-}
+Per_cpu_array<Syscall_entry_data> 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> 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<Signed32 *>(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<int INSN_LEN>
- 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;
}

View File

@ -0,0 +1,94 @@
ARM: link bootstrap as ET_REL not ET_EXEC
From: Frank Mehnert <frank.mehnert@kernkonzept.com>
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);

View File

@ -1 +1 @@
2e8cbb44d4c009238d96b66a9fc085e038f22e61
abe2de76835f33297ca4e4ac687e69bc04f83dc5

View File

@ -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)