bluemoon wrote:
even sbrk for 0x40419(a bit more than 256k) doesn't seems normal for a trivial program.
Just to make sure, do the program runs fine without fork()?
do the lib properly initialized (double check all bss cleared?)
I'm pretty positive I'm clearing out .bss. This is the function in the ELF loader that fills in .bss segment:
Code:
//map pages for bss segment pointed to by shdr
//stores program break (end of .bss segment) in prog_break
//stored start of .bss segment in bss_loc
static void alloc_bss(elf_s_header* shdr, int* prog_break, int* bss_loc) {
printf("ELF .bss mapped @ %x - %x\n", shdr->addr, shdr->addr + shdr->size);
for (int i = 0; i <= shdr->size + 0x1000; i += 0x1000) {
extern page_directory_t* current_directory;
page_t* page = get_page(shdr->addr + i, 1, current_directory);
if (!alloc_frame(page, 1, 1)) {
printf_err(".bss %x wasn't alloc'd", shdr->addr + i);
}
}
//zero out .bss
memset((char*)shdr->addr, 0, shdr->size);
//set program break to .bss segment
*prog_break = shdr->addr + shdr->size;
*bss_loc = shdr->addr;
}