From 5d04c6768209284d655bcb692c307ca59e1fe1e5 Mon Sep 17 00:00:00 2001 From: Jonas Zaddach Date: Mon, 17 Mar 2014 14:22:16 +0100 Subject: [PATCH] Fixed building of several stubs in parallel --- CMakeLists.txt | 27 +++++++--- README.md | 7 +++ cmake/avatarstub_ST3320413AS_0x7000.cmake | 52 ------------------- .../CMakeLists.txt | 34 ++++++++++++ .../CMakeLists.txt} | 0 cmake/gdbstub_ST3320413AS_0x7000.cmake | 52 ------------------- .../gdbstub_ST3320413AS_0x7000/CMakeLists.txt | 35 +++++++++++++ cmake/gdbstub_plc_bootloader_0x16000.cmake | 47 ----------------- .../CMakeLists.txt | 33 ++++++++++++ cmake/gdbstub_qemu_versatilepb.cmake | 50 ------------------ cmake/gdbstub_qemu_versatilepb/CMakeLists.txt | 33 ++++++++++++ cmake/platform_arm.cmake | 35 +++++++++++++ src/lowlevel_arm.S | 2 +- 13 files changed, 199 insertions(+), 208 deletions(-) delete mode 100644 cmake/avatarstub_ST3320413AS_0x7000.cmake create mode 100644 cmake/avatarstub_ST3320413AS_0x7000/CMakeLists.txt rename cmake/{avatarstub_qemu_versatilepb.cmake => avatarstub_qemu_versatilepb/CMakeLists.txt} (100%) delete mode 100644 cmake/gdbstub_ST3320413AS_0x7000.cmake create mode 100644 cmake/gdbstub_ST3320413AS_0x7000/CMakeLists.txt delete mode 100644 cmake/gdbstub_plc_bootloader_0x16000.cmake create mode 100644 cmake/gdbstub_plc_bootloader_0x16000/CMakeLists.txt delete mode 100644 cmake/gdbstub_qemu_versatilepb.cmake create mode 100644 cmake/gdbstub_qemu_versatilepb/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 502097f..49dcbfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,20 @@ PROJECT(stub C ASM) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +FUNCTION(ADDPREFIX list_name prefix) + # create empty list - necessary? + SET(${list_name}_TMP) + + # prefix and suffix elements + foreach(l ${${list_name}}) + list(APPEND ${list_name}_TMP ${prefix}${l} ) + endforeach() + + # replace list by tmp list + SET(${list_name} ${${list_name}_TMP} PARENT_SCOPE) + UNSET(${list_name}_TMP) +ENDFUNCTION(ADDPREFIX) + INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include ${PROJECT_BINARY_DIR}) @@ -13,11 +27,12 @@ INCLUDE(cmake/platform_arm.cmake) SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") #Suppress -rdynamic in linker flags -SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -march=armv5t -mno-thumb-interwork -fPIC -Os") +SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -mno-thumb-interwork -fPIC") SET(CMAKE_ASM_FLAGS "-fPIC -Wall" ) -#INCLUDE (cmake/avatarstub_qemu_versatilepb.cmake) -#INCLUDE (cmake/avatarstub_ST3320413AS_0x7000.cmake) -#INCLUDE (cmake/gdbstub_ST3320413AS_0x7000.cmake) -#INCLUDE (cmake/gdbstub_qemu_versatilepb.cmake) -INCLUDE (cmake/gdbstub_plc_bootloader_0x16000.cmake) +#ADD_SUBDIRECTORY (cmake/avatarstub_qemu_versatilepb) +ADD_SUBDIRECTORY (cmake/avatarstub_ST3320413AS_0x7000) +ADD_SUBDIRECTORY (cmake/gdbstub_ST3320413AS_0x7000) +ADD_SUBDIRECTORY (cmake/gdbstub_qemu_versatilepb) +ADD_SUBDIRECTORY (cmake/gdbstub_plc_bootloader_0x16000) +#ADD_SUBDIRECTORY (cmake/gdbstub_inforad_k0_0x0) diff --git a/README.md b/README.md index 65250cc..91ecf77 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,10 @@ Adapting the GDB stub for your platform is easy: Copy one of the existing gdbstub_*.cmake files in the cmake/ directory and adapt it to your platform. You might need to develop additional serial drivers and platform initialization files. + + +*test_programs* contains simple programs that test one functionality +of an embedded system - e.g., serial output, CPU features, debug +features. +Those programs are meant to discover an embedded system before the +GDB stub is ported. diff --git a/cmake/avatarstub_ST3320413AS_0x7000.cmake b/cmake/avatarstub_ST3320413AS_0x7000.cmake deleted file mode 100644 index 91b6525..0000000 --- a/cmake/avatarstub_ST3320413AS_0x7000.cmake +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2013-2014 Jonas Zaddach , EURECOM -# -# You can redistribute and/or modify this program under the terms of the -# GNU General Public License version 2 or later. - -SET (STUB_ASSEMBLER_FILES - src/lowlevel_arm.S - src/lowlevel_ST3320413AS.S - src/utils_arm.S - ) - -SET (STUB_ARM_FILES - ) - -SET (STUB_THUMB_FILES - src/AvatarHostInterface.c -# src/gdbstub_arm.c -# src/utils.c - src/Serial_uart16550.c - src/ArmRegisterMap.c - src/ArmGdbHelpers.c - src/Memory.c - src/stub.c - src/crc.c - ) - -SET (STUB_NAME avatarstub_ST3320413AS_0x7000) -SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_ST3320413AS_0x7000.ld) -SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/ST3320413AS_avatar_config.h) - -########### BELOW IS COMMON STUFF ############################################### - -SET_SOURCE_FILES_PROPERTIES(${STUB_ARM_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -marm") -SET_SOURCE_FILES_PROPERTIES(${STUB_THUMB_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -mthumb") - -# ADD_CUSTOM_COMMAND(OUTPUT config.h -# COMMAND ${CMAKE_COMMAND} -E copy ${STUB_CONFIGURATION_HEADER} ${PROJECT_BINARY_DIR}/config.h -# DEPENDS ${STUB_CONFIGURATION_HEADER} -# COMMENT "copy config.h") -# ADD_CUSTOM_TARGET(config.h ALL DEPENDS ${STUB_CONFIGURATION_HEADER}) - - -ADD_EXECUTABLE(${STUB_NAME} ${STUB_ARM_FILES} ${STUB_THUMB_FILES} ${STUB_ASSEMBLER_FILES}) -SET_TARGET_PROPERTIES(${STUB_NAME} PROPERTIES LINK_FLAGS "-T ${STUB_LINKER_FILE} -nostdlib -nodefaultlibs") - -add_custom_command(OUTPUT ${STUB_NAME}.bin.tmp - COMMAND arm-none-eabi-objcopy --output-format=binary ${STUB_NAME} ${STUB_NAME}.bin.tmp - COMMAND ${CMAKE_COMMAND} -E copy ${STUB_NAME}.bin.tmp ${STUB_NAME}.bin - DEPENDS ${STUB_NAME} - COMMENT "objcopy elf to bin") -add_custom_target(${STUB_NAME}.bin ALL DEPENDS ${STUB_NAME}.bin.tmp) -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${STUB_NAME}.bin) diff --git a/cmake/avatarstub_ST3320413AS_0x7000/CMakeLists.txt b/cmake/avatarstub_ST3320413AS_0x7000/CMakeLists.txt new file mode 100644 index 0000000..46c5a3f --- /dev/null +++ b/cmake/avatarstub_ST3320413AS_0x7000/CMakeLists.txt @@ -0,0 +1,34 @@ +# Copyright 2013-2014 Jonas Zaddach , EURECOM +# +# You can redistribute and/or modify this program under the terms of the +# GNU General Public License version 2 or later. + +# Build file for the Seagate ST3320413AS hard drive. + +SET (STUB_ASSEMBLER_FILES + src/lowlevel_arm.S + src/lowlevel_ST3320413AS.S + src/utils_arm.S + ) + +SET (STUB_ARM_FILES + ) + +SET (STUB_THUMB_FILES + src/AvatarHostInterface.c +# src/gdbstub_arm.c +# src/utils.c + src/Serial_uart16550.c + src/ArmRegisterMap.c + src/ArmGdbHelpers.c + src/Memory.c + src/stub.c + src/crc.c + ) + +SET (STUB_NAME avatarstub_ST3320413AS_0x7000) +SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_ST3320413AS_0x7000.ld) +SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/ST3320413AS_avatar_config.h) +SET (TARGET_ARCH armv5t) + +BUILD_DEBUG_STUB() \ No newline at end of file diff --git a/cmake/avatarstub_qemu_versatilepb.cmake b/cmake/avatarstub_qemu_versatilepb/CMakeLists.txt similarity index 100% rename from cmake/avatarstub_qemu_versatilepb.cmake rename to cmake/avatarstub_qemu_versatilepb/CMakeLists.txt diff --git a/cmake/gdbstub_ST3320413AS_0x7000.cmake b/cmake/gdbstub_ST3320413AS_0x7000.cmake deleted file mode 100644 index 989b3bb..0000000 --- a/cmake/gdbstub_ST3320413AS_0x7000.cmake +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright 2013-2014 Jonas Zaddach , EURECOM -# -# You can redistribute and/or modify this program under the terms of the -# GNU General Public License version 2 or later. - - -SET (STUB_ASSEMBLER_FILES - src/lowlevel_arm.S - src/lowlevel_ST3320413AS.S - src/utils_arm.S - ) - -SET (STUB_ARM_FILES - ) - -SET (STUB_THUMB_FILES - src/GdbHostInterface.c -# src/gdbstub_arm.c - src/utils.c - src/Serial_uart16550.c - src/ArmRegisterMap.c - src/ArmGdbHelpers.c - src/Memory.c - src/stub.c - ) - -SET (STUB_NAME gdbstub_ST3320413AS_0x7000) -SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_ST3320413AS_0x7000.ld) -SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/ST3320413AS_gdb_config.h) - -########### BELOW IS COMMON STUFF ############################################### - -SET_SOURCE_FILES_PROPERTIES(${STUB_ARM_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -marm") -SET_SOURCE_FILES_PROPERTIES(${STUB_THUMB_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -mthumb") - -# ADD_CUSTOM_COMMAND(OUTPUT config.h -# COMMAND ${CMAKE_COMMAND} -E copy ${STUB_CONFIGURATION_HEADER} ${PROJECT_BINARY_DIR}/config.h -# DEPENDS ${STUB_CONFIGURATION_HEADER} -# COMMENT "copy config.h") -# ADD_CUSTOM_TARGET(config.h ALL DEPENDS ${STUB_CONFIGURATION_HEADER}) - - -ADD_EXECUTABLE(${STUB_NAME} ${STUB_ARM_FILES} ${STUB_THUMB_FILES} ${STUB_ASSEMBLER_FILES}) -SET_TARGET_PROPERTIES(${STUB_NAME} PROPERTIES LINK_FLAGS "-T ${STUB_LINKER_FILE} -nostdlib -nodefaultlibs") - -add_custom_command(OUTPUT ${STUB_NAME}.bin.tmp - COMMAND arm-none-eabi-objcopy --output-format=binary ${STUB_NAME} ${STUB_NAME}.bin.tmp - COMMAND ${CMAKE_COMMAND} -E copy ${STUB_NAME}.bin.tmp ${STUB_NAME}.bin - DEPENDS ${STUB_NAME} - COMMENT "objcopy elf to bin") -add_custom_target(${STUB_NAME}.bin ALL DEPENDS ${STUB_NAME}.bin.tmp) -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${STUB_NAME}.bin) diff --git a/cmake/gdbstub_ST3320413AS_0x7000/CMakeLists.txt b/cmake/gdbstub_ST3320413AS_0x7000/CMakeLists.txt new file mode 100644 index 0000000..680ad1b --- /dev/null +++ b/cmake/gdbstub_ST3320413AS_0x7000/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright 2013-2014 Jonas Zaddach , EURECOM +# +# You can redistribute and/or modify this program under the terms of the +# GNU General Public License version 2 or later. + +# Build file for the Seagate ST3320413AS hard drive. + + +SET (STUB_ASSEMBLER_FILES + src/lowlevel_arm.S + src/lowlevel_ST3320413AS.S + src/utils_arm.S + ) + +SET (STUB_ARM_FILES + ) + +SET (STUB_THUMB_FILES + src/GdbHostInterface.c +# src/gdbstub_arm.c + src/utils.c + src/Serial_uart16550.c + src/ArmRegisterMap.c + src/ArmGdbHelpers.c + src/Memory.c + src/stub.c + src/crc.c + ) + +SET (STUB_NAME gdbstub_ST3320413AS_0x7000) +SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_ST3320413AS_0x7000.ld) +SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/ST3320413AS_gdb_config.h) +SET (TARGET_ARCH armv5t) + +BUILD_DEBUG_STUB() \ No newline at end of file diff --git a/cmake/gdbstub_plc_bootloader_0x16000.cmake b/cmake/gdbstub_plc_bootloader_0x16000.cmake deleted file mode 100644 index ff229d6..0000000 --- a/cmake/gdbstub_plc_bootloader_0x16000.cmake +++ /dev/null @@ -1,47 +0,0 @@ -# Copyright 2013-2014 Lucian Cojocar , VU -# -# You can redistribute and/or modify this program under the terms of the -# GNU General Public License version 2 or later. - -SET (STUB_ASSEMBLER_FILES - src/lowlevel_arm.S - src/lowlevel_plc.S - ) - -SET (STUB_ARM_FILES - src/GdbHostInterface.c - # src/gdbstub_arm.c - src/crc.c - src/utils.c - src/Serial_pl011.c - src/ArmRegisterMap.c - src/ArmGdbHelpers.c - src/Memory.c - src/stub.c - src/SerialIO.c - src/armv7_cortex_r4.c - ) - -SET (STUB_NAME gdbstub_plc_bootloader_0x16000) -SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_plc_bootloader_0x16000.ld) -SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/plc_bootloader_gdb_config.h) - -########### BELOW IS COMMON STUFF ############################################### - -# don't use the predefined flags -SET_SOURCE_FILES_PROPERTIES(${STUB_ARM_FILES} PROPERTIES COMPILE_FLAGS "-include ${STUB_CONFIGURATION_HEADER} -marm -march=armv7-r -mbig-endian -mno-thumb-interwork -Os -fPIC -Wall") - -# compile the stub as big endian -SET_SOURCE_FILES_PROPERTIES(${STUB_ASSEMBLER_FILES} PROPERTIES COMPILE_FLAGS "-marm -march=armv7-r -mbig-endian -fPIC -Wall") - - -ADD_EXECUTABLE(${STUB_NAME} ${STUB_ARM_FILES} ${STUB_ASSEMBLER_FILES}) -SET_TARGET_PROPERTIES(${STUB_NAME} PROPERTIES LINK_FLAGS "-T ${STUB_LINKER_FILE} -nostdlib -nodefaultlibs") - -add_custom_command(OUTPUT ${STUB_NAME}.bin.tmp - COMMAND arm-none-eabi-objcopy --output-format=binary ${STUB_NAME} ${STUB_NAME}.bin.tmp - COMMAND ${CMAKE_COMMAND} -E copy ${STUB_NAME}.bin.tmp ${STUB_NAME}.bin - DEPENDS ${STUB_NAME} - COMMENT "objcopy elf to bin") -add_custom_target(${STUB_NAME}.bin ALL DEPENDS ${STUB_NAME}.bin.tmp) -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${STUB_NAME}.bin) diff --git a/cmake/gdbstub_plc_bootloader_0x16000/CMakeLists.txt b/cmake/gdbstub_plc_bootloader_0x16000/CMakeLists.txt new file mode 100644 index 0000000..468c273 --- /dev/null +++ b/cmake/gdbstub_plc_bootloader_0x16000/CMakeLists.txt @@ -0,0 +1,33 @@ +# Copyright 2013-2014 Lucian Cojocar , VU +# +# You can redistribute and/or modify this program under the terms of the +# GNU General Public License version 2 or later. + +# Build file for the Siemens S7-1200 PLC (6E7S212-1BE31-0XB0) + +SET (STUB_ASSEMBLER_FILES + src/lowlevel_arm.S + src/lowlevel_plc.S + ) + +SET (STUB_ARM_FILES + src/GdbHostInterface.c + # src/gdbstub_arm.c + src/crc.c + src/utils.c + src/Serial_pl011.c + src/ArmRegisterMap.c + src/ArmGdbHelpers.c + src/Memory.c + src/stub.c + src/SerialIO.c + src/armv7_cortex_r4.c + ) + +SET (STUB_NAME gdbstub_plc_bootloader_0x16000) +SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_plc_bootloader_0x16000.ld) +SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/plc_bootloader_gdb_config.h) +SET (TARGET_ARCH armv7-r) +SET (TARGET_ENDIAN big-endian) + +BUILD_DEBUG_STUB() \ No newline at end of file diff --git a/cmake/gdbstub_qemu_versatilepb.cmake b/cmake/gdbstub_qemu_versatilepb.cmake deleted file mode 100644 index 991006e..0000000 --- a/cmake/gdbstub_qemu_versatilepb.cmake +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright 2013-2014 Jonas Zaddach , EURECOM -# -# You can redistribute and/or modify this program under the terms of the -# GNU General Public License version 2 or later. - -SET (STUB_ASSEMBLER_FILES - src/lowlevel_arm.S - src/lowlevel_qemu_versatilepb.S - src/utils_arm.S) - -SET (STUB_ARM_FILES - ) - -SET (STUB_THUMB_FILES - src/utils.c - src/GdbHostInterface.c - src/utils.c - src/Serial_pl011.c - src/ArmRegisterMap.c - src/ArmGdbHelpers.c - src/Memory.c - src/stub.c - ) - -SET (STUB_NAME gdbstub_qemu_versatilepb) -SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_ST3320413AS_0x7000.ld) -SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/qemu_versatilepb_gdb_config.h) - -########### BELOW IS COMMON STUFF ############################################### - -SET_SOURCE_FILES_PROPERTIES(${STUB_ARM_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -marm") -SET_SOURCE_FILES_PROPERTIES(${STUB_THUMB_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -mthumb") - -# ADD_CUSTOM_COMMAND(OUTPUT config.h -# COMMAND ${CMAKE_COMMAND} -E copy ${STUB_CONFIGURATION_HEADER} ${PROJECT_BINARY_DIR}/config.h -# DEPENDS ${STUB_CONFIGURATION_HEADER} -# COMMENT "copy config.h") -# ADD_CUSTOM_TARGET(config.h ALL DEPENDS ${STUB_CONFIGURATION_HEADER}) - - -ADD_EXECUTABLE(${STUB_NAME} ${STUB_ARM_FILES} ${STUB_THUMB_FILES} ${STUB_ASSEMBLER_FILES}) -SET_TARGET_PROPERTIES(${STUB_NAME} PROPERTIES LINK_FLAGS "-T ${STUB_LINKER_FILE} -nostdlib -nodefaultlibs") - -add_custom_command(OUTPUT ${STUB_NAME}.bin.tmp - COMMAND arm-none-eabi-objcopy --output-format=binary ${STUB_NAME} ${STUB_NAME}.bin.tmp - COMMAND ${CMAKE_COMMAND} -E copy ${STUB_NAME}.bin.tmp ${STUB_NAME}.bin - DEPENDS ${STUB_NAME} - COMMENT "objcopy elf to bin") -add_custom_target(${STUB_NAME}.bin ALL DEPENDS ${STUB_NAME}.bin.tmp) -set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${STUB_NAME}.bin) diff --git a/cmake/gdbstub_qemu_versatilepb/CMakeLists.txt b/cmake/gdbstub_qemu_versatilepb/CMakeLists.txt new file mode 100644 index 0000000..7bd73db --- /dev/null +++ b/cmake/gdbstub_qemu_versatilepb/CMakeLists.txt @@ -0,0 +1,33 @@ +# Copyright 2013-2014 Jonas Zaddach , EURECOM +# +# You can redistribute and/or modify this program under the terms of the +# GNU General Public License version 2 or later. + +# Build file for the Qemu VersatilePB platform. + +SET (STUB_ASSEMBLER_FILES + src/lowlevel_arm.S + src/lowlevel_qemu_versatilepb.S + src/utils_arm.S) + +SET (STUB_ARM_FILES + ) + +SET (STUB_THUMB_FILES + src/utils.c + src/GdbHostInterface.c + src/utils.c + src/Serial_pl011.c + src/ArmRegisterMap.c + src/ArmGdbHelpers.c + src/Memory.c + src/stub.c + src/crc.c + ) + +SET (STUB_NAME gdbstub_qemu_versatilepb) +SET (STUB_LINKER_FILE ${PROJECT_SOURCE_DIR}/link/arm_ST3320413AS_0x7000.ld) +SET (STUB_CONFIGURATION_HEADER ${PROJECT_SOURCE_DIR}/include/qemu_versatilepb_gdb_config.h) +SET (TARGET_ARCH armv5t) + +BUILD_DEBUG_STUB() \ No newline at end of file diff --git a/cmake/platform_arm.cmake b/cmake/platform_arm.cmake index be5c24c..ff08995 100644 --- a/cmake/platform_arm.cmake +++ b/cmake/platform_arm.cmake @@ -22,3 +22,38 @@ SET(CMAKE_RANLIB arm-none-eabi-ranlib) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +MACRO(BUILD_DEBUG_STUB) + ADDPREFIX(STUB_ASSEMBLER_FILES ../../) + ADDPREFIX(STUB_ARM_FILES ../../) + ADDPREFIX(STUB_THUMB_FILES ../../) + + SET (CUSTOM_FLAGS) + IF (DEFINED TARGET_ARCH) + SET(CUSTOM_FLAGS "${CUSTOM_FLAGS} -march=${TARGET_ARCH}") + ENDIF (DEFINED TARGET_ARCH) + IF (DEFINED TARGET_CPU) + SET(CUSTOM_FLAGS "${CUSTOM_FLAGS} -mcpu=${TARGET_CPU}") + ENDIF (DEFINED TARGET_CPU) + IF (DEFINED TARGET_ENDIAN) + SET(CUSTOM_FLAGS "${CUSTOM_FLAGS} -m${TARGET_ENDIAN}") + ENDIF (DEFINED TARGET_ENDIAN) + + + + SET_SOURCE_FILES_PROPERTIES(${STUB_ARM_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -marm ${CUSTOM_FLAGS}") + SET_SOURCE_FILES_PROPERTIES(${STUB_THUMB_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_C_FLAGS} -include ${STUB_CONFIGURATION_HEADER} -mthumb ${CUSTOM_FLAGS}") + SET_SOURCE_FILES_PROPERTIES(${STUB_ASSEMBLER_FILES} PROPERTIES COMPILE_FLAGS "${CMAKE_ASM_FLAGS} ${CUSTOM_FLAGS}") + + + ADD_EXECUTABLE(${STUB_NAME} ${STUB_ARM_FILES} ${STUB_THUMB_FILES} ${STUB_ASSEMBLER_FILES}) + SET_TARGET_PROPERTIES(${STUB_NAME} PROPERTIES LINK_FLAGS "-T ${STUB_LINKER_FILE} -nostdlib -nodefaultlibs ${CUSTOM_FLAGS}") + + ADD_CUSTOM_COMMAND(OUTPUT ${STUB_NAME}.bin.tmp + COMMAND arm-none-eabi-objcopy --output-format=binary ${STUB_NAME} ${STUB_NAME}.bin.tmp + COMMAND ${CMAKE_COMMAND} -E copy ${STUB_NAME}.bin.tmp ${STUB_NAME}.bin + DEPENDS ${STUB_NAME} + COMMENT "objcopy elf to bin") + ADD_CUSTOM_TARGET(${STUB_NAME}.bin ALL DEPENDS ${STUB_NAME}.bin.tmp) + SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${STUB_NAME}.bin) +ENDMACRO(BUILD_DEBUG_STUB) diff --git a/src/lowlevel_arm.S b/src/lowlevel_arm.S index 999f62f..3e2da10 100644 --- a/src/lowlevel_arm.S +++ b/src/lowlevel_arm.S @@ -124,7 +124,7 @@ Leach_mode: mov r1, sp /* gdb_monitor(address_t pc, void * register_file) */ - blx stub_handle_exception + bl stub_handle_exception /* Restore banked registers */ /* First ABRT mode SPSR */