diff options
author | Taylor Simpson <tsimpson@quicinc.com> | 2021-09-22 10:30:46 -0500 |
---|---|---|
committer | Taylor Simpson <tsimpson@quicinc.com> | 2021-10-06 10:29:11 -0500 |
commit | c23b5764e79f3951e98160faf6e97284453c4056 (patch) | |
tree | cb3c638ac6cf5826494103e33f4307ac8b342bc2 /target/hexagon/op_helper.c | |
parent | e3acc2c1961cbe22ca474cd5da4163b7bbf7cea3 (diff) | |
download | qemu-c23b5764e79f3951e98160faf6e97284453c4056.zip qemu-c23b5764e79f3951e98160faf6e97284453c4056.tar.gz qemu-c23b5764e79f3951e98160faf6e97284453c4056.tar.bz2 |
Hexagon (target/hexagon) probe the stores in a packet at start of commit
When a packet has 2 stores, either both commit or neither commit.
At the beginning of gen_commit_packet, we check for multiple stores.
If there are multiple stores, call a helper that will probe each of
them before proceeding with the commit.
Note that we don't call the probe helper for packets with only one
store. Therefore, we call process_store_log before anything else
involved in committing the packet.
We also fix a typo in the comment in process_store_log.
Test case added in tests/tcg/hexagon/hex_sigsegv.c
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Taylor Simpson <tsimpson@quicinc.com>
Message-Id: <1633036599-7637-1-git-send-email-tsimpson@quicinc.com>
Diffstat (limited to 'target/hexagon/op_helper.c')
-rw-r--r-- | target/hexagon/op_helper.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/target/hexagon/op_helper.c b/target/hexagon/op_helper.c index 61d5cde..af32de4 100644 --- a/target/hexagon/op_helper.c +++ b/target/hexagon/op_helper.c @@ -377,6 +377,22 @@ int32_t HELPER(vacsh_pred)(CPUHexagonState *env, return PeV; } +static void probe_store(CPUHexagonState *env, int slot, int mmu_idx) +{ + if (!(env->slot_cancelled & (1 << slot))) { + size1u_t width = env->mem_log_stores[slot].width; + target_ulong va = env->mem_log_stores[slot].va; + uintptr_t ra = GETPC(); + probe_write(env, va, width, mmu_idx, ra); + } +} + +/* Called during packet commit when there are two scalar stores */ +void HELPER(probe_pkt_scalar_store_s0)(CPUHexagonState *env, int mmu_idx) +{ + probe_store(env, 0, mmu_idx); +} + /* * mem_noshuf * Section 5.5 of the Hexagon V67 Programmer's Reference Manual |