mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-27 09:12:32 +00:00
ac6c4682f3
GCC 4.7.4 and newer seems to optimize the lock-variable accesses more radically, which uncovered the missing volatile qualifier and resulted in: Assertion "(int)locked >= 0" failed in file '.../okl4_x86/kernel/include/kernel/read_write_lock.h', line 151 (fn=f0104771) --- "KD# assert" --- |
||
---|---|---|
.. | ||
bda.patch | ||
char_bit.patch | ||
eabi_build.patch | ||
elfweaver.patch | ||
gcc_4.4.5.patch | ||
gdt_init.patch | ||
invalid_opcode_exception_ipc.patch | ||
kdb_reboot.patch | ||
read_write_lock_volatile.patch | ||
README | ||
reply_tid.patch | ||
suspend_resume.patch | ||
syscall_pic.patch |
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