Skip to content

Commit 76c4591

Browse files
committed
cmake: gnu: Fix debugging when GDB fails to load because of Python
GDB can be built with or without Python support. When built with Python support this can cause a particular problem: The gdb executable relies on shared libraries that are bound to a specific Python version. But since most Linux distributions typically ship with a single version, it is very difficult to choose which one to target when building GDB. When GDB executes, if it fails to load the shared libraries it will exit immediately with an error code of 127 and output resembling this: /home/carles/bin/zephyr-sdk/arm-zephyr-eabi/bin/arm-zephyr-eabi-gdb: error while loading shared libraries: libpython3.8.so.1.0: cannot open shared object file: No such file or directory There are two known approaches to shipping multiple gdb executables: - The Zephyr SDK ships a default gdb with Python enabled, and then a separate gdb-no-py executable with Python disabled - GNU Arm Embedded ships with a default gdb with Python disabled, and an additional gdb-py with Python enabled To mitigate the problem of not being able to debug, fall back to a 'gdb-no-py' if it exists whenever the standard gdb executable fails to even run. Signed-off-by: Carles Cufi <[email protected]>
1 parent 54dbfe2 commit 76c4591

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

cmake/bintools/gnu/target.cmake

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,23 @@ find_program(CMAKE_NM ${CROSS_COMPILE}nm PATHS ${TOOLCHAIN_HOME} NO_DE
1212
find_program(CMAKE_STRIP ${CROSS_COMPILE}strip PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH)
1313

1414
find_program(CMAKE_GDB ${CROSS_COMPILE}gdb PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH)
15+
16+
if(CMAKE_GDB)
17+
execute_process(
18+
COMMAND ${CMAKE_GDB} --configuration
19+
OUTPUT_VARIABLE GDB_PY_NO_PY
20+
OUTPUT_STRIP_TRAILING_WHITESPACE
21+
RESULTS_VARIABLE GDB_CFG_ERR
22+
)
23+
if (${GDB_CFG_ERR})
24+
# Failed to execute GDB, likely because of Python deps
25+
find_program(CMAKE_GDB_NO_PY ${CROSS_COMPILE}gdb-no-py PATHS ${TOOLCHAIN_HOME} NO_DEFAULT_PATH)
26+
if (CMAKE_GDB_NO_PY)
27+
set(CMAKE_GDB ${CMAKE_GDB_NO_PY} CACHE FILEPATH "Path to a program." FORCE)
28+
endif()
29+
endif()
30+
endif()
31+
1532
find_program(CMAKE_GDB gdb-multiarch PATHS ${TOOLCHAIN_HOME} )
1633

1734
# Include bin tool properties

0 commit comments

Comments
 (0)