mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 21:37:35 +00:00
Kernel: Consolidate a bunch of i386/x86_64 code paths
Add some arch-specific getters and setters that allow us to merge blocks that were previously specific to either ARCH(I386) or ARCH(X86_64).
This commit is contained in:
parent
3f5a42b3dd
commit
961f727448
6 changed files with 64 additions and 117 deletions
|
@ -68,41 +68,35 @@ struct [[gnu::packed]] RegisterState {
|
|||
FlatPtr userspace_ss;
|
||||
#endif
|
||||
|
||||
#if ARCH(I386)
|
||||
FlatPtr userspace_sp() const
|
||||
{
|
||||
#if ARCH(I386)
|
||||
return userspace_esp;
|
||||
#else
|
||||
}
|
||||
void set_userspace_sp(FlatPtr value) { userspace_esp = value; }
|
||||
FlatPtr ip() const { return eip; }
|
||||
void set_ip(FlatPtr value) { eip = value; }
|
||||
void set_dx(FlatPtr value) { edx = value; }
|
||||
FlatPtr bp() const { return ebp; }
|
||||
void set_bp(FlatPtr value) { ebp = value; }
|
||||
FlatPtr flags() const { return eflags; }
|
||||
void set_flags(FlatPtr value) { eflags = value; }
|
||||
void set_return_reg(FlatPtr value) { eax = value; }
|
||||
#elif ARCH(X86_64)
|
||||
FlatPtr userspace_sp() const
|
||||
{
|
||||
return userspace_rsp;
|
||||
#endif
|
||||
}
|
||||
|
||||
FlatPtr ip() const
|
||||
{
|
||||
#if ARCH(I386)
|
||||
return eip;
|
||||
#else
|
||||
return rip;
|
||||
void set_userspace_sp(FlatPtr value) { userspace_rsp = value; }
|
||||
FlatPtr ip() const { return rip; }
|
||||
void set_ip(FlatPtr value) { rip = value; }
|
||||
void set_dx(FlatPtr value) { rdx = value; }
|
||||
FlatPtr bp() const { return rbp; }
|
||||
void set_bp(FlatPtr value) { rbp = value; }
|
||||
FlatPtr flags() const { return rflags; }
|
||||
void set_flags(FlatPtr value) { rflags = value; }
|
||||
void set_return_reg(FlatPtr value) { rax = value; }
|
||||
#endif
|
||||
}
|
||||
|
||||
FlatPtr bp() const
|
||||
{
|
||||
#if ARCH(I386)
|
||||
return ebp;
|
||||
#else
|
||||
return rbp;
|
||||
#endif
|
||||
}
|
||||
|
||||
FlatPtr flags() const
|
||||
{
|
||||
#if ARCH(I386)
|
||||
return eflags;
|
||||
#else
|
||||
return rflags;
|
||||
#endif
|
||||
}
|
||||
|
||||
void capture_syscall_params(FlatPtr& function, FlatPtr& arg1, FlatPtr& arg2, FlatPtr& arg3, FlatPtr& arg4) const
|
||||
{
|
||||
|
@ -118,24 +112,6 @@ struct [[gnu::packed]] RegisterState {
|
|||
arg2 = rcx;
|
||||
arg3 = rbx;
|
||||
arg4 = rsi;
|
||||
#endif
|
||||
}
|
||||
|
||||
void set_ip_reg(FlatPtr value)
|
||||
{
|
||||
#if ARCH(I386)
|
||||
eip = value;
|
||||
#else
|
||||
rip = value;
|
||||
#endif
|
||||
}
|
||||
|
||||
void set_return_reg(FlatPtr value)
|
||||
{
|
||||
#if ARCH(I386)
|
||||
eax = value;
|
||||
#else
|
||||
rax = value;
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
|
|
@ -299,13 +299,8 @@ bool handle_safe_access_fault(RegisterState& regs, FlatPtr fault_address)
|
|||
else
|
||||
return false;
|
||||
|
||||
#if ARCH(I386)
|
||||
regs.eip = ip;
|
||||
regs.edx = fault_address;
|
||||
#else
|
||||
regs.rip = ip;
|
||||
regs.rdx = fault_address;
|
||||
#endif
|
||||
regs.set_ip(ip);
|
||||
regs.set_dx(fault_address);
|
||||
return true;
|
||||
}
|
||||
if (ip >= (FlatPtr)&start_of_safemem_atomic_text && ip < (FlatPtr)&end_of_safemem_atomic_text) {
|
||||
|
@ -325,13 +320,8 @@ bool handle_safe_access_fault(RegisterState& regs, FlatPtr fault_address)
|
|||
else
|
||||
return false;
|
||||
|
||||
#if ARCH(I386)
|
||||
regs.eip = ip;
|
||||
regs.edx = 1;
|
||||
#else
|
||||
regs.rip = ip;
|
||||
regs.rdx = 1;
|
||||
#endif
|
||||
regs.set_ip(ip);
|
||||
regs.set_dx(1);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue