diff options
author | David Faust <david.faust@oracle.com> | 2020-09-08 11:39:07 -0700 |
---|---|---|
committer | David Faust <david.faust@oracle.com> | 2020-09-08 11:39:07 -0700 |
commit | 3ad6c19423eedf84dfd5ea83bc03933dff8a4579 (patch) | |
tree | e76e0f17f4d59deba3bd65dabb1b19f1a0eba84c /sim/bpf | |
parent | 790147a9e9ee05542c621a36669288413880c876 (diff) | |
download | gdb-3ad6c19423eedf84dfd5ea83bc03933dff8a4579.zip gdb-3ad6c19423eedf84dfd5ea83bc03933dff8a4579.tar.gz gdb-3ad6c19423eedf84dfd5ea83bc03933dff8a4579.tar.bz2 |
bpf: simulator: correct div, mod insn semantics
The div and mod eBPF instructions are unsigned, but the semantic
specification for the simulator incorrectly used signed operators.
Correct them to unsigned versions, and correct the ALU tests in
the simulator (which incorrectly assumed signed semantics).
Tested in bpf-unknown-none.
cpu/ChangeLog:
2020-09-08 David Faust <david.faust@oracle.com>
* bpf.cpu (define-alu-instructions): Correct semantic operators
for div, mod to unsigned versions.
sim/ChangeLog:
2020-09-08 David Faust <david.faust@oracle.com>
* bpf/sem-be.c: Regenerate.
* bpf/sem-le.c: Likewise.
sim/testsuite/ChangeLog:
2020-09-08 David Faust <david.faust@oracle.com>
* sim/bpf/alu.s: Correct div and mod tests.
* sim/bpf/alu32.s: Likewise.
Diffstat (limited to 'sim/bpf')
-rw-r--r-- | sim/bpf/sem-be.c | 16 | ||||
-rw-r--r-- | sim/bpf/sem-le.c | 16 |
2 files changed, 16 insertions, 16 deletions
diff --git a/sim/bpf/sem-be.c b/sim/bpf/sem-be.c index 12b65c7..0a3e927 100644 --- a/sim/bpf/sem-be.c +++ b/sim/bpf/sem-be.c @@ -461,7 +461,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,divibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = DIVDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -482,7 +482,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,divrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = DIVDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -503,7 +503,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,div32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = DIVSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } @@ -524,7 +524,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,div32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = DIVSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } @@ -881,7 +881,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,modibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = MODDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -902,7 +902,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,modrbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = MODDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -923,7 +923,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,mod32ibe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = MODSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstbe)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } @@ -944,7 +944,7 @@ SEM_FN_NAME (bpfbf_ebpfbe,mod32rbe) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = MODSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstbe)]), CPU (h_gpr[FLD (f_srcbe)])); CPU (h_gpr[FLD (f_dstbe)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } diff --git a/sim/bpf/sem-le.c b/sim/bpf/sem-le.c index 8bb1deb..58a59b1 100644 --- a/sim/bpf/sem-le.c +++ b/sim/bpf/sem-le.c @@ -461,7 +461,7 @@ SEM_FN_NAME (bpfbf_ebpfle,divile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = DIVDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -482,7 +482,7 @@ SEM_FN_NAME (bpfbf_ebpfle,divrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = DIVDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + DI opval = UDIVDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -503,7 +503,7 @@ SEM_FN_NAME (bpfbf_ebpfle,div32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = DIVSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } @@ -524,7 +524,7 @@ SEM_FN_NAME (bpfbf_ebpfle,div32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = DIVSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + USI opval = UDIVSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } @@ -881,7 +881,7 @@ SEM_FN_NAME (bpfbf_ebpfle,modile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = MODDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -902,7 +902,7 @@ SEM_FN_NAME (bpfbf_ebpfle,modrle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - DI opval = MODDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + DI opval = UMODDI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'D', opval); } @@ -923,7 +923,7 @@ SEM_FN_NAME (bpfbf_ebpfle,mod32ile) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = MODSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstle)]), FLD (f_imm32)); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } @@ -944,7 +944,7 @@ SEM_FN_NAME (bpfbf_ebpfle,mod32rle) (SIM_CPU *current_cpu, SEM_ARG sem_arg) SEM_PC vpc = SEM_NEXT_VPC (sem_arg, pc, 8); { - USI opval = MODSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); + USI opval = UMODSI (CPU (h_gpr[FLD (f_dstle)]), CPU (h_gpr[FLD (f_srcle)])); CPU (h_gpr[FLD (f_dstle)]) = opval; CGEN_TRACE_RESULT (current_cpu, abuf, "gpr", 'x', opval); } |