From befeabd8fe47e6d33b0e5648d7db8dbff5eb280e Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 22 Oct 2018 14:41:54 +0200 Subject: [PATCH] Okay, with some mucking around, there is now a /bin/id and it runs! It statically links against everything in LibC that it needs. This will work just fine for a long time to come! --- Kernel/_fs_contents | Bin 1024000 -> 1024000 bytes Kernel/init.cpp | 4 ++-- LibC/stdio.cpp | 17 ++++++++--------- Userland/Makefile | 2 +- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/Kernel/_fs_contents b/Kernel/_fs_contents index 2d8bec64f7da6a25617d04665c6c982e653725ce..fb6d9448f36ba6b201e761b0b70a326d0b1b8c3d 100644 GIT binary patch delta 9519 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 O4>jn3J+rvMSRDWicQsT1 diff --git a/Kernel/init.cpp b/Kernel/init.cpp index 844a7107f8..238f6d4253 100644 --- a/Kernel/init.cpp +++ b/Kernel/init.cpp @@ -150,14 +150,14 @@ static void init_stage2() #ifdef TEST_ELF_LOADER { - auto testExecutable = vfs->open("/_test.o"); + auto testExecutable = vfs->open("/bin/id"); ASSERT(testExecutable); auto testExecutableData = testExecutable->readEntireFile(); ASSERT(testExecutableData); ExecSpace space; space.loadELF(move(testExecutableData)); - auto* elf_entry = space.symbolPtr("elf_entry"); + auto* elf_entry = space.symbolPtr("_start"); ASSERT(elf_entry); typedef int (*MainFunctionPtr)(void); diff --git a/LibC/stdio.cpp b/LibC/stdio.cpp index c8b03a9f9e..dd5b26f9a5 100644 --- a/LibC/stdio.cpp +++ b/LibC/stdio.cpp @@ -3,14 +3,13 @@ #include "types.h" #include -template -int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields) -{ - static const char h[] = { - '0','1','2','3','4','5','6','7', - '8','9','a','b','c','d','e','f' - }; +#define ALWAYS_INLINE __attribute__ ((always_inline)) +static const char h[] = { '0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f' }; + +template +ALWAYS_INLINE int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields) +{ int ret = 0; byte shr_count = fields * 4; while (shr_count) { @@ -22,7 +21,7 @@ int printHex(PutChFunc putch, char*& bufptr, dword number, byte fields) } template -int printNumber(PutChFunc putch, char*& bufptr, dword number) +ALWAYS_INLINE int printNumber(PutChFunc putch, char*& bufptr, dword number) { dword divisor = 1000000000; char ch; @@ -49,7 +48,7 @@ int printNumber(PutChFunc putch, char*& bufptr, dword number) } template -static int printSignedNumber(PutChFunc putch, char*& bufptr, int number) +ALWAYS_INLINE int printSignedNumber(PutChFunc putch, char*& bufptr, int number) { if (number < 0) { putch(bufptr, '-'); diff --git a/Userland/Makefile b/Userland/Makefile index 89aaa30237..a3506661b3 100644 --- a/Userland/Makefile +++ b/Userland/Makefile @@ -18,7 +18,7 @@ CXXFLAGS = $(WARNING_FLAGS) $(OPTIMIZATION_FLAGS) $(USERLAND_FLAGS) $(FLAVOR_FLA CXX = g++ LD = ld AR = ar -LDFLAGS = --strip-debug -melf_i386 --gc-sections --build-id=none -z norelro -z now +LDFLAGS = -r -static --strip-debug -melf_i386 --build-id=none -z norelro -z now -e _start all: $(OBJS) $(APPS)