From 6c36106666803ee9e75e0045f16bbd8f34b57dd1 Mon Sep 17 00:00:00 2001 From: "Enrico Fraccaroli (Galfurian)" Date: Fri, 2 Jun 2023 16:14:17 -0400 Subject: [PATCH] Simplify program compilation. --- .gdb.debug | 3 --- CMakeLists.txt | 8 ++++---- programs/CMakeLists.txt | 37 ++++++----------------------------- programs/tests/CMakeLists.txt | 37 ++++++----------------------------- scripts/get_text_address.sh | 9 --------- 5 files changed, 16 insertions(+), 78 deletions(-) delete mode 100644 .gdb.debug delete mode 100644 scripts/get_text_address.sh diff --git a/.gdb.debug b/.gdb.debug deleted file mode 100644 index 059f19e..0000000 --- a/.gdb.debug +++ /dev/null @@ -1,3 +0,0 @@ -symbol-file ./mentos/kernel.bin -exec-file ./mentos/kernel.bin -target remote localhost:1234 diff --git a/CMakeLists.txt b/CMakeLists.txt index 8796736..aad376f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,10 +148,10 @@ add_custom_target( add_custom_target( gdbinit BYPRODUCTS ${CMAKE_BINARY_DIR}/.gdbinit - COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/get_text_address.sh ${CMAKE_BINARY_DIR}/mentos/kernel.bin > ${CMAKE_BINARY_DIR}/.gdbinit - COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/get_text_address.sh ${CMAKE_BINARY_DIR}/mentos/kernel-bootloader.bin >> ${CMAKE_BINARY_DIR}/.gdbinit - COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/get_text_address.sh ${CMAKE_BINARY_DIR}/programs/tests/test_* >> ${CMAKE_BINARY_DIR}/.gdbinit - COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/get_text_address.sh ${CMAKE_BINARY_DIR}/programs/prog_* >> ${CMAKE_BINARY_DIR}/.gdbinit + COMMAND echo "add-symbol-file ${CMAKE_BINARY_DIR}/mentos/kernel.bin" > ${CMAKE_BINARY_DIR}/.gdbinit + COMMAND echo "add-symbol-file ${CMAKE_BINARY_DIR}/mentos/kernel-bootloader.bin" >> ${CMAKE_BINARY_DIR}/.gdbinit + COMMAND ls -1 ${CMAKE_BINARY_DIR}/programs/tests/test_* | sed 's/^/add-symbol-file /' >> ${CMAKE_BINARY_DIR}/.gdbinit + COMMAND ls -1 ${CMAKE_BINARY_DIR}/programs/prog_* | sed 's/^/add-symbol-file /' >> ${CMAKE_BINARY_DIR}/.gdbinit COMMAND echo "break boot.c: boot_main" >> ${CMAKE_BINARY_DIR}/.gdbinit COMMAND echo "break kernel.c: kmain" >> ${CMAKE_BINARY_DIR}/.gdbinit COMMAND echo "target remote localhost:1234" >> ${CMAKE_BINARY_DIR}/.gdbinit diff --git a/programs/CMakeLists.txt b/programs/CMakeLists.txt index c632555..d3683b5 100644 --- a/programs/CMakeLists.txt +++ b/programs/CMakeLists.txt @@ -53,7 +53,6 @@ endif(CMAKE_BUILD_TYPE STREQUAL "Debug") # ============================================================================= # BUILD # ============================================================================= - # Set the directory where the compiled binaries will be placed. set(MENTOS_BIN_DIR ${CMAKE_SOURCE_DIR}/files/bin) @@ -92,50 +91,26 @@ set(PROGRAMS foreach(PROGRAM ${PROGRAMS}) # Prepare the program name. string(REPLACE ".c" "" PROGRAM_NAME ${PROGRAM}) - # Set the name of the target. set(TARGET_NAME prog_${PROGRAM_NAME}) - - # Randomize .text section address so when debugging symbols don't clash. - # The allowed range is from 256MB to 2.75GB - # Minimum allowed address: 0x10000000 - # Max allowed address: 0xB0000000 - string(MD5 RAND_HASH ${PROGRAM}) - string(SUBSTRING ${RAND_HASH} 1 3 TEXADDR_INFIX) - string(RANDOM LENGTH 1 ALPHABET 0123456789AB RANDOM_SEED ${RAND_HASH} TEXADDR_FIRST) - # Create the target. add_executable(${TARGET_NAME} ${PROGRAM}) - # Add the includes. target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/libc/inc) - # Link the libc library. target_link_libraries(${TARGET_NAME} ${CMAKE_BINARY_DIR}/libc/libc.a) - # Add the dependency to libc. add_dependencies(${TARGET_NAME} libc) - - # Add the linking properties. - if((${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") OR APPLE) - set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-segaddr __TEXT 0x${TEXADDR_FIRST}${TEXADDR_INFIX}0000") - else() - set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-Ttext 0x${TEXADDR_FIRST}${TEXADDR_INFIX}0000") - endif() - - # Add the final target that strips the debugging symbols from the program. - add_custom_command(TARGET ${TARGET_NAME} + # Copy the progam to the bin folder. + add_custom_command( + TARGET ${TARGET_NAME} BYPRODUCTS ${MENTOS_BIN_DIR}/${PROGRAM_NAME} - COMMAND mkdir -p ${MENTOS_BIN_DIR} - COMMAND strip --strip-debug ${PROJECT_BINARY_DIR}/${TARGET_NAME} -o ${MENTOS_BIN_DIR}/${PROGRAM_NAME} + COMMAND mkdir -p ${MENTOS_BIN_DIR} + COMMAND cp ${PROJECT_BINARY_DIR}/${TARGET_NAME} ${MENTOS_BIN_DIR}/${PROGRAM_NAME} DEPENDS ${TARGET_NAME} ) - - # Log the entry. - message(VERBOSE "Program ${PROGRAM_NAME}, `.text` at 0x${TEXADDR_FIRST}${TEXADDR_INFIX}0000") - # Append the program name to the list of all the executables. - list(APPEND ALL_EXECUTABLES ${PROGRAM_NAME}) + list(APPEND ALL_EXECUTABLES ${TARGET_NAME}) endforeach() # Add the overall target that builds all the programs. diff --git a/programs/tests/CMakeLists.txt b/programs/tests/CMakeLists.txt index 27ec68f..4a11e28 100644 --- a/programs/tests/CMakeLists.txt +++ b/programs/tests/CMakeLists.txt @@ -53,7 +53,6 @@ endif(CMAKE_BUILD_TYPE STREQUAL "Debug") # ============================================================================= # BUILD # ============================================================================= - # Set the directory where the compiled binaries will be placed. set(MENTOS_TESTS_DIR ${CMAKE_SOURCE_DIR}/files/bin/tests) @@ -96,50 +95,26 @@ set(TESTS foreach(TEST ${TESTS}) # Prepare the program name. string(REPLACE ".c" "" TEST_NAME ${TEST}) - # Set the name of the target. set(TARGET_NAME test_${TEST_NAME}) - - # Randomize .text section address so when debugging symbols don't clash. - # The allowed range is from 256MB to 2.75GB - # Minimum allowed address: 0x10000000 - # Max allowed address: 0xB0000000 - string(MD5 RAND_HASH ${TEST}) - string(SUBSTRING ${RAND_HASH} 1 3 TEXADDR_INFIX) - string(RANDOM LENGTH 1 ALPHABET 0123456789AB RANDOM_SEED ${RAND_HASH} TEXADDR_FIRST) - # Create the target. add_executable(${TARGET_NAME} ${TEST}) - # Add the includes. target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/libc/inc) - # Link the libc library. target_link_libraries(${TARGET_NAME} ${CMAKE_BINARY_DIR}/libc/libc.a) - # Add the dependency to libc. add_dependencies(${TARGET_NAME} libc) - - # Add the linking properties. - if((${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Darwin") OR APPLE) - set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-segaddr __TEXT 0x${TEXADDR_FIRST}${TEXADDR_INFIX}0000") - else() - set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS "-Wl,-Ttext 0x${TEXADDR_FIRST}${TEXADDR_INFIX}0000") - endif() - - # Add the final target that strips the debugging symbols from the program. - add_custom_command(TARGET ${TARGET_NAME} + # Copy the progam to the bin folder. + add_custom_command( + TARGET ${TARGET_NAME} BYPRODUCTS ${MENTOS_TESTS_DIR}/${TEST_NAME} - COMMAND mkdir -p ${MENTOS_TESTS_DIR} - COMMAND strip --strip-debug ${PROJECT_BINARY_DIR}/${TARGET_NAME} -o ${MENTOS_TESTS_DIR}/${TEST_NAME} + COMMAND mkdir -p ${MENTOS_TESTS_DIR} + COMMAND cp ${PROJECT_BINARY_DIR}/${TARGET_NAME} ${MENTOS_TESTS_DIR}/${TEST_NAME} DEPENDS ${TARGET_NAME} ) - - # Log the entry. - message(VERBOSE "Test ${TEST_NAME}, `.text` at 0x${TEXADDR_FIRST}${TEXADDR_INFIX}0000") - # Append the program name to the list of all the executables. - list(APPEND ALL_TESTS ${TEST_NAME}) + list(APPEND ALL_TESTS ${TARGET_NAME}) endforeach() # Add the overall target that builds all the programs. diff --git a/scripts/get_text_address.sh b/scripts/get_text_address.sh deleted file mode 100644 index e1d41b5..0000000 --- a/scripts/get_text_address.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -for obj_file in "$@" -do - if [[ -x "$obj_file" ]] - then - ADDR=$(readelf -WS $obj_file | grep .text | awk '{ print "0x"$5 }') - echo "add-symbol-file $obj_file ${ADDR}" - fi -done \ No newline at end of file