mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 13:17:44 +00:00
Kernel: Remove i686 support
This commit is contained in:
parent
32270dcd20
commit
5ff318cf3a
75 changed files with 142 additions and 895 deletions
|
@ -5,7 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <Kernel/CommandLine.h>
|
||||
#if ARCH(I386) || ARCH(X86_64)
|
||||
#if ARCH(X86_64)
|
||||
# include <Kernel/Arch/x86/common/PCSpeaker.h>
|
||||
#endif
|
||||
#include <Kernel/Process.h>
|
||||
|
@ -17,7 +17,7 @@ ErrorOr<FlatPtr> Process::sys$beep()
|
|||
VERIFY_NO_PROCESS_BIG_LOCK(this);
|
||||
if (!kernel_command_line().is_pc_speaker_enabled())
|
||||
return ENODEV;
|
||||
#if ARCH(I386) || ARCH(X86_64)
|
||||
#if ARCH(X86_64)
|
||||
PCSpeaker::tone_on(440);
|
||||
auto result = Thread::current()->sleep(Time::from_nanoseconds(200'000'000));
|
||||
PCSpeaker::tone_off();
|
||||
|
|
|
@ -149,16 +149,7 @@ static ErrorOr<FlatPtr> make_userspace_context_for_main_thread([[maybe_unused]]
|
|||
// NOTE: The stack needs to be 16-byte aligned.
|
||||
new_sp -= new_sp % 16;
|
||||
|
||||
#if ARCH(I386)
|
||||
// GCC assumes that the return address has been pushed to the stack when it enters the function,
|
||||
// so we need to reserve an extra pointer's worth of bytes below this to make GCC's stack alignment
|
||||
// calculations work
|
||||
new_sp -= sizeof(void*);
|
||||
|
||||
push_on_new_stack(envp);
|
||||
push_on_new_stack(argv);
|
||||
push_on_new_stack(argv_entries.size());
|
||||
#elif ARCH(X86_64)
|
||||
#if ARCH(X86_64)
|
||||
regs.rdi = argv_entries.size();
|
||||
regs.rsi = argv;
|
||||
regs.rdx = envp;
|
||||
|
@ -686,18 +677,8 @@ ErrorOr<void> Process::do_exec(NonnullLockRefPtr<OpenFileDescription> main_progr
|
|||
|
||||
auto& regs = new_main_thread->m_regs;
|
||||
regs.cs = GDT_SELECTOR_CODE3 | 3;
|
||||
#if ARCH(I386)
|
||||
regs.ds = GDT_SELECTOR_DATA3 | 3;
|
||||
regs.es = GDT_SELECTOR_DATA3 | 3;
|
||||
regs.ss = GDT_SELECTOR_DATA3 | 3;
|
||||
regs.fs = GDT_SELECTOR_DATA3 | 3;
|
||||
regs.gs = GDT_SELECTOR_TLS | 3;
|
||||
regs.eip = load_result.entry_eip;
|
||||
regs.esp = new_userspace_sp;
|
||||
#else
|
||||
regs.rip = load_result.entry_eip;
|
||||
regs.rsp = new_userspace_sp;
|
||||
#endif
|
||||
regs.cr3 = address_space().with([](auto& space) { return space->page_directory().cr3(); });
|
||||
|
||||
{
|
||||
|
|
|
@ -101,28 +101,7 @@ ErrorOr<FlatPtr> Process::sys$fork(RegisterState& regs)
|
|||
child_first_thread->m_alternative_signal_stack = Thread::current()->m_alternative_signal_stack;
|
||||
child_first_thread->m_alternative_signal_stack_size = Thread::current()->m_alternative_signal_stack_size;
|
||||
|
||||
#if ARCH(I386)
|
||||
auto& child_regs = child_first_thread->m_regs;
|
||||
child_regs.eax = 0; // fork() returns 0 in the child :^)
|
||||
child_regs.ebx = regs.ebx;
|
||||
child_regs.ecx = regs.ecx;
|
||||
child_regs.edx = regs.edx;
|
||||
child_regs.ebp = regs.ebp;
|
||||
child_regs.esp = regs.userspace_esp;
|
||||
child_regs.esi = regs.esi;
|
||||
child_regs.edi = regs.edi;
|
||||
child_regs.eflags = regs.eflags;
|
||||
child_regs.eip = regs.eip;
|
||||
child_regs.cs = regs.cs;
|
||||
child_regs.ds = regs.ds;
|
||||
child_regs.es = regs.es;
|
||||
child_regs.fs = regs.fs;
|
||||
child_regs.gs = regs.gs;
|
||||
child_regs.ss = regs.userspace_ss;
|
||||
|
||||
dbgln_if(FORK_DEBUG, "fork: child will begin executing at {:#04x}:{:p} with stack {:#04x}:{:p}, kstack {:#04x}:{:p}",
|
||||
child_regs.cs, child_regs.eip, child_regs.ss, child_regs.esp, child_regs.ss0, child_regs.esp0);
|
||||
#elif ARCH(X86_64)
|
||||
#if ARCH(X86_64)
|
||||
auto& child_regs = child_first_thread->m_regs;
|
||||
child_regs.rax = 0; // fork() returns 0 in the child :^)
|
||||
child_regs.rbx = regs.rbx;
|
||||
|
|
|
@ -563,14 +563,8 @@ ErrorOr<FlatPtr> Process::sys$allocate_tls(Userspace<char const*> initial_data,
|
|||
|
||||
TRY(main_thread->make_thread_specific_region({}));
|
||||
|
||||
#if ARCH(I386)
|
||||
auto& tls_descriptor = Processor::current().get_gdt_entry(GDT_SELECTOR_TLS);
|
||||
tls_descriptor.set_base(main_thread->thread_specific_data());
|
||||
tls_descriptor.set_limit(main_thread->thread_specific_region_size());
|
||||
#else
|
||||
MSR fs_base_msr(MSR_FS_BASE);
|
||||
fs_base_msr.set(main_thread->thread_specific_data().get());
|
||||
#endif
|
||||
|
||||
return m_master_tls_region.unsafe_ptr()->vaddr().get();
|
||||
});
|
||||
|
|
|
@ -87,7 +87,7 @@ ErrorOr<FlatPtr> Process::sys$sigreturn([[maybe_unused]] RegisterState& register
|
|||
// Stack state (created by the signal trampoline):
|
||||
// saved_ax, ucontext, signal_info, fpu_state?.
|
||||
|
||||
#if ARCH(I386) || ARCH(X86_64)
|
||||
#if ARCH(X86_64)
|
||||
// The FPU state is at the top here, pop it off and restore it.
|
||||
// FIXME: The stack alignment is off by 8 bytes here, figure this out and remove this excessively aligned object.
|
||||
alignas(alignof(FPUState) * 2) FPUState data {};
|
||||
|
@ -107,8 +107,6 @@ ErrorOr<FlatPtr> Process::sys$sigreturn([[maybe_unused]] RegisterState& register
|
|||
Thread::current()->m_currently_handled_signal = 0;
|
||||
#if ARCH(X86_64)
|
||||
auto sp = registers.rsp;
|
||||
#elif ARCH(I386)
|
||||
auto sp = registers.esp;
|
||||
#endif
|
||||
|
||||
copy_ptrace_registers_into_kernel_registers(registers, static_cast<PtraceRegisters const&>(ucontext.uc_mcontext));
|
||||
|
@ -116,9 +114,6 @@ ErrorOr<FlatPtr> Process::sys$sigreturn([[maybe_unused]] RegisterState& register
|
|||
#if ARCH(X86_64)
|
||||
registers.set_userspace_sp(registers.rsp);
|
||||
registers.rsp = sp;
|
||||
#elif ARCH(I386)
|
||||
registers.set_userspace_sp(registers.esp);
|
||||
registers.esp = sp;
|
||||
#endif
|
||||
|
||||
return saved_ax;
|
||||
|
|
|
@ -22,9 +22,7 @@ ErrorOr<FlatPtr> Process::sys$uname(Userspace<utsname*> user_buf)
|
|||
{}, // Hostname, filled in below.
|
||||
{}, // "Release" (1.0-dev), filled in below.
|
||||
{}, // "Revision" (git commit hash), filled in below.
|
||||
#if ARCH(I386)
|
||||
"i686",
|
||||
#elif ARCH(X86_64)
|
||||
#if ARCH(X86_64)
|
||||
"x86_64",
|
||||
#elif ARCH(AARCH64)
|
||||
"AArch64",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue