Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions libkernel/src/memory/proc_vm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,18 @@ impl<AS: UserAddressSpace> ProcessVM<AS> {
}
}

pub fn mm(&self) -> &MemoryMap<AS> {
&self.mm
}

pub fn mm_mut(&mut self) -> &mut MemoryMap<AS> {
&mut self.mm
}

pub fn start_brk(&self) -> VA {
self.brk.start_address()
}

pub fn current_brk(&self) -> VA {
self.brk.end_address()
}
Expand Down
59 changes: 50 additions & 9 deletions src/drivers/fs/proc/task/task_file.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,41 @@ Threads:\t{tasks}\n",
TaskFileType::Comm => format!("{name}\n", name = name.as_str()),
TaskFileType::State => format!("{state}\n"),
TaskFileType::Stat => {
let vm = task.vm.lock_save_irq();

let mut vsize = 0;
let mut startcode = 0;
let mut endcode = 0;
let mut startstack = 0;
let mut start_data = 0;
let mut end_data = 0;

for vma in vm.mm().iter_vmas() {
let start = vma.region().start_address().value();
let end = vma.region().end_address().value();
vsize += vma.region().size();

if vma.name() == "[stack]" {
startstack = start;
} else if vma.permissions().execute {
if startcode == 0 || start < startcode {
startcode = start;
}
if end > endcode {
endcode = end;
}
} else if vma.permissions().write && !vma.name().starts_with('[') {
if start_data == 0 || start < start_data {
start_data = start;
}
if end > end_data {
end_data = end;
}
}
}

let start_brk = vm.start_brk().value();

let mut output = String::new();
output.push_str(&format!("{} ", task.process.tgid.value())); // pid
output.push_str(&format!("({}) ", name.as_str())); // comm
Expand Down Expand Up @@ -130,15 +165,15 @@ Threads:\t{tasks}\n",
output.push_str(&format!("{} ", 0)); // cstime
output.push_str(&format!("{} ", *task.process.priority.lock_save_irq())); // priority
output.push_str(&format!("{} ", 0)); // nice
output.push_str(&format!("{} ", 0)); // num_threads
output.push_str(&format!("{} ", task.process.tasks.lock_save_irq().len())); // num_threads
output.push_str(&format!("{} ", 0)); // itrealvalue
output.push_str(&format!("{} ", 0)); // starttime
output.push_str(&format!("{} ", 0)); // vsize
output.push_str(&format!("{vsize} ")); // vsize
output.push_str(&format!("{} ", 0)); // rss
output.push_str(&format!("{} ", 0)); // rsslim
output.push_str(&format!("{} ", 0)); // startcode
output.push_str(&format!("{} ", 0)); // endcode
output.push_str(&format!("{} ", 0)); // startstack
output.push_str(&format!("{startcode} ")); // startcode
output.push_str(&format!("{endcode} ")); // endcode
output.push_str(&format!("{startstack} ")); // startstack
output.push_str(&format!("{} ", 0)); // kstkesp
output.push_str(&format!("{} ", 0)); // kstkeip
output.push_str(&format!("{} ", 0)); // signal
Expand All @@ -149,15 +184,21 @@ Threads:\t{tasks}\n",
output.push_str(&format!("{} ", 0)); // nswap
output.push_str(&format!("{} ", 0)); // cnswap
output.push_str(&format!("{} ", 0)); // exit_signal
output.push_str(&format!("{} ", 0)); // processor
output.push_str(&format!(
"{} ",
task.sched_data
.lock_save_irq()
.as_ref()
.map_or(0, |s| s.last_cpu)
)); // processor
output.push_str(&format!("{} ", 0)); // rt_priority
output.push_str(&format!("{} ", 0)); // policy
output.push_str(&format!("{} ", 0)); // delayacct_blkio_ticks
output.push_str(&format!("{} ", 0)); // guest_time
output.push_str(&format!("{} ", 0)); // cguest_time
output.push_str(&format!("{} ", 0)); // start_data
output.push_str(&format!("{} ", 0)); // end_data
output.push_str(&format!("{} ", 0)); // start_brk
output.push_str(&format!("{start_data} ")); // start_data
output.push_str(&format!("{end_data} ")); // end_data
output.push_str(&format!("{start_brk} ")); // start_brk
output.push_str(&format!("{} ", 0)); // arg_start
output.push_str(&format!("{} ", 0)); // arg_end
output.push_str(&format!("{} ", 0)); // env_start
Expand Down
Loading