aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.vscode/launch.json2
-rw-r--r--CMakeLists.txt6
-rw-r--r--cmake/Modules/ElfTransformations.cmake36
3 files changed, 42 insertions, 2 deletions
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 7778c04..6739aa3 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -11,7 +11,7 @@
"gdbpath": "x86_64-pc-elf-gdb",
"cwd": "${workspaceFolder}",
"preLaunchTask": "QEMU (gdb)",
- "executable": "${command:cmake.buildDirectory}/bin/${command:cmake.buildType}/kernel.elf",
+ "executable": "${command:cmake.buildDirectory}/bin/${command:cmake.buildType}/kernel.sym",
"autorun": [
"-enable-pretty-printing",
"-break-insert _start"
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 27500ed..6f7d5a8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,6 +9,7 @@ project("kernel"
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules")
+include("ElfTransformations")
include("GenerateBootableIso")
#[============================================================================[
@@ -38,8 +39,11 @@ target_link_libraries("kernel" PRIVATE
"os::kern"
)
-target_generate_bootable_iso("kernel")
+target_disassemble("kernel")
+target_extract_debug_symbols("kernel")
+target_strip("kernel")
+target_generate_bootable_iso("kernel")
# #[============================================================================[
# # Documentation
diff --git a/cmake/Modules/ElfTransformations.cmake b/cmake/Modules/ElfTransformations.cmake
new file mode 100644
index 0000000..dfc8576
--- /dev/null
+++ b/cmake/Modules/ElfTransformations.cmake
@@ -0,0 +1,36 @@
+include_guard(GLOBAL)
+
+function(target_extract_debug_symbols TARGET)
+ add_custom_command(TARGET "${TARGET}"
+ POST_BUILD
+ COMMAND "${CMAKE_OBJCOPY}"
+ "--only-keep-debug"
+ "$<TARGET_FILE:${TARGET}>"
+ "$<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_BASE_NAME:${TARGET}>.sym"
+ BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${TARGET}.sym"
+ COMMENT "Extracting debug symbols from $<TARGET_FILE:${TARGET}> ..."
+ )
+endfunction()
+
+function(target_strip TARGET)
+ add_custom_command(TARGET "${TARGET}"
+ POST_BUILD
+ COMMAND "${CMAKE_STRIP}"
+ "$<TARGET_FILE:${TARGET}>"
+ COMMENT "Stripping $<TARGET_FILE:${TARGET}> ..."
+ )
+endfunction()
+
+function(target_disassemble TARGET)
+ add_custom_command(TARGET "${TARGET}"
+ POST_BUILD
+ COMMAND "${CMAKE_OBJDUMP}"
+ "--disassemble"
+ "--visualize-jumps"
+ "--demangle"
+ "$<TARGET_FILE:${TARGET}>"
+ ">$<TARGET_FILE_DIR:${TARGET}>/$<TARGET_FILE_BASE_NAME:${TARGET}>.dis"
+ BYPRODUCTS "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/$<CONFIGURATION>/${TARGET}.dis"
+ COMMENT "Dumping disassembly for $<TARGET_FILE:${TARGET}> ..."
+ )
+endfunction()