From 36f72031b1abaf376b10673c8ae9f2e3419f091b Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Mon, 14 Jan 2019 20:31:48 -0500 Subject: [PATCH] kernel: Obey "load_symbols" kernel setting. Somehow this was never implemented... --- src/system/kernel/elf.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/system/kernel/elf.cpp b/src/system/kernel/elf.cpp index ea76f0327e..eacfd7c2a0 100644 --- a/src/system/kernel/elf.cpp +++ b/src/system/kernel/elf.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include #include @@ -93,6 +94,7 @@ static mutex sImageMutex = MUTEX_INITIALIZER("kimages_lock"); static mutex sImageLoadMutex = MUTEX_INITIALIZER("kimages_load_lock"); // serializes loading/unloading add-ons locking order // sImageLoadMutex -> sImageMutex +static bool sLoadElfSymbols = false; static bool sInitialized = false; @@ -2393,8 +2395,7 @@ load_kernel_add_on(const char *path) vm_unreserve_address_range(VMAddressSpace::KernelID(), reservedAddress, reservedSize); - // ToDo: this should be enabled by kernel settings! - if (1) + if (sLoadElfSymbols) load_elf_symbol_table(fd, image); free(programHeaders); @@ -2721,12 +2722,19 @@ elf_read_kernel_image_symbols(image_id id, elf_sym* symbolTable, status_t -elf_init(kernel_args *args) +elf_init(kernel_args* args) { - struct preloaded_image *image; + struct preloaded_image* image; image_init(); + if (void* handle = load_driver_settings("kernel")) { + sLoadElfSymbols = get_driver_boolean_parameter(handle, "load_symbols", + false, false); + + unload_driver_settings(handle); + } + sImagesHash = new(std::nothrow) ImageHash(); if (sImagesHash == NULL) return B_NO_MEMORY;