starry_api/imp/mm/
brk.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use axerrno::LinuxResult;
use axtask::{TaskExtRef, current};
use macro_rules_attribute::apply;

use crate::syscall_instrument;

#[apply(syscall_instrument)]
pub fn sys_brk(addr: usize) -> LinuxResult<isize> {
    let task = current();
    let process_data = task.task_ext().process_data();
    let mut return_val: isize = process_data.get_heap_top() as isize;
    let heap_bottom = process_data.get_heap_bottom() as usize;
    if addr != 0 && addr >= heap_bottom && addr <= heap_bottom + axconfig::plat::USER_HEAP_SIZE {
        process_data.set_heap_top(addr);
        return_val = addr as isize;
    }
    Ok(return_val)
}