From e9a7ae01935b78f05698668d57c4748a8e931d9a Mon Sep 17 00:00:00 2001 From: "John Hodge (sonata)" Date: Tue, 6 Nov 2012 13:12:11 +0800 Subject: [PATCH] Kernel - Fixing bugs in kernel-land ELF relocation --- KernelLand/Kernel/bin/elf.c | 13 ++++++++++--- KernelLand/Kernel/binary.c | 2 +- KernelLand/Kernel/syscalls.c | 3 +++ KernelLand/Kernel/vfs/mmap.c | 2 +- .../Modules/Filesystems/InitRD/GenerateInitRD.php | 2 ++ 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/KernelLand/Kernel/bin/elf.c b/KernelLand/Kernel/bin/elf.c index 7e1ef5e9..4456a2c8 100644 --- a/KernelLand/Kernel/bin/elf.c +++ b/KernelLand/Kernel/bin/elf.c @@ -1,11 +1,15 @@ /* - * Acess v0.1 - * ELF Executable Loader Code + * Acess2 Kernel + * - By John Hodge (thePowersGang) + * + * elf.c + * - ELF Executable Loader Code */ #define DEBUG 0 #include #include +// ---- Import linking code from userland #define _COMMON_H #define SysDebug(v...) LOG(v) #if BITS <= 32 @@ -14,8 +18,10 @@ static int GetSymbol(const char *Name, void **Value, size_t *Size); static int GetSymbol(const char *Name, void **Value, size_t *Size) { Uint val; - if(Binary_GetSymbol(Name, &val)) + if(!Binary_GetSymbol(Name, &val)) { + Log_Notice("ELF", "Lookup of '%s' failed", Name); return 0; + } if(Size) *Size=0; *Value = (void*)val; @@ -25,6 +31,7 @@ static int GetSymbol(const char *Name, void **Value, size_t *Size) { #define LoadLibrary(a,b,c) (Log_Debug("ELF", "Module requested lib '%s'",a),0) #define SysSetMemFlags(ad,f,m) do{}while(0) #include "../../../Usermode/Libraries/ld-acess.so_src/elf.c" +// ---- / ---- #define DEBUG_WARN 1 diff --git a/KernelLand/Kernel/binary.c b/KernelLand/Kernel/binary.c index ec5db13f..92baa737 100644 --- a/KernelLand/Kernel/binary.c +++ b/KernelLand/Kernel/binary.c @@ -2,7 +2,7 @@ * Acess2 * Common Binary Loader */ -#define DEBUG 1 +#define DEBUG 0 #include #include #include diff --git a/KernelLand/Kernel/syscalls.c b/KernelLand/Kernel/syscalls.c index 3dc19555..99c79424 100644 --- a/KernelLand/Kernel/syscalls.c +++ b/KernelLand/Kernel/syscalls.c @@ -410,6 +410,9 @@ int Syscall_MM_SetFlags(const void *Addr, Uint Flags, Uint Mask) tPAddr paddr = MM_GetPhysAddr(Addr); Flags &= MM_PFLAG_RO|MM_PFLAG_EXEC; Mask &= MM_PFLAG_RO|MM_PFLAG_EXEC; + + //Log_Debug("Syscalls", "SYS_SETFLAGS: %p %x %x", Addr, Flags, Mask); + // Enable write? if( (Mask & MM_PFLAG_RO) && !(Flags & MM_PFLAG_RO) ) { void *node; diff --git a/KernelLand/Kernel/vfs/mmap.c b/KernelLand/Kernel/vfs/mmap.c index 15dacf20..89301773 100644 --- a/KernelLand/Kernel/vfs/mmap.c +++ b/KernelLand/Kernel/vfs/mmap.c @@ -5,7 +5,7 @@ * mmap.c * - VFS_MMap support */ -#define DEBUG 1 +#define DEBUG 0 #include #include #include diff --git a/KernelLand/Modules/Filesystems/InitRD/GenerateInitRD.php b/KernelLand/Modules/Filesystems/InitRD/GenerateInitRD.php index 4a6635b4..51194425 100644 --- a/KernelLand/Modules/Filesystems/InitRD/GenerateInitRD.php +++ b/KernelLand/Modules/Filesystems/InitRD/GenerateInitRD.php @@ -1,4 +1,6 @@