tasking: fix syscall handling, use debug_log instead of printf in some places

This commit is contained in:
2025-06-19 18:31:15 +03:00
parent 93f174827b
commit a9789b7f57
9 changed files with 53 additions and 52 deletions
+18 -18
View File
@@ -28,16 +28,16 @@ int read_file(const char* path, uint8_t** buffer)
return err;
uint32_t file_size = fat_fsize(&file);
printf("file_size: %X\n", file_size);
debug_log("file_size: %X\n", file_size);
uint8_t buf[512];
//memset(buf, 0, 512);
printf("heh\n");
debug_log("heh\n");
*buffer = (uint8_t*)malloc(file_size);
//memset(*buffer, 0, file_size);
uint8_t* current = *buffer;
printf("eeee\n");
debug_log("eeee\n");
int cnt = fat_fread(&file, *buffer, file_size);
@@ -68,21 +68,21 @@ void exec_from_file(const char* filename)
uint8_t* file;
int result = read_file("/ebalo/aaa", &file);
printf("result: %X\n", result);
printf("buffer: %s\n", file);
int result = read_file("/ebalo/testfile", &file);
debug_log("result: %X\n", result);
debug_log("buffer: %s\n", file);
Elf32_Ehdr *elf_ehdr = (Elf32_Ehdr*)file;
int program_header_table_entry_count = elf_ehdr->e_phnum;
int program_header_table_entry_size = elf_ehdr->e_phentsize;
printf("magic: %X, type: %X, entry: 0x%X\n", elf_ehdr->e_ident, elf_ehdr->e_type, elf_ehdr->e_entry);
printf("PHNUM: %X\n", program_header_table_entry_count);
printf("PHENTSIZE: %X\n\n", program_header_table_entry_size);
debug_log("magic: %X, type: %X, entry: 0x%X\n", elf_ehdr->e_ident, elf_ehdr->e_type, elf_ehdr->e_entry);
debug_log("PHNUM: %X\n", program_header_table_entry_count);
debug_log("PHENTSIZE: %X\n\n", program_header_table_entry_size);
uint32_t* proc_pd = create_page_dir();
uint32_t proc_pd_phys = (uint32_t)get_physaddr((void*)proc_pd);
printf("proc_pd_phys: 0x%X\n", proc_pd_phys);
debug_log("proc_pd_phys: 0x%X\n", proc_pd_phys);
uint32_t* curr_pd_virt = get_page_dir(); // CR3 содержит физический адрес, но get_page_dir возвращает его как uint32_t*
uint32_t curr_pd_phys = (uint32_t)curr_pd_virt; // Просто приводим к uint32_t, так как CR3 содержит физический адрес
@@ -93,22 +93,22 @@ void exec_from_file(const char* filename)
Elf32_Phdr *elf_phdr = (Elf32_Phdr *)((uint32_t)file + elf_ehdr->e_phoff +
i * elf_ehdr->e_phentsize);
printf("HEADER %X, type: 0x%X, vaddr: 0x%X, paddr: 0x%X, memsz: 0x%X\n", i, elf_phdr->p_type, elf_phdr->p_vaddr, elf_phdr->p_paddr, elf_phdr->p_memsz);
debug_log("HEADER %X, type: 0x%X, vaddr: 0x%X, paddr: 0x%X, memsz: 0x%X\n", i, elf_phdr->p_type, elf_phdr->p_vaddr, elf_phdr->p_paddr, elf_phdr->p_memsz);
if(elf_phdr->p_type != PT_LOAD)
{
printf("not PT_LOAD, skipping...\n");
debug_log("not PT_LOAD, skipping...\n");
continue;
}
int pages_needed = DivRoundUp(elf_phdr->p_memsz, 0x1000);//(elf_phdr->p_memsz / 0x1000) + 1;
printf("pages needed: %X\n", pages_needed);
debug_log("pages needed: %X\n", pages_needed);
for(int j = 0; j < pages_needed; j++)
{
uint32_t vaddr = (elf_phdr->p_vaddr & ~0xFFF) + j * 0x1000;
void* phys_addr = alloc_page();
printf("mapping 0x%X -> 0x%X\n", phys_addr, vaddr);
debug_log("mapping 0x%X -> 0x%X\n", phys_addr, vaddr);
map_page(phys_addr, (void*)vaddr, PAGE_PRESENT | PAGE_RW | PAGE_USER);
}
@@ -120,11 +120,11 @@ void exec_from_file(const char* filename)
memset((void*)bss_start, 0, bss_end - bss_start);
}
printf("p_filesz: 0x%X (%X)\n", elf_phdr->p_filesz, elf_phdr->p_filesz);
printf("================================\n\n\n\n");
debug_log("p_filesz: 0x%X (%X)\n", elf_phdr->p_filesz, elf_phdr->p_filesz);
debug_log("================================\n\n\n\n");
}
printf("setting up the user stack...\n");
debug_log("setting up the user stack...\n");
//TODO: i think this thing allocates more pages than needed
for (uint32_t vaddr = USER_STACK_BOTTOM; vaddr <= USER_STACK_TOP; vaddr += PAGE_SIZE) {
@@ -137,7 +137,7 @@ void exec_from_file(const char* filename)
return;
}
map_page(phys_addr, (void*)(vaddr & ~0xFFF), PAGE_PRESENT | PAGE_RW | PAGE_USER);
printf("mapping stack 0x%X -> 0x%X (0x%X)\n", (uint32_t)phys_addr, vaddr, (vaddr & ~0xFFF));
debug_log("mapping stack 0x%X -> 0x%X (0x%X)\n", (uint32_t)phys_addr, vaddr, (vaddr & ~0xFFF));
memset((void*)(vaddr & ~0xFFF), 0, PAGE_SIZE); // Add this
}
/*