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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 delta 1031 zcmZoTVApWKZUYYs>ndgjhPcUsEYh5_)59>Q6=H;ap>6KKJFibzAz@f-xc%bnJ0|x^`^x^4wG8|3QOgQ+a zFH_`bU=*BguEbHP&ImL_h=GUU5X4Ld2%neX29&Q2mgk@TT#4hhie+j}T6}6=Nl|4P zP?!aXnFJX?rZX_|F);9g_(Id~nRBR2kCWx#-ma>`!Om!0l%JAVlBgFSg```rxTMHX z&yYc{C^bi~B(3?K7LZ<7eaYS&I0D~4}mC*EFHICPejFS)E z5}w|p&LP0M2;_k23)MNKIgNl!5Li6@tvZLeXb8|dARmFk7zEY>u{KDfWdKl^6UcJ_ zVi2eSnl1pOg@BkJh(VqM*_Ht{0muY{ThlMfaj5g&0dh6~rG$aB;PkmR9MY^kzzBT? rcGLwMprd+#23Bl;sKFu6435=dL}+jopen("/_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)