char **argvSaved, **envpSaved;
char *savedFile;
tVAddr entry;
- Uint bases[2] = {0}; // Uint because Proc_StartUser wants it
+ Uint base; // Uint because Proc_StartUser wants it
ENTER("sFile pArgV pEnvP", File, ArgV, EnvP);
MM_ClearUser();
// --- Load new binary
- bases[0] = Binary_Load(savedFile, &entry);
+ base = Binary_Load(savedFile, &entry);
free(savedFile);
- if(bases[0] == 0)
+ if(base == 0)
{
+ free(argvSaved);
Log_Warning("Binary", "Proc_Execve - Unable to load '%s'", Threads_GetName(-1));
LEAVE('-');
Threads_Exit(0, -10);
for(;;);
}
- LOG("entry = 0x%x, bases[0] = 0x%x", entry, bases[0]);
+ LOG("entry = 0x%x, base = 0x%x", entry, base);
// MM_DumpTables(0, KERNEL_BASE);
LEAVE('-');
// --- And... Jump to it
- Proc_StartUser(entry, bases, argc, argvSaved, envpSaved, argenvBytes);
+ Proc_StartUser(entry, base, argc, argvSaved, argenvBytes);
for(;;); // Tell GCC that we never return
}
/**
- * \fn tVAddr Binary_Load(char *Path, tVAddr *EntryPoint)
* \brief Load a binary into the current address space
* \param Path Path to binary to load
* \param EntryPoint Pointer for exectuable entry point
+ * \return Virtual address where the binary has been loaded
*/
tVAddr Binary_Load(const char *Path, tVAddr *EntryPoint)
{
VFS_Close(fd);
mount_id = info.mount;
inode = info.inode;
+ LOG("mount_id = %i, inode = %i", mount_id, inode);
}
// TODO: Also get modifcation time?
tBinarySection *sect = &Binary->LoadSections[i];
Uint protflags, mapflags;
tVAddr addr = sect->Virtual - Binary->Base + base;
- LOG("%i - %p to 0x%llx (%x)", i, addr, sect->Offset, sect->Flags);
+ LOG("%i - %p to offset 0x%llx (%x)", i, addr, sect->Offset, sect->Flags);
protflags = MMAP_PROT_READ;
mapflags = MMAP_MAP_FIXED;