/*
 * test_brk.c
 *
 * システムコールbrk()のテスト。
 * brk()は、実メモリーを割り当てるわけではなく、ページ割当て範囲を設定するだけなので、
 * brk()発行後、割り当てたアドレスにアクセスしてページフォルトを起こて、実メモリーを
 * 割り当てる。
 */


#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<sys/system.h>


int main(int a,char **b)
{
	union{
		void *pv;
		uint ui;
	}end_seg;
	uchar *addr;
	SYS_INFO *sys_info = (SYS_INFO*)(USER_ESP_BEG - sizeof(SYS_INFO));


	for(end_seg.pv = (void*)(ROUNDUP(sys_info->lastAddr,PAGE_SIZE) - 1); end_seg.ui < 0x50000000; end_seg.ui += 0x1000)
	{
		printf("seg=%x\r",end_seg.ui);
		if (brk(end_seg.pv) != 0)
		{
			printf("Failed brk()\n");
			exit(0);
		}
		addr = end_seg.pv;
		printf("adr=%d\r",*addr);
	}

	printf("end test_brk\n");

	return 0;
}
