diff --git a/src/bin/ld/Makefile b/src/bin/ld/Makefile index d9713aa..e77cfb3 100644 --- a/src/bin/ld/Makefile +++ b/src/bin/ld/Makefile @@ -8,7 +8,7 @@ #Linker LD = ld -CFLAGS += -fpic +CFLAGS = -Wall -nostdlib -nostdinc -fno-builtin -O -fpic #Binary File Name OUTPUT = ld.so @@ -21,7 +21,7 @@ # Link The Binary $(OUTPUT) : $(OBJS) - $(CC) -nostdlib -shared -Wl,-soname,$(OUTPUT) -e _ld -o $(OUTPUT) $(OBJS) $(LIBRARIES) $(SUBS) + $(CC) -O -fpic -nostdlib -shared -Wl,-soname,$(OUTPUT) -e _ld -o $(OUTPUT) $(OBJS) $(LIBRARIES) $(SUBS) # strip $(OUTPUT) # Compile the source files diff --git a/src/bin/ld/findfunc.c b/src/bin/ld/findfunc.c index 2f1103a..9b9203f 100644 --- a/src/bin/ld/findfunc.c +++ b/src/bin/ld/findfunc.c @@ -15,7 +15,11 @@ libPtr = ldAddLibrary(lib + lib_s[x]); } + //printf("str: [0x%X]\n",libPtr->linkerDynStr); + //printf("func: [%s]",func); + for (i=0x0;ilinkerSectionHeader[libPtr->sym].shSize/sizeof(elfDynSym);i++) { + // printf("Func: [%s]\n",func); if (!strcmp(func,(libPtr->linkerDynStr + libPtr->linkerRelSymTab[i].dynName))) { funcPtr = (uInt32 *)((uInt32)(libPtr->linkerRelSymTab[i].dynValue) + (uInt32)libPtr->output); if (funcPtr == 0x0) { diff --git a/src/bin/ld/main.c b/src/bin/ld/main.c index 1a67a73..98003d3 100644 --- a/src/bin/ld/main.c +++ b/src/bin/ld/main.c @@ -45,6 +45,7 @@ static Elf32_Dyn *binaryElf32_Dyn = 0x0; //static elfPltInfo *binaryElfRelDyn = 0x0; static elfPltInfo *binaryElfRel = 0x0; +int fTime = 0x0; uInt32 ld(uInt32 got2,uInt32 entry) { int i = 0x0; @@ -55,7 +56,8 @@ uInt32 *reMap = 0x0; FILE *binaryFd = 0x0; - printf("here?\n"); + printf("here? [%i]\n",fTime); + fTime = 0xBA; if (binaryHeader == 0x0) { binaryFd = malloc(sizeof(FILE)); @@ -66,6 +68,8 @@ } printf("binarySectionHeader: [0x%X]\n",(uInt32)binarySectionHeader); + if (binarySectionHeader <= 0x5) + binarySectionHeader = 0; if (binarySectionHeader == 0x0) { printf("b\n"); @@ -121,8 +125,9 @@ } } } + printf("Here2\n"); -/* + /* if ((binaryElfRelDyn == 0x0) && (relDyn != 0)) { binaryElfRelDyn = (elfPltInfo *)malloc(binarySectionHeader[i].shSize); fseek(binaryFd,binarySectionHeader[relDyn].shOffset,0x0); @@ -142,7 +147,9 @@ printf("y: [%i:0x%X]",y,binaryElfRelDyn[x].pltOffset); } } -*/ + */ + + printf("Here3\n"); if (binaryElfRel == 0x0) { binaryElfRel = (elfPltInfo *)malloc(binarySectionHeader[rel].shSize); @@ -154,6 +161,7 @@ i = (entry/sizeof(elfPltInfo)); x = ELF32_R_SYM(binaryElfRel[i].pltInfo); reMap = (uInt32 *)binaryElfRel[i].pltOffset; + printf("[0x%X]",binaryRelSymTab[x].dynName); *reMap = ldFindFunc(binaryDynStr + binaryRelSymTab[x].dynName,binaryDynStr); //printf("\nld(%s:0x%X)",binaryDynStr + binaryRelSymTab[x].dynName,*reMap); //*reMap = ldFindFunc(binaryDynStr + binaryRelSymTab[x].dynName,(char *)(binaryDynStr + 1)); @@ -164,6 +172,8 @@ } */ + printf("Here4\n"); + return(*reMap); } diff --git a/src/bin/rtld-elf/Makefile b/src/bin/rtld-elf/Makefile index f67e858..28e62e5 100644 --- a/src/bin/rtld-elf/Makefile +++ b/src/bin/rtld-elf/Makefile @@ -9,7 +9,7 @@ #-Werror CFLAGS+= -Wall -DFREEBSD_ELF -DIN_RTLD -DPIC -CFLAGS = -O2 -fno-strict-aliasing -pipe -Wall -DFREEBSD_ELF -DIN_RTLD -I./ -fpic -elf -DPIC -std=gnu99 -Wformat=2 -Wno-format-extra-args -DDEBUG +CFLAGS = -O -fpic -fno-strict-aliasing -pipe -Wall -DFREEBSD_ELF -DIN_RTLD -I./ -elf -DPIC -std=gnu99 -Wformat=2 -Wno-format-extra-args -DDEBUG #Linker diff --git a/src/sys/kernel/exec.c b/src/sys/kernel/exec.c index 990e05a..2bbed38 100644 --- a/src/sys/kernel/exec.c +++ b/src/sys/kernel/exec.c @@ -489,6 +489,7 @@ #ifdef DEBUG kprintf("Interp: [%s]\n",interp); #endif + kprintf("Interp: [%s]\n",interp); ldAddr = ldEnable(); break; default: diff --git a/src/sys/kernel/ld.c b/src/sys/kernel/ld.c index 32282cf..12328ef 100644 --- a/src/sys/kernel/ld.c +++ b/src/sys/kernel/ld.c @@ -150,16 +150,20 @@ case R_386_RELATIVE: *reMap += (uInt32)LD_START; break; + case R_386_JMP_SLOT: + *reMap = ((uInt32)LD_START + relSymTab[rel].dynValue); + break; + case R_386_GLOB_DAT: + //kprintf("relTab [%s][0x%X][0x%X]\n",dynStr + relSymTab[rel].dynName,relSymTab[rel].dynValue,relSymTab[rel].dynName); + *reMap = ((uInt32)LD_START + relSymTab[rel].dynValue); + break; default: kprintf("[0x%X][0x%X](%i)[%s]\n",elfRel[x].pltOffset,elfRel[x].pltInfo,rel,elfGetRelType(ELF32_R_TYPE(elfRel[x].pltInfo))); - kprintf("relTab [%s][0x%X][0x%X]\n",dynStr + relSymTab[rel].dynName,relSymTab[rel].dynValue,relSymTab[rel].dynName); break; } } kfree(elfRel); break; - case 8: - break; case 11: relSymTab = (elfDynSym *)kmalloc(sectionHeader[i].shSize); fseek(ldFd,sectionHeader[i].shOffset,0x0); @@ -167,7 +171,7 @@ sym = i; break; default: - //kprintf("Unhandled Section: %s, 0x%X",shStr + sectionHeader[i].shName,sectionHeader[i].shType); + kprintf("Unhandled Section: %s, 0x%X",shStr + sectionHeader[i].shName,sectionHeader[i].shType); break; } } diff --git a/src/sys/vmm/vmm_virtual.c b/src/sys/vmm/vmm_virtual.c index eb297d6..f48c13f 100644 --- a/src/sys/vmm/vmm_virtual.c +++ b/src/sys/vmm/vmm_virtual.c @@ -413,8 +413,6 @@ if ((newStackPage = (uInt32 *) vmmGetFreeKernelPage(pid,1)) == 0x0) kpanic("Error: newStackPage == NULL, File: %s, Line: %i\n",__FILE__,__LINE__); - memset(newStackPage,0x0,0x1000); - /* Set Pointer To Parents Stack Page */ parentStackPage = (uInt32 *) (((1024 * 4096) * x) + (4096 * i)); diff --git a/src/tools/Makefile b/src/tools/Makefile index 47b57b6..0514299 100644 --- a/src/tools/Makefile +++ b/src/tools/Makefile @@ -45,7 +45,7 @@ (cp ../bin/fdisk/fdisk /mnts/ubix/bin) #(cp ../bin/edit/edit /mnts/ubix/bin) (cp ../bin/cat/cat /mnts/ubix/bin) - #(cp ../bin/ld/ld.so /mnts/ubix/lib) + (cp ../bin/ld/ld.so /mnts/ubix/lib) #(cp ../bin/rtld-elf/ld-elf.so.1 /mnts/ubix/libexec) #(cp ../bin/tcc/tcc /mnts/ubix/bin) (cp ../lib/libc_old/libc_old.so /mnts/ubix/lib)