pw_cpu_exception_risc_v: Add initial backend structure

Create the backbone for the RISCV CPU exception handling. For now, the
entry point of the backend is left to the user. Define the CPU state
along with support files for processing snapshots.

Testing:
- Basic unit testing to make sure the python processor works
- Custom exception entry -- Can see snapshot generated with stack
traces on all threads and register dump.

Change-Id: If2843227da0ff3278e6a1d61e25a9490a72828cb
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/188230
Commit-Queue: Auto-Submit <auto-submit@pigweed-service-accounts.iam.gserviceaccount.com>
Reviewed-by: Armando Montanez <amontanez@google.com>
Pigweed-Auto-Submit: Kevin Zeng <zengk@google.com>
25 files changed
tree: 59d293e13c79bd0bcfbc9dd9b08a2b85488ba8be
  1. .allstar/
  2. .vscode/
  3. build_overrides/
  4. docker/
  5. docs/
  6. kudzu/
  7. pw_alignment/
  8. pw_allocator/
  9. pw_analog/
  10. pw_android_toolchain/
  11. pw_arduino_build/
  12. pw_assert/
  13. pw_assert_basic/
  14. pw_assert_log/
  15. pw_assert_tokenized/
  16. pw_assert_zephyr/
  17. pw_async/
  18. pw_async2/
  19. pw_async2_basic/
  20. pw_async2_epoll/
  21. pw_async_basic/
  22. pw_base64/
  23. pw_bloat/
  24. pw_blob_store/
  25. pw_bluetooth/
  26. pw_bluetooth_hci/
  27. pw_bluetooth_profiles/
  28. pw_bluetooth_proxy/
  29. pw_bluetooth_sapphire/
  30. pw_boot/
  31. pw_boot_cortex_m/
  32. pw_build/
  33. pw_build_android/
  34. pw_build_info/
  35. pw_build_mcuxpresso/
  36. pw_bytes/
  37. pw_channel/
  38. pw_checksum/
  39. pw_chre/
  40. pw_chrono/
  41. pw_chrono_embos/
  42. pw_chrono_freertos/
  43. pw_chrono_rp2040/
  44. pw_chrono_stl/
  45. pw_chrono_threadx/
  46. pw_chrono_zephyr/
  47. pw_cli/
  48. pw_compilation_testing/
  49. pw_config_loader/
  50. pw_console/
  51. pw_containers/
  52. pw_cpu_exception/
  53. pw_cpu_exception_cortex_m/
  54. pw_cpu_exception_risc_v/
  55. pw_crypto/
  56. pw_digital_io/
  57. pw_digital_io_linux/
  58. pw_digital_io_mcuxpresso/
  59. pw_digital_io_rp2040/
  60. pw_docgen/
  61. pw_doctor/
  62. pw_emu/
  63. pw_env_setup/
  64. pw_env_setup_zephyr/
  65. pw_file/
  66. pw_format/
  67. pw_function/
  68. pw_fuzzer/
  69. pw_grpc/
  70. pw_hdlc/
  71. pw_hex_dump/
  72. pw_i2c/
  73. pw_i2c_linux/
  74. pw_i2c_mcuxpresso/
  75. pw_i2c_rp2040/
  76. pw_ide/
  77. pw_interrupt/
  78. pw_interrupt_cortex_m/
  79. pw_interrupt_xtensa/
  80. pw_interrupt_zephyr/
  81. pw_intrusive_ptr/
  82. pw_json/
  83. pw_kvs/
  84. pw_libc/
  85. pw_libcxx/
  86. pw_log/
  87. pw_log_android/
  88. pw_log_basic/
  89. pw_log_null/
  90. pw_log_rpc/
  91. pw_log_string/
  92. pw_log_tokenized/
  93. pw_log_zephyr/
  94. pw_malloc/
  95. pw_malloc_freelist/
  96. pw_malloc_freertos/
  97. pw_metric/
  98. pw_minimal_cpp_stdlib/
  99. pw_module/
  100. pw_multibuf/
  101. pw_multisink/
  102. pw_package/
  103. pw_perf_test/
  104. pw_persistent_ram/
  105. pw_polyfill/
  106. pw_preprocessor/
  107. pw_presubmit/
  108. pw_protobuf/
  109. pw_protobuf_compiler/
  110. pw_random/
  111. pw_result/
  112. pw_ring_buffer/
  113. pw_router/
  114. pw_rpc/
  115. pw_rpc_transport/
  116. pw_rust/
  117. pw_sensor/
  118. pw_snapshot/
  119. pw_software_update/
  120. pw_span/
  121. pw_spi/
  122. pw_spi_linux/
  123. pw_spi_mcuxpresso/
  124. pw_spi_rp2040/
  125. pw_status/
  126. pw_stm32cube_build/
  127. pw_stream/
  128. pw_stream_shmem_mcuxpresso/
  129. pw_stream_uart_linux/
  130. pw_stream_uart_mcuxpresso/
  131. pw_string/
  132. pw_symbolizer/
  133. pw_sync/
  134. pw_sync_baremetal/
  135. pw_sync_embos/
  136. pw_sync_freertos/
  137. pw_sync_stl/
  138. pw_sync_threadx/
  139. pw_sync_zephyr/
  140. pw_sys_io/
  141. pw_sys_io_ambiq_sdk/
  142. pw_sys_io_arduino/
  143. pw_sys_io_baremetal_lm3s6965evb/
  144. pw_sys_io_baremetal_stm32f429/
  145. pw_sys_io_emcraft_sf2/
  146. pw_sys_io_mcuxpresso/
  147. pw_sys_io_rp2040/
  148. pw_sys_io_stdio/
  149. pw_sys_io_stm32cube/
  150. pw_sys_io_zephyr/
  151. pw_system/
  152. pw_target_runner/
  153. pw_thread/
  154. pw_thread_embos/
  155. pw_thread_freertos/
  156. pw_thread_stl/
  157. pw_thread_threadx/
  158. pw_thread_zephyr/
  159. pw_tls_client/
  160. pw_tls_client_boringssl/
  161. pw_tls_client_mbedtls/
  162. pw_tokenizer/
  163. pw_toolchain/
  164. pw_toolchain_bazel/
  165. pw_trace/
  166. pw_trace_tokenized/
  167. pw_transfer/
  168. pw_uart/
  169. pw_unit_test/
  170. pw_unit_test_zephyr/
  171. pw_varint/
  172. pw_watch/
  173. pw_web/
  174. pw_work_queue/
  175. seed/
  176. targets/
  177. third_party/
  178. ts/
  179. zephyr/
  180. .bazelignore
  181. .bazelrc
  182. .black.toml
  183. .clang-format
  184. .clang-tidy
  185. .eslintrc.cjs
  186. .git-blame-ignore-revs
  187. .gitattributes
  188. .gitignore
  189. .gn
  190. .mypy.ini
  191. .prettierignore
  192. .prettierrc.cjs
  193. .pw_ide.yaml
  194. .pylintrc
  195. activate.bat
  196. Android.bp
  197. AUTHORS
  198. bootstrap.bat
  199. bootstrap.sh
  200. BUILD.bazel
  201. BUILD.gn
  202. BUILDCONFIG.gn
  203. CMakeLists.txt
  204. jest.config.ts
  205. Kconfig.zephyr
  206. LICENSE
  207. modules.gni
  208. OWNERS
  209. package-lock.json
  210. package.json
  211. pigweed.json
  212. PIGWEED_MODULES
  213. README.md
  214. rollup.config.js
  215. tsconfig.json
  216. WORKSPACE
README.md

Pigweed

Pigweed is an open source collection of embedded-targeted libraries–or as we like to call them, modules. These modules are building blocks and infrastructure that enable faster and more reliable development on small-footprint MMU-less 32-bit microcontrollers like the STMicroelectronics STM32L452 or the Nordic nRF52832.

For more information please see our website: https://pigweed.dev/.

Links