summaryrefslogtreecommitdiff
path: root/Kernel/ThreadTracer.cpp
diff options
context:
space:
mode:
authorItamar <itamar8910@gmail.com>2020-04-07 18:23:37 +0300
committerAndreas Kling <kling@serenityos.org>2020-04-13 00:53:22 +0200
commit9e51e295cfe2775ff179b10f1cd90368cfb102ad (patch)
treea1bb8ff2ce39c668018eb32590076c7c2b74551e /Kernel/ThreadTracer.cpp
parent04317126606a7b8acbe472ed5da2ac6689fb9772 (diff)
downloadserenity-9e51e295cfe2775ff179b10f1cd90368cfb102ad.zip
ptrace: Add PT_SETREGS
PT_SETTREGS sets the regsiters of the traced thread. It can only be used when the tracee is stopped. Also, refactor ptrace. The implementation was getting long and cluttered the alraedy large Process.cpp file. This commit moves the bulk of the implementation to Kernel/Ptrace.cpp, and factors out peek & poke to separate methods of the Process class.
Diffstat (limited to 'Kernel/ThreadTracer.cpp')
-rw-r--r--Kernel/ThreadTracer.cpp23
1 files changed, 5 insertions, 18 deletions
diff --git a/Kernel/ThreadTracer.cpp b/Kernel/ThreadTracer.cpp
index d7cd685a50..c58e354d0a 100644
--- a/Kernel/ThreadTracer.cpp
+++ b/Kernel/ThreadTracer.cpp
@@ -26,6 +26,8 @@
#include <AK/Memory.h>
#include <AK/kmalloc.h>
+#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Ptrace.h>
#include <Kernel/ThreadTracer.h>
namespace Kernel {
@@ -37,24 +39,9 @@ ThreadTracer::ThreadTracer(pid_t tracer_pid)
void ThreadTracer::set_regs(const RegisterState& regs)
{
- PtraceRegisters r = {
- regs.eax,
- regs.ecx,
- regs.edx,
- regs.ebx,
- regs.esp,
- regs.ebp,
- regs.esi,
- regs.edi,
- regs.eip,
- regs.eflags,
- regs.cs,
- regs.ss,
- regs.ds,
- regs.es,
- regs.fs,
- regs.gs,
- };
+ PtraceRegisters r;
+ Ptrace::copy_kernel_registers_into_ptrace_registers(r, regs);
m_regs = r;
}
+
}