mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-25 00:11:07 +00:00
1887222b53
Issue #768
82 lines
3.5 KiB
Plaintext
82 lines
3.5 KiB
Plaintext
This directory contains patches for the OKL4 kernel version 2.1.1-patch.9.
|
|
|
|
:'syscall_pic.patch':
|
|
|
|
The original distribution of the OKL4 kernel comes with x86 syscall bindings
|
|
that use absolute addressing modes. Therefore, code using L4 syscalls
|
|
cannot be compiled as position-independent code (gcc option '-fPIC').
|
|
Unfortunately, shared libraries must be compiled as position independent
|
|
because the location of such a library's text segment is not known at
|
|
compile time. Consequently, L4 syscalls cannot be issued by shared
|
|
libraries, which is a severe limitation. The patch fixes the problem
|
|
by changing all L4 syscall bindings by removing PIC-incompatible
|
|
addressing modes. It does not affect the functionality of the kernel.
|
|
|
|
:'eabi_build.patch':
|
|
|
|
The build system of the orignal OKL4 distribution is not prepared to
|
|
compile ARM EABI binaries as generated by modern tool chains such as the
|
|
Codesourcery GCC. The patch applies the needed changes to the OKL4 build
|
|
infrastructure.
|
|
|
|
:'reply_tid.patch':
|
|
|
|
The original OKL4 kernel does not report the global thread ID of the
|
|
sender to the receiver of an IPC. Instead, the so called "threadhandle"
|
|
of the sender thread is provided. This value is the KTCB index of the
|
|
thread. It can be used as IPC destination when sending the reply but
|
|
is otherwise meaningless to the userland. However, this becomes a
|
|
problem when handing page faults because the page-fault handler is not
|
|
able to identify the faulting thread - only the faulting space. There
|
|
is no way for the pager to lookup the thread context of the faulting
|
|
thread with the information of the page-fault message. The patch changes
|
|
OKL4 such that the global thread ID of the sender is provided to the
|
|
receiver.
|
|
|
|
:'kdb_reboot.patch':
|
|
|
|
This patch enables machine reboot from the kernel debugger.
|
|
|
|
:'char_bit.patch':
|
|
|
|
This patch resolves the conflict of definitions of 'CHAR_BIT' between
|
|
libc and the OKL4 headers. 'CHAR_BIT' is normally defined by the libc
|
|
('limits.h') but it also appears in OKL4's 'types.h'. The patch relaxes
|
|
the conflict by making 'CHAR_BIT' an enum value rather then a '#define'.
|
|
This way, OKL4's headers included into a dedicated 'Okl4' C++ namespace
|
|
(as done by Genode) will result in a 'Okl4::CHAR_BIT' name, not causing
|
|
trouble with libc headers included by the same compilation unit.
|
|
|
|
:'gdt_init.patch':
|
|
|
|
This patch fixes a off-by-one bug that prevents OKL4 from running on
|
|
VirtualBox with VT-x disabled. The original kernel calculates the
|
|
last segment address in a wrong way, causing a conflict between
|
|
GDT and TSS. As a result, VirtualBox stops with a 'GURU_MEDITATION'
|
|
error.
|
|
|
|
:'invalid_opcode_exception_ipc.patch':
|
|
|
|
When an invalid opcode gets executed, OKL4 switches to the kernel debugger
|
|
console instead of sending an exception IPC to the userland. This patch
|
|
fixes the problem by removing the code that invokes the debugger console.
|
|
|
|
:'bda.patch':
|
|
|
|
This patch reads out the I/O port of the serial device from the BIOS data
|
|
area (on x86).
|
|
|
|
Applying the patches
|
|
--------------------
|
|
|
|
To apply a patch to the OKL4 kernel, use the 'patch' command. First check
|
|
the directory given at the header of the patch. It may contain a directory
|
|
prefix (such as 'a/'), which does not actually exist. This prefix is usually
|
|
generated by the tool used to create the patch. In this case, use the '-p'
|
|
option of the patch command. To apply the patch with the first part of the
|
|
path stripped, issue the following command (make sure that you changed to
|
|
the base directory of the OKL4 kernel):
|
|
|
|
! patch -p1 < /path/to/syscall_pic.patch
|
|
|