1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 05:48:12 +00:00

Add subregions to /proc/PID/vm

This commit is contained in:
Andreas Kling 2018-10-28 10:03:54 +01:00
parent 1d5afbdffc
commit 0a6a2521e8
2 changed files with 17 additions and 2 deletions

View file

@ -30,7 +30,7 @@ ByteBuffer procfs$pid_vm(const Task& task)
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
char* buffer; char* buffer;
auto stringImpl = StringImpl::createUninitialized(80 + task.regionCount() * 80, buffer); auto stringImpl = StringImpl::createUninitialized(80 + task.regionCount() * 80 + 80 + task.subregionCount() * 80, buffer);
memset(buffer, 0, stringImpl->length()); memset(buffer, 0, stringImpl->length());
char* ptr = buffer; char* ptr = buffer;
ptr += ksprintf(ptr, "BEGIN END SIZE NAME\n"); ptr += ksprintf(ptr, "BEGIN END SIZE NAME\n");
@ -41,6 +41,18 @@ ByteBuffer procfs$pid_vm(const Task& task)
region->size, region->size,
region->name.characters()); region->name.characters());
} }
if (task.subregionCount()) {
ptr += ksprintf(ptr, "\nREGION OFFSET BEGIN END SIZE NAME\n");
for (auto& subregion : task.subregions()) {
ptr += ksprintf(ptr, "%x %x %x -- %x %x %s\n",
subregion->region->linearAddress.get(),
subregion->offset,
subregion->linearAddress.get(),
subregion->linearAddress.offset(subregion->size - 1).get(),
subregion->size,
subregion->name.characters());
}
}
*ptr = '\0'; *ptr = '\0';
return ByteBuffer::copy((byte*)buffer, ptr - buffer); return ByteBuffer::copy((byte*)buffer, ptr - buffer);
} }

View file

@ -15,7 +15,8 @@ class Zone;
class Task : public InlineLinkedListNode<Task> { class Task : public InlineLinkedListNode<Task> {
friend class InlineLinkedListNode<Task>; friend class InlineLinkedListNode<Task>;
class Region; struct Region;
struct Subregion;
public: public:
static Task* createKernelTask(void (*entry)(), String&& name); static Task* createKernelTask(void (*entry)(), String&& name);
static Task* createUserTask(const String& path, uid_t, gid_t, pid_t parentPID, int& error, const char** args = nullptr); static Task* createUserTask(const String& path, uid_t, gid_t, pid_t parentPID, int& error, const char** args = nullptr);
@ -114,6 +115,8 @@ public:
size_t regionCount() const { return m_regions.size(); } size_t regionCount() const { return m_regions.size(); }
const Vector<RetainPtr<Region>>& regions() const { return m_regions; } const Vector<RetainPtr<Region>>& regions() const { return m_regions; }
size_t subregionCount() const { return m_regions.size(); }
const Vector<OwnPtr<Subregion>>& subregions() const { return m_subregions; }
void dumpRegions(); void dumpRegions();
void didSchedule() { ++m_timesScheduled; } void didSchedule() { ++m_timesScheduled; }