mirror of
https://github.com/Fennix-Project/Userspace.git
synced 2025-05-25 22:14:28 +00:00
Fix multiple bugs throughout the codebase
This commit is contained in:
parent
baacbbdbd7
commit
e5b83f6b72
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user