X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fbinary.c;h=8b7e7448325974ca267618cf0abbfb7a015203d9;hb=c43c05ef3234d6118ce601d299df60383d54ac7b;hp=fb31fc3b261a0ef87cd4ea9329a5efa8a4f545d6;hpb=1961808f2b5eea942c11391d91a50e28eb780dde;p=tpg%2Facess2.git diff --git a/Kernel/binary.c b/Kernel/binary.c index fb31fc3b..8b7e7448 100644 --- a/Kernel/binary.c +++ b/Kernel/binary.c @@ -2,7 +2,7 @@ * Acess2 * Common Binary Loader */ -#define DEBUG 1 +#define DEBUG 0 #include #include #include @@ -169,6 +169,9 @@ int Proc_Execve(const char *File, const char **ArgV, const char **EnvP) } LOG("entry = 0x%x, bases[0] = 0x%x", entry, bases[0]); + +// MM_DumpTables(0, KERNEL_BASE); + LEAVE('-'); // --- And... Jump to it Proc_StartUser(entry, bases, argc, argvSaved, envpSaved, argenvBytes); @@ -293,6 +296,7 @@ tVAddr Binary_MapIn(tBinary *Binary, const char *Path, tVAddr LoadMin, tVAddr Lo // Check if base is free if(base != 0) { + LOG("Checking base %p", base); for(i=0;iNumSections;i++) { if( Binary_int_CheckMemFree( Binary->LoadSections[i].Virtual, Binary->LoadSections[i].MemSize ) ) @@ -322,6 +326,7 @@ tVAddr Binary_MapIn(tBinary *Binary, const char *Path, tVAddr LoadMin, tVAddr Lo // Else decrement pointer and try again base -= BIN_GRANUALITY; } + LOG("Allocated base %p", base); } // Error Check @@ -338,7 +343,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 - 0x%x to 0x%x", i, addr, sect->Offset); + LOG("%i - %p to 0x%llx (%x)", i, addr, sect->Offset, sect->Flags); protflags = MMAP_PROT_READ; mapflags = MMAP_MAP_FIXED; @@ -359,10 +364,12 @@ tVAddr Binary_MapIn(tBinary *Binary, const char *Path, tVAddr LoadMin, tVAddr Lo protflags, MMAP_MAP_PRIVATE|mapflags, 0, 0 ); +// memset((void*)(addr + sect->FileSize), 0, sect->MemSize - sect->FileSize); } } Log_Debug("Binary", "PID %i - Mapped '%s' to 0x%x", Threads_GetPID(), Path, base); + VFS_Close(fd); //LOG("*0x%x = 0x%x\n", binary->Pages[0].Virtual, *(Uint*)binary->Pages[0].Virtual); @@ -407,7 +414,7 @@ tBinary *Binary_DoLoad(tMount MountID, tInode Inode, const char *Path) { tBinary *pBinary; int fp; - Uint ident; + Uint32 ident; tBinaryType *bt = gRegBinTypes; ENTER("iMountID XInode sPath", MountID, Inode, Path); @@ -419,19 +426,26 @@ tBinary *Binary_DoLoad(tMount MountID, tInode Inode, const char *Path) LEAVE('n'); return NULL; } + + LOG("fp = 0x%x", fp); // Read File Type VFS_Read(fp, 4, &ident); VFS_Seek(fp, 0, SEEK_SET); + LOG("ident = 0x%x", ident); + // Determine the type for(; bt; bt = bt->Next) { - if( (ident & bt->Mask) != (Uint)bt->Ident ) + if( (ident & bt->Mask) != (Uint32)bt->Ident ) continue; + LOG("bt = %p (%s)", bt, bt->Name); pBinary = bt->Load(fp); break; } + + LOG("pBinary = %p", pBinary); // Close File VFS_Close(fp); @@ -761,6 +775,7 @@ Uint Binary_FindSymbol(void *Base, const char *Name, Uint *Val) int Binary_int_CheckMemFree( tVAddr _start, size_t _len ) { _len += _start & (PAGE_SIZE-1); + _len = (_len + PAGE_SIZE - 1) & ~(PAGE_SIZE-1); _start &= ~(PAGE_SIZE-1); for( ; _len > PAGE_SIZE; _len -= PAGE_SIZE, _start += PAGE_SIZE ) { if( MM_GetPhysAddr(_start) != 0 )