From e5b83f6b72fac5584c7cbbfcb0693effbdcc81b6 Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 21 Apr 2023 17:25:00 +0300 Subject: [PATCH] Fix multiple bugs throughout the codebase --- apps/system/init/init.c | 4 +--- libc/ElfInterpreter/ld.c | 17 ++++++++++------- libs/include/sysfile.h | 4 ++-- libs/libsys/File.c | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/apps/system/init/init.c b/apps/system/init/init.c index 038ae65..99bdbed 100644 --- a/apps/system/init/init.c +++ b/apps/system/init/init.c @@ -17,8 +17,6 @@ void PutCharToKernelConsole(char c) int main(int argc, char *argv[], char *envp[]) { - for (int i = 0; i < 14; i++) - PutCharToKernelConsole("\nHello World!\n"[i]); print("%p %p %p\n", (void *)(uint64_t)&argc, (void *)&argv, (void *)&envp); print("I have %d arguments\n", argc); for (int i = 0; i < argc; i++) @@ -49,7 +47,7 @@ int main(int argc, char *argv[], char *envp[]) } char buf[1024]; - uint64_t read = FileRead(test, (uint8_t *)buf, 1024); + uint64_t read = FileRead(test, 0, (uint8_t *)buf, 1024); print("Read %ld bytes from file\n", read); print("File contents: %s\n", buf); FileClose(test); diff --git a/libc/ElfInterpreter/ld.c b/libc/ElfInterpreter/ld.c index b7224e1..ac23506 100644 --- a/libc/ElfInterpreter/ld.c +++ b/libc/ElfInterpreter/ld.c @@ -126,18 +126,21 @@ static inline void PutCharToKernelConsole(char c) : "rcx", "r11", "memory"); } -void Print(char *String) +void Print__(char *String) { for (short i = 0; String[i] != '\0'; i++) PutCharToKernelConsole(String[i]); } -void PrintNL(char *String) +void PrintNL__(char *String) { - Print(String); - Print("\n"); + Print__(String); + Print__("\n"); } +#define Print(x) Print__(x) +#define PrintNL(x) PrintNL__(x) + void *memcpy(void *dest, const void *src, size_t n) { uint8_t *d = dest; @@ -338,7 +341,7 @@ void (*ELF_LAZY_RESOLVE_MAIN(struct LibAddressCollection *Info, long RelIndex))( // PrintNL("R_X86_64_NONE"); if (*GOTEntry == 0) { - PrintNL("GOTEntry is 0"); + // PrintNL("GOTEntry is 0"); break; } Lock = 0; @@ -473,7 +476,7 @@ int ld_load(int argc, char *argv[], char *envp[]) break; uintptr_t lib_addr = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0); - uintptr_t lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0); + uintptr_t lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_MEMORY_IMAGE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0); if (lib_addr == 0 || lib_mm_image == 0) { enum SyscallsErrorCodes ret = KernelCTL(KCTL_REGISTER_ELF_LIB, (uint64_t)IPCBuffer->Libraries[i].Name, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0); @@ -483,7 +486,7 @@ int ld_load(int argc, char *argv[], char *envp[]) return -0x11B; } lib_addr = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0); - lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_FILE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0); + lib_mm_image = KernelCTL(KCTL_GET_ELF_LIB_MEMORY_IMAGE, (uint64_t)IPCBuffer->Libraries[i].Name, 0, 0, 0); } if (LibsForLazyResolver->Next == NULL) diff --git a/libs/include/sysfile.h b/libs/include/sysfile.h index eee5f72..402af53 100644 --- a/libs/include/sysfile.h +++ b/libs/include/sysfile.h @@ -24,8 +24,8 @@ enum FileFlags File *FileOpen(const char *Path, uint64_t Flags); void FileClose(File *File); -uint64_t FileRead(File *File, uint8_t *Buffer, uint64_t Size); -uint64_t FileWrite(File *File, uint8_t *Buffer, uint64_t Size); +uint64_t FileRead(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size); +uint64_t FileWrite(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size); uint64_t FileSeek(File *File, uint64_t Offset, uint64_t Whence); uint64_t FileStatus(File *File); diff --git a/libs/libsys/File.c b/libs/libsys/File.c index 183f549..2b17568 100644 --- a/libs/libsys/File.c +++ b/libs/libsys/File.c @@ -24,12 +24,12 @@ void FileClose(File *File) KrnlFreePages((uintptr_t)File, sizeof(File) / __FILE_GetPageSize() + 1); } -uint64_t FileRead(File *File, uint8_t *Buffer, uint64_t Size) +uint64_t FileRead(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size) { return syscall3(_FileRead, (uint64_t)File->KernelPrivate, (uint64_t)Buffer, Size); } -uint64_t FileWrite(File *File, uint8_t *Buffer, uint64_t Size) +uint64_t FileWrite(File *File, uint64_t Offset, uint8_t *Buffer, uint64_t Size) { return syscall3(_FileWrite, (uint64_t)File->KernelPrivate, (uint64_t)Buffer, Size); }