From ec3b5dd2021720830db0672f282eceefb248232a Mon Sep 17 00:00:00 2001 From: Sayani Halder Date: Fri, 29 May 2026 14:05:05 +0100 Subject: [PATCH] opencsd: etm4: treat exception return packets as P0 on all M-profile cores Treat ETMv4 Exception Return packets as P0 elements for all Cortex-M profiles, not just v7-M. The ETMv4 specification defines Exception Return as a P0 element for M-profile architectures, including v6-M, v7-M and v8-M. Add regression snapshot tests covering both v7-M and v8-M exception return scenarios to validate the behavior and prevent future regressions. Signed-off-by: Sayani Halder --- .../source/etmv4/trc_pkt_decode_etmv4i.cpp | 8 +- decoder/source/trc_core_arch_map.cpp | 1 + decoder/tests/run_pkt_decode_tests.bash | 2 + decoder/tests/run_pkt_decode_tests.py | 2 + .../v7m_svc_vector/code_0x10000140.bin | Bin 0 -> 24 bytes .../snapshots/v7m_svc_vector/device1.ini | 29 +++ .../snapshots/v7m_svc_vector/device2.ini | 189 ++++++++++++++++++ .../pkt_proc_logs/v7m_svc_vector.ppl | 43 ++++ .../snapshots/v7m_svc_vector/snapshot.ini | 11 + .../tests/snapshots/v7m_svc_vector/trace.ini | 15 ++ .../snapshots/v7m_svc_vector/tracebuffer.bin | Bin 0 -> 43 bytes .../v8m_svc_vector/code_0x10000140.bin | Bin 0 -> 24 bytes .../snapshots/v8m_svc_vector/device1.ini | 29 +++ .../snapshots/v8m_svc_vector/device2.ini | 188 +++++++++++++++++ .../pkt_proc_logs/v8m_svc_vector.ppl | 43 ++++ .../snapshots/v8m_svc_vector/snapshot.ini | 11 + .../tests/snapshots/v8m_svc_vector/trace.ini | 15 ++ .../v8m_svc_vector/trace_coresight_format.ini | 18 ++ .../snapshots/v8m_svc_vector/tracebuffer.bin | Bin 0 -> 43 bytes 19 files changed, 600 insertions(+), 4 deletions(-) create mode 100644 decoder/tests/snapshots/v7m_svc_vector/code_0x10000140.bin create mode 100644 decoder/tests/snapshots/v7m_svc_vector/device1.ini create mode 100644 decoder/tests/snapshots/v7m_svc_vector/device2.ini create mode 100644 decoder/tests/snapshots/v7m_svc_vector/pkt_proc_logs/v7m_svc_vector.ppl create mode 100644 decoder/tests/snapshots/v7m_svc_vector/snapshot.ini create mode 100644 decoder/tests/snapshots/v7m_svc_vector/trace.ini create mode 100644 decoder/tests/snapshots/v7m_svc_vector/tracebuffer.bin create mode 100644 decoder/tests/snapshots/v8m_svc_vector/code_0x10000140.bin create mode 100644 decoder/tests/snapshots/v8m_svc_vector/device1.ini create mode 100644 decoder/tests/snapshots/v8m_svc_vector/device2.ini create mode 100644 decoder/tests/snapshots/v8m_svc_vector/pkt_proc_logs/v8m_svc_vector.ppl create mode 100644 decoder/tests/snapshots/v8m_svc_vector/snapshot.ini create mode 100644 decoder/tests/snapshots/v8m_svc_vector/trace.ini create mode 100644 decoder/tests/snapshots/v8m_svc_vector/trace_coresight_format.ini create mode 100644 decoder/tests/snapshots/v8m_svc_vector/tracebuffer.bin diff --git a/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp b/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp index 303a3235dd3c..f1131c0b6978 100644 --- a/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp +++ b/decoder/source/etmv4/trc_pkt_decode_etmv4i.cpp @@ -468,11 +468,11 @@ ocsd_err_t TrcPktDecodeEtmV4I::decodePacket() case ETM4_PKT_I_EXCEPT_RTN: { - // P0 element if V7M profile. - bool bV7MProfile = (m_config->archVersion() == ARCH_V7) && (m_config->coreProfile() == profile_CortexM); - if (m_P0_stack.createParamElemNoParam(P0_EXCEP_RET, bV7MProfile, m_curr_packet_in->getType(), m_index_curr_pkt) == 0) + // P0 element for M-profile: Armv6-M, Armv7-M, Armv8-M. + bool bMProfile = (m_config->coreProfile() == profile_CortexM); + if (m_P0_stack.createParamElemNoParam(P0_EXCEP_RET, bMProfile, m_curr_packet_in->getType(), m_index_curr_pkt) == 0) bAllocErr = true; - else if (bV7MProfile) + else if (bMProfile) m_curr_spec_depth++; } break; diff --git a/decoder/source/trc_core_arch_map.cpp b/decoder/source/trc_core_arch_map.cpp index 71645477ccd6..f803a0ebeb0f 100644 --- a/decoder/source/trc_core_arch_map.cpp +++ b/decoder/source/trc_core_arch_map.cpp @@ -67,6 +67,7 @@ static ap_map_elem_t ap_map_array[] = { "Cortex-M33", { ARCH_V8, profile_CortexM } }, { "Cortex-M55", { ARCH_V8, profile_CortexM } }, { "Cortex-M23", { ARCH_V8, profile_CortexM } }, + { "Cortex-M7", { ARCH_V7, profile_CortexM } }, { "Cortex-M0", { ARCH_V7, profile_CortexM } }, { "Cortex-M0+", { ARCH_V7, profile_CortexM } }, { "Cortex-M3", { ARCH_V7, profile_CortexM } }, diff --git a/decoder/tests/run_pkt_decode_tests.bash b/decoder/tests/run_pkt_decode_tests.bash index 8cf1d89873dc..cdf8708f44b8 100755 --- a/decoder/tests/run_pkt_decode_tests.bash +++ b/decoder/tests/run_pkt_decode_tests.bash @@ -57,6 +57,8 @@ declare -a test_dirs_decode=( "bugfix-exact-match" "itm_only_csformat" "itm_only_raw" + "v7m_svc_vector" + "v8m_svc_vector" "juno_r1_1" "juno-ret-stck" "juno-uname-001" diff --git a/decoder/tests/run_pkt_decode_tests.py b/decoder/tests/run_pkt_decode_tests.py index f460470b1058..bc8dc950c223 100644 --- a/decoder/tests/run_pkt_decode_tests.py +++ b/decoder/tests/run_pkt_decode_tests.py @@ -33,6 +33,8 @@ "juno-ret-stck", "juno-uname-001", "juno-uname-002", + "v7m_svc_vector", + "v8m_svc_vector", "Snowball", "stm-issue-27", "stm_only", diff --git a/decoder/tests/snapshots/v7m_svc_vector/code_0x10000140.bin b/decoder/tests/snapshots/v7m_svc_vector/code_0x10000140.bin new file mode 100644 index 0000000000000000000000000000000000000000..d6b6f2ba69c3eb3ad07a242d318c6d57483c5e75 GIT binary patch literal 24 gcmZR2AHvD