From: Jose E. Marchesi Date: Wed, 26 Jul 2023 09:44:20 +0000 (+0200) Subject: bpf: fix neg and neg32 BPF instructions in simulator X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4200337219274445a17e16d18d3c113f555cc786;p=binutils-gdb.git bpf: fix neg and neg32 BPF instructions in simulator This patch fixes the semantics of the neg and neg32 BPF instructions in the simulator, and also updates the corresponding tests accordingly. Tested in target bpf-unknown-none. --- diff --git a/sim/bpf/bpf-sim.c b/sim/bpf/bpf-sim.c index 8d3a28e1940..5e01ddeca9f 100644 --- a/sim/bpf/bpf-sim.c +++ b/sim/bpf/bpf-sim.c @@ -728,7 +728,7 @@ execute (SIM_CPU *cpu, struct bpf_insn *insn) break; case BPF_INSN_NEGR: BPF_TRACE ("BPF_INSN_NEGR\n"); - bpf_regs[insn->dst] = - (int64_t) bpf_regs[insn->src]; + bpf_regs[insn->dst] = - (int64_t) bpf_regs[insn->dst]; break; case BPF_INSN_NEGI: BPF_TRACE ("BPF_INSN_NEGI\n"); @@ -865,7 +865,7 @@ execute (SIM_CPU *cpu, struct bpf_insn *insn) break; case BPF_INSN_NEG32R: BPF_TRACE ("BPF_INSN_NEG32R\n"); - bpf_regs[insn->dst] = (uint32_t) (- (int32_t) bpf_regs[insn->src]); + bpf_regs[insn->dst] = (uint32_t) (- (int32_t) bpf_regs[insn->dst]); break; case BPF_INSN_NEG32I: BPF_TRACE ("BPF_INSN_NEG32I\n"); diff --git a/sim/testsuite/bpf/alu.s b/sim/testsuite/bpf/alu.s index c073f67f819..4dc37b1f01a 100644 --- a/sim/testsuite/bpf/alu.s +++ b/sim/testsuite/bpf/alu.s @@ -112,10 +112,10 @@ main: fail_ne %r1, 0 ;; neg - neg %r2, %r2 + neg %r2 fail_ne %r2, -5 mov %r1, -1025 - neg %r1, %r1 + neg %r1 fail_ne %r1, 1025 pass diff --git a/sim/testsuite/bpf/alu32.s b/sim/testsuite/bpf/alu32.s index d797122daf1..e8d5062476c 100644 --- a/sim/testsuite/bpf/alu32.s +++ b/sim/testsuite/bpf/alu32.s @@ -100,11 +100,11 @@ main: ;; neg mov32 %r1, -1 mov32 %r2, 0x7fffffff - neg32 %r1, %r1 - neg32 %r2, %r2 + neg32 %r1 + neg32 %r2 fail_ne32 %r1, 1 fail_ne %r2, 0x80000001 ; Note: check for (bad) sign-extend - neg32 %r2, %r2 + neg32 %r2 fail_ne32 %r2, 0x7fffffff pass