heap について
uClinux 調査環境について - まだ見えない先の
詳解LINUXカーネルp.420
asmlinkage unsigned long sys_brk(unsigned long brk) p.421
MMU(ELFバイナリ) 時は,heap 用の vma は fs/binfmt_elf.c set_brk()にて do_brk() を呼び出すことで生成される(はず).sys_brk() でも do_brk() を呼び出し vma の伸張を行う.また,mm->brk の増加を行う.
noMMU 時は,mm->start_brk と mm->context.end_brk の中であれば,mm->brk の変化を許す.それ以外では現在の mm->brk を返す.プロセス起動時に割り当てた heap 領域の増減は行わない.
unsigned long do_brk(unsigned long addr, unsigned long len) p.422
noMMU 時は下記になる.
return -ENOMEM;
これは,前述したように heap 領域を変化させないためだと考えられる.