X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fbin%2Felf.c;h=7998d86c340fcc58437e3ca230ee8c2f72a358af;hb=9fb3c9f3a8eaaacefc5e01718b2c88512a153e75;hp=7e1ef5e9fa407768d60b4c1f58fee45cf74f79f1;hpb=3bcb89ec409dc04c55465bdb79ffc7828f003e3c;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/bin/elf.c b/KernelLand/Kernel/bin/elf.c index 7e1ef5e9..7998d86c 100644 --- a/KernelLand/Kernel/bin/elf.c +++ b/KernelLand/Kernel/bin/elf.c @@ -1,21 +1,27 @@ /* - * 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 # define DISABLE_ELF64 #endif -static int GetSymbol(const char *Name, void **Value, size_t *Size); -static int GetSymbol(const char *Name, void **Value, size_t *Size) { +static int GetSymbol(const char *Name, void **Value, size_t *Size, void *IgnoreBase); +static int GetSymbol(const char *Name, void **Value, size_t *Size, void *IgnoreBase) { 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; @@ -23,8 +29,20 @@ static int GetSymbol(const char *Name, void **Value, size_t *Size) { } #define AddLoaded(a,b) do{}while(0) #define LoadLibrary(a,b,c) (Log_Debug("ELF", "Module requested lib '%s'",a),0) -#define SysSetMemFlags(ad,f,m) do{}while(0) +static int _SysSetMemFlags(tVAddr addr, int flag, int mask) { + if( mask & 1 ) { + if( flag ) { + // Re-set RO, clear COW + MM_SetFlags((void*)addr, MM_PFLAG_RO, MM_PFLAG_RO|MM_PFLAG_COW); + } + else { + MM_SetFlags((void*)addr, MM_PFLAG_RO|MM_PFLAG_COW, MM_PFLAG_RO|MM_PFLAG_COW); + } + } + return 0; +} #include "../../../Usermode/Libraries/ld-acess.so_src/elf.c" +// ---- / ---- #define DEBUG_WARN 1