Gunnar Beutner
50839bd1f1
Kernel: Properly initialize r8-r15 for new threads on x86_64
2021-06-30 15:13:30 +02:00
Liav A
92c0dab5ab
Kernel: Introduce the new SysFS
...
The intention is to add dynamic mechanism for notifying the userspace
about hotplug events. Currently, the DMI (SMBIOS) blobs and ACPI tables
are exposed in the new filesystem.
2021-06-29 20:53:59 +02:00
Gunnar Beutner
0b82c583e0
Kernel: Implement capturing stack traces on x86_64
2021-06-29 20:03:36 +02:00
Gunnar Beutner
36ce2a2b76
Kernel: Fix struct layout for interrupt entries on x86_64
2021-06-29 20:03:36 +02:00
Gunnar Beutner
df9e73de25
Kernel: Add x86_64 support for fork()
2021-06-29 20:03:36 +02:00
Gunnar Beutner
732dc72c58
Kernel: Fix the limit for the IDT table
2021-06-28 22:29:28 +02:00
Gunnar Beutner
e979a88af4
Kernel: Implement do_assume_context for execve() on x86_64
2021-06-28 22:29:28 +02:00
Gunnar Beutner
a8587fbfb9
Kernel: Use FlatPtr for register-sized values
2021-06-28 22:29:28 +02:00
Gunnar Beutner
b5aad1c81d
Kernel: Fix GDT and segment selectors to make userland work on x86_64
...
Userland faulted on the very first instruction before because the
PML4T/PDPT/etc. weren't marked as user-accessible. For some reason
x86 doesn't care about that.
Also, we need to provide an appropriate userspace stack segment
selector to iretq.
2021-06-28 22:29:28 +02:00
rileylyman
640db93bdd
Kernel: Fix small typo in inline comment
2021-06-28 16:39:25 +02:00
Gunnar Beutner
e56a0d6af7
Kernel: Fix memset() on x86_64
...
Previously memset() only set half of the bytes to the requested value.
2021-06-28 15:55:00 +02:00
Gunnar Beutner
32840dfa17
Kernel: Implement more x86_64 context switching functionality
2021-06-28 15:55:00 +02:00
Gunnar Beutner
076692b1ef
Kernel: Implement entry code for x86_64 interrupts
...
With this fixed we can now properly handle interrupts (e.g. timer
interrupts) on x86_64.
2021-06-28 15:55:00 +02:00
Gunnar Beutner
328d44e227
Kernel: Fix stack for new threads on x86_64
...
Unlike on x86 iretq always pops rsp and ss.
2021-06-28 15:55:00 +02:00
Gunnar Beutner
9ed051fe25
Kernel: Implement initializing threads on x86_64
2021-06-27 15:46:42 +02:00
Gunnar Beutner
f285241cb8
Kernel: Rename Thread::tss to Thread::regs and add x86_64 support
...
We're using software context switches so calling this struct tss is
somewhat misleading.
2021-06-27 15:46:42 +02:00
Gunnar Beutner
eba33f82b8
Kernel: Reorder code a bit to clarify which #if block it belongs to
2021-06-27 15:46:42 +02:00
Gunnar Beutner
df530941cc
Kernel: Implement safe_* memory access functions for x86_64
2021-06-27 15:46:42 +02:00
Gunnar Beutner
79ab9cce18
Kernel: Clear segment registers on x86_64
...
They're supposedly unused but iretq doesn't like ss being non-zero.
2021-06-27 15:46:42 +02:00
Gunnar Beutner
9d9f20391d
Kernel: Use macros for GDT indices instead of hardcoding the values
2021-06-27 15:46:42 +02:00
Gunnar Beutner
065c6c307d
Kernel: Add support for interrupts on x86_64
2021-06-27 15:46:42 +02:00
Gunnar Beutner
233ef26e4d
Kernel+Userland: Add x86_64 registers to RegisterState/PtraceRegisters
2021-06-27 15:46:42 +02:00
Gunnar Beutner
10ca7f18a7
Kernel: Fix declaration for struct TrapFrame
...
This is declared as a struct elsewhere.
2021-06-27 15:46:42 +02:00
Gunnar Beutner
324f72d02b
Kernel: Fix incorrect flags for the GDT entries
...
The Sz (protected mode) bit should not be set for 64-bit GDT entries.
2021-06-27 15:46:42 +02:00
Gunnar Beutner
389bf82889
Kernel: Add CPUID flag for long mode
...
This isn't particularly useful because by the time we've entered
init() the CPU had better support x86_64 anyway. However this shows the
CPU flag in System Monitor - even in 32-bit mode.
2021-06-26 11:08:52 +02:00
Gunnar Beutner
9077c64d37
Kernel: Correct spelling mistake
2021-06-26 11:08:52 +02:00
Gunnar Beutner
e52051903b
Kernel: Fix off-by-one error in Processor::write_raw_gdt_entry
2021-06-26 11:08:52 +02:00
Gunnar Beutner
f630299d49
Kernel: Add support for setting up a x86_64 GDT once in C++ land
2021-06-26 11:08:52 +02:00
Gunnar Beutner
29d9666e02
Kernel: Fix GDT limits
...
The GDT limits are inclusive, so for correctness we should subtract
one from the structs' size.
2021-06-26 11:08:52 +02:00
Gunnar Beutner
4c555684b7
Kernel: Set an appropriate GDT for 64-bit mode
2021-06-25 15:19:09 +02:00
Gunnar Beutner
d84abe51f5
Kernel: Use PML4T for 64-bit mode
2021-06-25 15:19:09 +02:00
Gunnar Beutner
13e4093da4
Kernel: Move Multiboot header into a separate file
2021-06-25 15:19:09 +02:00
Gunnar Beutner
19c0498ccc
Kernel: Update the x86_64 boot code to match i386's code
2021-06-25 15:19:09 +02:00
Daniel Bertalan
74535628a8
Kernel: Use proper Atomic<T>
types in CPU
...
This is needed because Clang's intrinsic atomic functions behave weirdly
if only one of their pointer arguments is volatile.
2021-06-24 17:35:49 +04:30
Gunnar Beutner
38fca26f54
Kernel: Add stubs for missing x86_64 functionality
...
This adds just enough stubs to make the kernel compile on x86_64. Obviously
it won't do anything useful - in fact it won't even attempt to boot because
Multiboot doesn't support ELF64 binaries - but it gets those compiler errors
out of the way so more progress can be made getting all the missing
functionality in place.
2021-06-24 09:27:13 +02:00
Hendiadyoin1
62f9377656
Kernel: Move special sections into Sections.h
...
This also removes a lot of CPU.h includes infavor for Sections.h
2021-06-24 00:38:23 +02:00
Hendiadyoin1
553ea3036d
Kernel: Remove PAGE_SIZE from CPU.h
...
We have that information in LibC, lets use that instead
2021-06-24 00:38:23 +02:00
Hendiadyoin1
7ca3d413f7
Kernel: Pull apart CPU.h
...
This does not add any functional changes
2021-06-24 00:38:23 +02:00
Gunnar Beutner
c980a51776
Kernel: Make sure the kernel's ELF PHDRs don't use rwx
...
This doesn't really matter in terms of writability for the kernel text
because we set up proper page mappings anyway which prohibit writing
to the text segment. However, this makes the profiler happy which
previously died when validating the kernel's ELF program headers.
2021-06-19 12:54:33 +02:00
Jean-Baptiste Boric
8cd96f031d
Kernel: Fix CPUID usage inside cpu_detect()
...
Since no features inside the 0x80000001 leaf are required for
SerenityOS to work, don't assert if it's unavailable.
2021-06-18 01:02:25 +02:00
Jean-Baptiste Boric
fb3447f7ec
Kernel: Use FXSR feature only if supported by CPU
...
If FXSR is not present, fall back to fnsave and frstor instructions.
These instructions aren't available on the canonical i686 CPU which is
the Pentium Pro processor.
2021-06-18 01:02:25 +02:00
Jean-Baptiste Boric
fea23d0ec1
Kernel: Detect support for CPUID FXSR
...
The fxsave and fxrstor instructions are available only if the FXSR
feature is present.
2021-06-18 01:02:25 +02:00
Gunnar Beutner
da24228348
Kernel: Print stack traces for crashes in release builds
...
Previously we'd just reset the CPU and reboot.
2021-06-11 11:32:01 +02:00
Gunnar Beutner
bcf6da8cde
Kernel: Enable VERIFY() checks even if the DEBUG macro is not defined
...
Fixes #7910 .
2021-06-11 11:32:01 +02:00
Gunnar Beutner
4fca9ee060
Kernel: Allow building the kernel with -O0
...
Unfortunately the kernel doesn't run with -O0 but at least it can be
successfully built with this change.
2021-05-28 19:52:22 +01:00
Liav A
b8f0a9c974
Kernel/CPU: Fix awkward printing early on boot
...
This usage of the word "installing" seemed for me for a long time as
a wrong thing, so let's make it better now.
2021-05-21 22:38:26 +01:00
Gunnar Beutner
8495d6aeca
Kernel: Use the Function class for smp_broadcast()/smp_unicast()
...
This avoids allocations for smp_broadcast() and smp_unicast() by
using the Function class.
2021-05-20 09:09:10 +02:00
Gunnar Beutner
cac7a8ced9
Kernel: Use the Function class for deferred_call_queue()
...
This avoids allocations for deferred_call_queue().
2021-05-20 09:09:10 +02:00
Brian Gianforcaro
7540f4268b
Kernel: Remove s_processor_lock by making s_processors statically sized
...
Currently in SMP mode we hard code support for up to only 8 processors.
There is no reason for this to be a dynamic allocation that needs to be
guarded by a spinlock. Instead use a Array<T* with inline storage of 8,
allowing each processor to initialize it self in place, avoiding all
the need for locks.
2021-05-20 08:10:07 +02:00
Brian Gianforcaro
83fc591cea
Kernel: Generate page fault events from the kernel profiler
...
Hook the kernel page fault handler and capture page fault events when
the fault has a current thread attached in TLS. We capture the eip and
ebp so we can unwind the stack and locate which pieces of code are
generating the most page faults.
Co-authored-by: Gunnar Beutner <gbeutner@serenityos.org>
2021-05-19 22:51:42 +02:00