Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
0922-erts-emu-Fix-bug-in-bsl-bsr-error-handling...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0922-erts-emu-Fix-bug-in-bsl-bsr-error-handling-when-trac.patch of Package erlang
From 748f5a48914bc8dd5988b2427917dada68e2b3c0 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson <sverker@erlang.org> Date: Mon, 12 Feb 2024 19:32:24 +0100 Subject: [PATCH] erts-emu: Fix bug in bsl & bsr error handling when traced bsl or bsr opcode may be overwritten by i_generic_breakpoint. Maybe want a better solution that does not affect hot path. --- erts/emulator/beam/emu/arith_instrs.tab | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/erts/emulator/beam/emu/arith_instrs.tab b/erts/emulator/beam/emu/arith_instrs.tab index 42f71f68fe..84ce03459e 100644 --- a/erts/emulator/beam/emu/arith_instrs.tab +++ b/erts/emulator/beam/emu/arith_instrs.tab @@ -352,12 +352,14 @@ i_bsr := shift.setup_bsr.execute; shift.head() { Eterm Op1, Op2; Sint shift_left_count; + unsigned int bif_ix; } shift.setup_bsr(Src1, Src2) { Op1 = $Src1; Op2 = $Src2; shift_left_count = 0; + bif_ix = BIF_bsr_2; if (ERTS_LIKELY(is_small(Op2))) { shift_left_count = -signed_val(Op2); } else if (is_big(Op2)) { @@ -374,6 +376,7 @@ shift.setup_bsl(Src1, Src2) { Op1 = $Src1; Op2 = $Src2; shift_left_count = 0; + bif_ix = BIF_bsl_2; if (ERTS_LIKELY(is_small(Op2))) { shift_left_count = signed_val(Op2); } else if (is_big(Op2)) { @@ -497,12 +500,7 @@ shift.execute(Fail, Dst) { reg[0] = Op1; reg[1] = Op2; SWAPOUT; - if (IsOpCode(I[0], i_bsl_ssjd)) { - I = handle_error(c_p, I, reg, &BIF_TRAP_EXPORT(BIF_bsl_2)->info.mfa); - } else { - ASSERT(IsOpCode(I[0], i_bsr_ssjd)); - I = handle_error(c_p, I, reg, &BIF_TRAP_EXPORT(BIF_bsr_2)->info.mfa); - } + I = handle_error(c_p, I, reg, &BIF_TRAP_EXPORT(bif_ix)->info.mfa); goto post_error_handling; } } -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor