Kernel/x86 - Fixed bug in user start, hidden by not updating usermode
[tpg/acess2.git] / Kernel / binary.c
index 8b7e744..76893a3 100644 (file)
@@ -106,7 +106,7 @@ int Proc_Execve(const char *File, const char **ArgV, const char **EnvP)
        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);
        
@@ -158,31 +158,32 @@ int Proc_Execve(const char *File, const char **ArgV, const char **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)
 {
@@ -217,6 +218,7 @@ 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?
@@ -343,7 +345,7 @@ tVAddr Binary_MapIn(tBinary *Binary, const char *Path, tVAddr LoadMin, tVAddr Lo
                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;

UCC git Repository :: git.ucc.asn.au