diff --git a/exec/elf/elf_loader.cpp b/exec/elf/elf_loader.cpp index 71d098b..ac5a739 100644 --- a/exec/elf/elf_loader.cpp +++ b/exec/elf/elf_loader.cpp @@ -317,18 +317,6 @@ namespace Execute TargetProcess->ProgramBreak->InitBrk(ProgramBreak); } - struct stat statbuf; - fstat(fd, &statbuf); - Memory::SmartHeap sh = Memory::SmartHeap(statbuf.st_size); - lseek(fd, 0, SEEK_SET); - fread(fd, sh, statbuf.st_size); - TargetProcess->ELFSymbolTable->AppendSymbols(uintptr_t(sh.Get())); - -#ifdef DEBUG - if (!TargetProcess->ELFSymbolTable->SymTableExists) - debug("NO SYMBOL TABLE FOUND?"); -#endif - debug("Entry Point: %#lx", EntryPoint); this->GenerateAuxiliaryVector_x86_64(vma, fd, ELFHeader, @@ -742,18 +730,6 @@ namespace Execute /* ------------------------------------------------------------------------ */ - struct stat statbuf; - fstat(fd, &statbuf); - Memory::SmartHeap sh = Memory::SmartHeap(statbuf.st_size); - lseek(fd, 0, SEEK_SET); - fread(fd, sh, statbuf.st_size); - TargetProcess->ELFSymbolTable->AppendSymbols(uintptr_t(sh.Get()), BaseAddress); - - if (!TargetProcess->ELFSymbolTable->SymTableExists) - { - debug("NO SYMBOL TABLE FOUND?"); - } - debug("Entry Point: %#lx", EntryPoint); this->GenerateAuxiliaryVector_x86_64(vma, fd, ELFHeader, diff --git a/exec/spawn.cpp b/exec/spawn.cpp index ad124ba..0b8cc68 100644 --- a/exec/spawn.cpp +++ b/exec/spawn.cpp @@ -99,11 +99,6 @@ namespace Execute /* ------------------------------------------------------------------------------------------------------------------------------ */ - void *ElfFile = KernelAllocator.RequestPages(TO_PAGES(statbuf.st_size + 1)); - fread(fd, (uint8_t *)ElfFile, statbuf.st_size); - debug("Loaded elf %s at %#lx with the length of %ld", - Path, ElfFile, statbuf.st_size); - PCB *Process; if (Fork) { @@ -119,10 +114,7 @@ namespace Execute } fixme("free allocated memory"); - fixme("change symbol table"); // Process->vma->FreeAllPages(); - delete Process->ELFSymbolTable; - Process->ELFSymbolTable = new SymbolResolver::Symbols((uintptr_t)ElfFile); } else { @@ -132,8 +124,7 @@ namespace Execute Process = TaskManager->CreateProcess(Parent, BaseName, TaskExecutionMode::User, - ElfFile, false, - 0, 0); + false, 0, 0); Process->Info.Compatibility = Compatibility; Process->Info.Architecture = Arch; } @@ -141,8 +132,6 @@ namespace Execute Process->SetWorkingDirectory(fs->GetNodeFromPath(Path)->Parent); Process->SetExe(Path); - KernelAllocator.FreePages(ElfFile, TO_PAGES(statbuf.st_size + 1)); - ELFObject *obj = new ELFObject(Path, Process, argv, envp); if (!obj->IsValid) { diff --git a/include/task.hpp b/include/task.hpp index 8b5856d..22dd91c 100644 --- a/include/task.hpp +++ b/include/task.hpp @@ -441,7 +441,6 @@ namespace Tasking /* Other */ Signal *Signals; - SymbolResolver::Symbols *ELFSymbolTable; /* Threads & Children */ std::list Threads; @@ -462,10 +461,8 @@ namespace Tasking PCB *Parent, const char *Name, TaskExecutionMode ExecutionMode, - void *Image = nullptr, bool UseKernelPageTable = false, - uint16_t UserID = -1, - uint16_t GroupID = -1); + uint16_t UserID = -1, uint16_t GroupID = -1); ~PCB(); }; @@ -641,7 +638,6 @@ namespace Tasking PCB *CreateProcess(PCB *Parent, const char *Name, TaskExecutionMode TrustLevel, - void *Image = nullptr, bool UseKernelPageTable = false, uint16_t UserID = UINT16_MAX, uint16_t GroupID = UINT16_MAX); diff --git a/syscalls/linux.cpp b/syscalls/linux.cpp index e887c87..14311c0 100644 --- a/syscalls/linux.cpp +++ b/syscalls/linux.cpp @@ -686,10 +686,9 @@ static pid_t linux_fork(SysFrm *sf) PCB *Parent = Thread->Parent; PCB *NewProcess = - TaskManager->CreateProcess(Parent, - Parent->Name, + TaskManager->CreateProcess(Parent, Parent->Name, Parent->Security.ExecutionMode, - nullptr, true); + true); if (unlikely(!NewProcess)) { error("Failed to create process for fork"); @@ -702,17 +701,6 @@ static pid_t linux_fork(SysFrm *sf) NewProcess->ProgramBreak->SetTable(NewProcess->PageTable); NewProcess->FileDescriptors->Fork(Parent->FileDescriptors); - if (Parent->ELFSymbolTable && - Parent->ELFSymbolTable->SymTableExists) - { - NewProcess->ELFSymbolTable = new SymbolResolver::Symbols(0); - foreach (auto sym in Parent->ELFSymbolTable->GetSymTable()) - { - NewProcess->ELFSymbolTable->AddSymbol(sym.Address, - sym.FunctionName); - } - } - TCB *NewThread = TaskManager->CreateThread(NewProcess, 0, diff --git a/syscalls/native/fork.cpp b/syscalls/native/fork.cpp index 5602c78..377964c 100644 --- a/syscalls/native/fork.cpp +++ b/syscalls/native/fork.cpp @@ -58,10 +58,9 @@ int sys_fork(SysFrm *Frame) TCB *Thread = thisThread; PCB *NewProcess = - TaskManager->CreateProcess(Parent, - Parent->Name, + TaskManager->CreateProcess(Parent, Parent->Name, Parent->Security.ExecutionMode, - nullptr, true); + true); if (!NewProcess) { @@ -69,17 +68,6 @@ int sys_fork(SysFrm *Frame) return -EAGAIN; } - if (Parent->ELFSymbolTable && - Parent->ELFSymbolTable->SymTableExists) - { - NewProcess->ELFSymbolTable = new SymbolResolver::Symbols(0); - foreach (auto sym in Parent->ELFSymbolTable->GetSymTable()) - { - NewProcess->ELFSymbolTable->AddSymbol(sym.Address, - sym.FunctionName); - } - } - NewProcess->PageTable = Parent->PageTable->Fork(); TCB *NewThread = diff --git a/tasking/process.cpp b/tasking/process.cpp index 2941d81..7d331b4 100644 --- a/tasking/process.cpp +++ b/tasking/process.cpp @@ -127,7 +127,7 @@ namespace Tasking } PCB::PCB(Task *ctx, PCB *Parent, const char *Name, - TaskExecutionMode ExecutionMode, void *Image, + TaskExecutionMode ExecutionMode, bool UseKernelPageTable, uint16_t UserID, uint16_t GroupID) : Node(ProcFS, std::to_string(ctx->NextPID), NodeType::DIRECTORY) @@ -208,9 +208,6 @@ namespace Tasking this->ProgramBreak = new Memory::ProgramBreak(this->PageTable, this->vma); this->Signals = new Signal(this); - if (Image) - this->ELFSymbolTable = new SymbolResolver::Symbols((uintptr_t)Image); - debug("Process page table: %#lx", this->PageTable); debug("Created %s process \"%s\"(%d). Parent \"%s\"(%d)", ExecutionMode == TaskExecutionMode::User ? "user" : "kernel", @@ -247,10 +244,6 @@ namespace Tasking ctx->ProcessList.end(), this)); - debug("Freeing symbol table strings"); - if (this->ELFSymbolTable) - delete this->ELFSymbolTable; - debug("Freeing signals"); delete this->Signals; diff --git a/tasking/task.cpp b/tasking/task.cpp index ec03670..94acafd 100644 --- a/tasking/task.cpp +++ b/tasking/task.cpp @@ -313,15 +313,12 @@ namespace Tasking PCB *Task::CreateProcess(PCB *Parent, const char *Name, TaskExecutionMode ExecutionMode, - void *Image, bool UseKernelPageTable, - uint16_t UserID, - uint16_t GroupID) + uint16_t UserID, uint16_t GroupID) { SmartLock(TaskingLock); return new PCB(this, Parent, Name, ExecutionMode, - Image, UseKernelPageTable, - UserID, GroupID); + UseKernelPageTable, UserID, GroupID); } void Task::StartScheduler() @@ -383,10 +380,8 @@ namespace Tasking #endif KernelProcess = CreateProcess(nullptr, "Kernel", - TaskExecutionMode::Kernel, - nullptr, true); + TaskExecutionMode::Kernel, true); KernelProcess->PageTable = KernelPageTable; - KernelProcess->ELFSymbolTable = KernelSymbolTable; TCB *kthrd = CreateThread(KernelProcess, EntryPoint, nullptr, nullptr, std::vector(), Arch); @@ -418,9 +413,7 @@ namespace Tasking } IdleProcess = CreateProcess(nullptr, (char *)"Idle", - TaskExecutionMode::Kernel, - nullptr, true); - IdleProcess->ELFSymbolTable = KernelSymbolTable; + TaskExecutionMode::Kernel, true); for (int i = 0; i < SMP::CPUCores; i++) { TCB *thd = CreateThread(IdleProcess, IP(IdleProcessLoop)); diff --git a/tests/taskmgr.cpp b/tests/taskmgr.cpp index 86bc63e..fca16b4 100644 --- a/tests/taskmgr.cpp +++ b/tests/taskmgr.cpp @@ -153,13 +153,11 @@ void TaskMgr() #if defined(a64) printf(" \e%s-> \eAABBCC%s \e00AAAA%s %ld%% (KT: %ld UT: %ld, IP: \e24FF2B%#lx \eEDFF24%s\e00AAAA)\n\eAABBCC", Statuses[State], Thd->Name, StatusesSign[State], ThreadCpuUsage, Thd->Info.KernelTime, - Thd->Info.UserTime, Thd->Registers.rip, - Thd->Parent->ELFSymbolTable ? Thd->Parent->ELFSymbolTable->GetSymbol(Thd->Registers.rip) : "unknown"); + Thd->Info.UserTime, Thd->Registers.rip, "unknown"); #elif defined(a32) printf(" \e%s-> \eAABBCC%s \e00AAAA%s %lld%% (KT: %lld UT: %lld, IP: \e24FF2B%#x \eEDFF24%s\e00AAAA)\n\eAABBCC", Statuses[State], Thd->Name, StatusesSign[State], ThreadCpuUsage, Thd->Info.KernelTime, - Thd->Info.UserTime, Thd->Registers.eip, - Thd->Parent->ELFSymbolTable ? Thd->Parent->ELFSymbolTable->GetSymbol(Thd->Registers.eip) : "unknown"); + Thd->Info.UserTime, Thd->Registers.eip, "unknown"); #elif defined(aa64) #endif }