New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
cmake: gnu: Fix debugging when GDB fails to load because of Python #38749
Conversation
c971f4d
to
c08c62f
Compare
Note: I plan to extend this with support with both |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This looks reasonable and will be very useful for the users who do not have the "correct" version of Python installed.
In the future, this issue can be further mitigated by allowing users to select which gdb to use through the west as @carlescufi noted. Also, we can look into making the default gdb provided by the Zephyr SDK Python-less as the GNU Arm Embedded toolchain does, since most users do not require the Python scripting capability.
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 <carles.cufi@nordicsemi.no>
c08c62f
to
32df0dc
Compare
The GDB check routine added in the PR zephyrproject-rtos#38749 does not suppress the console outputs (stdout and stderr) and may print out a misleading error message during a CMake configuration when the required version of Python is not available on the system: arm-zephyr-eabi-gdb: error while loading shared libraries: libpython3.8.so.1.0: cannot open shared object file: No such file or directory This commit adds the `OUTPUT_QUIET` and `ERROR_QUIET` options when executing the GDB process so that the console outputs during the GDB executable validation are not displayed to the user. In addition, this commit removes the unused `GDB_PY_NO_PY` standard output redirection variable since it is unnecessary. Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
The GDB check routine added in the PR #38749 does not suppress the console outputs (stdout and stderr) and may print out a misleading error message during a CMake configuration when the required version of Python is not available on the system: arm-zephyr-eabi-gdb: error while loading shared libraries: libpython3.8.so.1.0: cannot open shared object file: No such file or directory This commit adds the `OUTPUT_QUIET` and `ERROR_QUIET` options when executing the GDB process so that the console outputs during the GDB executable validation are not displayed to the user. In addition, this commit removes the unused `GDB_PY_NO_PY` standard output redirection variable since it is unnecessary. Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
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:
gdb
with Python enabled, and then aseparate
gdb-no-py
executable with Python disabledgdb
with Python disabled, and anadditional
gdb-py
with Python enabledTo 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 carles.cufi@nordicsemi.no