diff --git a/doc/doxygen/src/debugging-aids.md b/doc/doxygen/src/debugging-aids.md index 963aa11a4d..902b9ef5eb 100644 --- a/doc/doxygen/src/debugging-aids.md +++ b/doc/doxygen/src/debugging-aids.md @@ -1,48 +1,4 @@ -# Debugging Tools {#debugging-tools} +# Debugging Tools (Deprecated) {#debugging-tools} -## Undefined Behavior Sanitizer (ubsan) {#ubsan} - -RIOT contains makefile convenience support for gcc/clang's undefined -behaviour sanitizer. - -### Overview - -Both gcc and clang allow generation on code that does runtime checks for -undefined behavior (UB). - -E.g., the following code might trigger UB for some parameters: - -```C -void test(int foo) { - return (foo << 24); -} -``` - -In this case, the signed shift would be alright unless: - -- it would "push out" all bits to the left, with undefined runtime result. Here, - that happens on architectures with 16-bit integers. -- `foo` is negative, with implementation defined runtime results. - -Using ubsan, these can be caught at runtime. - -There are three modes for ubsan that define what happens when the sanitizer -observed undefined behaviour: - -1. `trap` -> cause a trap -2. `msg_exit` -> print a message and exit -3. `msg_recover` -> print a message and continue - -`trap` is available on all RIOT platforms, whereas `msg_exit` and `msg_recover` -are currently only available on `native` when building with gcc, as they require runtime support in -the form of `libubsan`. - -The default is `trap`, or `msg_exit` if available (currently, on native:gnu only). - - -### How to use - -1. build with `make all-ubsan`. - -2. build with `UBSAN_MODE=[trap|msg_exit|msg_recover] make all-ubsan` to - override the ubsan mode. +@deprecated Guides have moved to the [Guide Site](https://guide.riot-os.org/build-system/debugging_aids/). +This page will be removed after release 2026.04. diff --git a/doc/guides/build-system/debugging_aids.md b/doc/guides/build-system/debugging_aids.md new file mode 100644 index 0000000000..394a624cf0 --- /dev/null +++ b/doc/guides/build-system/debugging_aids.md @@ -0,0 +1,51 @@ +--- +title: Debugging Tools +description: Overview of debugging tools supported in RIOT-OS +--- + +## Undefined Behavior Sanitizer (ubsan) + +RIOT contains Makefile convenience support for gcc/clang's undefined +behaviour sanitizer. + +### Overview + +Both gcc and clang allow generation of code that does runtime checks for +undefined behavior (UB). + +E.g., the following code might trigger UB for some parameters: + +```c +void test(int foo) { + return (foo << 24); +} +``` + +In this case, the signed shift would be alright unless: + +- it would "push out" all bits to the left, with undefined runtime result. Here, + that happens on architectures with 16-bit integers. +- `foo` is negative, with implementation-specific runtime results. + +Using ubsan, these can be caught at runtime. + +There are three modes for ubsan that define what happens when the sanitizer +observed undefined behaviour: + +1. `trap` -> cause a trap +2. `msg_exit` -> print a message and exit +3. `msg_recover` -> print a message and continue + +`trap` is available on all RIOT platforms, whereas `msg_exit` and `msg_recover` +are currently only available on `native` when building with gcc, as they require runtime support in +the form of `libubsan`. + +The default is `trap`, or `msg_exit` if available (currently, on native:gnu only). + + +### How to Use + +1. build with `make all-ubsan`. + +2. build with `UBSAN_MODE=[trap|msg_exit|msg_recover] make all-ubsan` to + override the ubsan mode.