exec_from_file and vfs: fix reading file

This commit is contained in:
2025-08-17 15:02:09 +03:00
parent 0628470a7c
commit caa4005990
3 changed files with 20 additions and 26 deletions
+1 -1
View File
@@ -11,6 +11,6 @@ bool read_sector_callback(l9660_fs *fs, void *buf, uint32_t sector);
void mount_fs();
void list_files(l9660_dir *dir);
size_t vfs_read_file(l9660_file *file, uint8_t* buffer, size_t final_size);
size_t vfs_read_file(l9660_file *file, uint8_t* buffer);
#endif
+2 -11
View File
@@ -49,8 +49,8 @@ void list_files(l9660_dir *dir)
}
}
//TODO: fix invalid opcode exception that somehow happens when the memcpy is called with buffer+total_read address being 0xE0008CA0
size_t vfs_read_file(l9660_file *file, uint8_t* buffer, size_t final_size)
size_t vfs_read_file(l9660_file *file, uint8_t* buffer)
{
size_t total_read = 0;
l9660_status status;
@@ -65,13 +65,6 @@ size_t vfs_read_file(l9660_file *file, uint8_t* buffer, size_t final_size)
break;
}
printf("total_read: %X status: %X buffer+total_read: %X/%X read: %X\n", total_read, status, buffer + total_read, final_size, read);
if(buffer+total_read == 0xE0008CA0)
{
printf("ERROR ERROR\n");
printf("get_physaddr: %X", get_physaddr((void*)0xE0008CA0));
}
//check for EOF
if (read == 0)
break;
@@ -80,7 +73,5 @@ size_t vfs_read_file(l9660_file *file, uint8_t* buffer, size_t final_size)
total_read += read;
}
printf("total_read: %X\n", total_read);
return total_read;
}
+17 -14
View File
@@ -14,30 +14,29 @@
int read_file(const char* path, uint8_t** buffer, l9660_dir* dir)
{
l9660_file file;
l9660_file* file = (l9660_file*)malloc(sizeof(l9660_file));
l9660_status err;
err = l9660_openat(&file, dir, path);
err = l9660_openat(file, dir, path);
if (err != L9660_OK)
{
debug_log("read_file: err: 0x%X\n", err);
return err;
}
l9660_seek(&file, L9660_SEEK_END, 0);
uint32_t file_size = l9660_tell(&file);
l9660_seek(file, L9660_SEEK_END, 0);
uint32_t file_size = l9660_tell(file);
debug_log("file_size: %X\n", file_size);
l9660_seek(&file, L9660_SEEK_SET, 0);
l9660_seek(file, L9660_SEEK_SET, 0);
*buffer = (uint8_t*)malloc(file_size);
debug_log("eeee\n");
size_t read;
uint32_t final_size = (uint32_t)*buffer + file_size;
read = vfs_read_file(&file, *buffer, final_size);
read = vfs_read_file(file, *buffer);
free(file);
debug_log("bytes read: 0x%X\n", read);
return 0;
@@ -46,11 +45,9 @@ int read_file(const char* path, uint8_t** buffer, l9660_dir* dir)
void exec_from_file(const char* filename, const char* dirname)
{
asm volatile("cli");
int err, cnt;
//err = fat_mount(&ops1, 0, &g_fat, "ebalo");
int err;
uint8_t* file;
//dir_t dir;
l9660_dir dir;
l9660_dir root_dir;
l9660_status status;
@@ -61,17 +58,23 @@ void exec_from_file(const char* filename, const char* dirname)
status = l9660_opendirat(&dir, &root_dir, dirname);
debug_log("l9660_opendirat status: 0x%X\n", status);
list_files(&dir);
//list_files(&dir);
uint32_t bss_start, bss_end;
int result = read_file(filename, &file, &dir);
err = read_file(filename, &file, &dir);
if(err != 0)
{
debug_log("read_file failed!\n");
return;
}
//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;
//int program_header_table_entry_size = elf_ehdr->e_phentsize;
//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);