From 8a865c11ec25c1d313146c055f5efaea862e7a8d Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 9 Nov 2018 20:40:39 +0100 Subject: [PATCH] Pre-size the ksyms vector for speedier loading. Also show loading progress on the screen because it looks neat. --- Kernel/init.cpp | 11 +++++++++++ Kernel/mkmap.sh | 5 ++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Kernel/init.cpp b/Kernel/init.cpp index 216e93983c7..0494f7f1e21 100644 --- a/Kernel/init.cpp +++ b/Kernel/init.cpp @@ -83,6 +83,14 @@ static void loadKsyms(const ByteBuffer& buffer) auto* bufptr = (const char*)buffer.pointer(); auto* startOfName = bufptr; dword address = 0; + dword ksym_count = 0; + + for (unsigned i = 0; i < 8; ++i) + ksym_count = (ksym_count << 4) | parseHexDigit(*(bufptr++)); + s_ksyms->ensureCapacity(ksym_count); + ++bufptr; // skip newline + + kprintf("Loading ksyms: \033[s"); while (bufptr < buffer.endPointer()) { for (unsigned i = 0; i < 8; ++i) @@ -96,8 +104,11 @@ static void loadKsyms(const ByteBuffer& buffer) } // FIXME: The Strings here should be eternally allocated too. ksyms().append({ address, String(startOfName, bufptr - startOfName) }); + + kprintf("\033[u\033[s%u/%u", ksyms().size(), ksym_count); ++bufptr; } + kprintf("\n"); s_ksyms_ready = true; } diff --git a/Kernel/mkmap.sh b/Kernel/mkmap.sh index 01c84a81ddd..49429087258 100644 --- a/Kernel/mkmap.sh +++ b/Kernel/mkmap.sh @@ -1,5 +1,8 @@ #!/bin/sh tmp=$(mktemp) nm -C kernel > $tmp -perl -lpe '$_=hex' $tmp | paste -d" " - $tmp | sort -n | cut -d" " -f 2- > kernel.map +perl -lpe '$_=hex' $tmp | paste -d" " - $tmp | sort -n | cut -d" " -f 2- > kernel.map.tmp +printf "%08x\n" $(wc -l kernel.map.tmp | cut -f1 -d' ') > kernel.map +cat kernel.map.tmp >> kernel.map +rm -f kernel.map.tmp rm $tmp