From 5e972c0f3d2d525d5967f21960f7cf9ebfc6ff15 Mon Sep 17 00:00:00 2001 From: Fredrik Holmqvist Date: Tue, 15 Dec 2009 15:55:16 +0000 Subject: [PATCH] Implemented TODO about not loading symbols at boot. This saves ~0.5s of boot time here, but I suspect it might be better for CD. Enabled loadSymbols in kernel settings so the behavior should be the same as before this change. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34666 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- data/settings/kernel/drivers/kernel | 2 +- src/system/boot/loader/elf.cpp | 15 +++++++++++++-- src/system/boot/loader/elf.h | 1 + src/system/boot/loader/loader.cpp | 1 + 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/data/settings/kernel/drivers/kernel b/data/settings/kernel/drivers/kernel index f27ac82378..8d325b8c8a 100644 --- a/data/settings/kernel/drivers/kernel +++ b/data/settings/kernel/drivers/kernel @@ -42,7 +42,7 @@ # Activates a hack that allows single-stepping under qemu # to work. -#load_symbols true +load_symbols true # load kernel and kernel add-on symbols, default is off #apm true diff --git a/src/system/boot/loader/elf.cpp b/src/system/boot/loader/elf.cpp index 4940f0e822..fc25856a38 100644 --- a/src/system/boot/loader/elf.cpp +++ b/src/system/boot/loader/elf.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -24,6 +25,17 @@ #endif +static bool _loadElfSymbols = false; + + +void +elf_init() { + void *settings = load_driver_settings("kernel"); + _loadElfSymbols = !get_driver_boolean_parameter(settings, "load_symbols", + false, false); +} + + static status_t verify_elf_header(struct Elf32_Ehdr &header) { @@ -370,8 +382,7 @@ elf_load_image(int fd, preloaded_image *image) image->debug_symbols = NULL; image->debug_string_table = NULL; - // ToDo: this should be enabled by kernel settings! - if (1) + if (_loadElfSymbols) load_elf_symbol_table(fd, image); free(programHeaders); diff --git a/src/system/boot/loader/elf.h b/src/system/boot/loader/elf.h index 29b991ee6a..8a899b6aff 100644 --- a/src/system/boot/loader/elf.h +++ b/src/system/boot/loader/elf.h @@ -10,6 +10,7 @@ #include +extern void elf_init(); extern status_t elf_load_image(Directory *directory, const char *path); extern status_t elf_load_image(int fd, preloaded_image *image); diff --git a/src/system/boot/loader/loader.cpp b/src/system/boot/loader/loader.cpp index cce476bfdf..37d06e73d5 100644 --- a/src/system/boot/loader/loader.cpp +++ b/src/system/boot/loader/loader.cpp @@ -60,6 +60,7 @@ load_kernel(stage2_args *args, Directory *volume) dprintf("load kernel...\n"); + elf_init(); status_t status = elf_load_image(fd, &gKernelArgs.kernel_image); close(fd);