summary refs log tree commit diff stats
path: root/results/scraper/box64/1652
diff options
context:
space:
mode:
Diffstat (limited to 'results/scraper/box64/1652')
-rw-r--r--results/scraper/box64/165274
1 files changed, 74 insertions, 0 deletions
diff --git a/results/scraper/box64/1652 b/results/scraper/box64/1652
new file mode 100644
index 000000000..9e747ffdd
--- /dev/null
+++ b/results/scraper/box64/1652
@@ -0,0 +1,74 @@
+Unexpected Behaviors when Using RISC-V Extension "zbs"
+### Description & Investigation

+

+I tried to run python3.12 on box64, and it crashed with SIGSEGV. Using `BOX64_DYNAREC_TEST=1`, I saw many differences about RIP:

+

+```txt

+Warning, difference between x64 Interpreter and Dynarec in 0x3f001e44b1 (0f 82 82 03 00 00 8d b0)

+=======================================

+DIFF: Dynarec |  Interpreter

+----------------------

+RIP: 0000003f001e44b7 | 0000003f001e4839

+Warning, difference between x64 Interpreter and Dynarec in 0x3f001e4405 (0f 82 2d 01 00 00 83 ea)

+=======================================

+DIFF: Dynarec |  Interpreter

+----------------------

+RIP: 0000003f001e440b | 0000003f001e4538

+Warning, difference between x64 Interpreter and Dynarec in 0x3f002683c7 (72 2b 2d 00 01 00 00 83)

+=======================================

+DIFF: Dynarec |  Interpreter

+(( omitted ))

+```

+

+These addresses are all in `libpython3.12.so` and `objdump` told me **they all almost look like**:

+

+```asm

+bt     %eax,%ecx

+jb     (( somewhere ))

+```

+

+The `bt` instruction should set the CF flag and the behavior of the following `jb` instruction depends on it. So I read current code:

+

+https://github.com/ptitSeb/box64/blob/d6b9fd2860dc097de8aebf147b3aa6d1741ea550/src/dynarec/rv64/dynarec_rv64_0f.c#L1720-L1739

+

+and saw `BEXT` will emit to `bext` instruction when "zbs" extension enabled.

+

+---

+

+When turning off the "zbs" extension, `libpython3.12` still crashed but the test log showed other differences irrelative with `bt` instruction:

+

+```txt

+(( BEGIN ))

+Warning, difference between x64 Interpreter and Dynarec in 0x3f001ea3f3 (7e 17 83 fe 63 7f 12 89)

+=======================================

+DIFF: Dynarec |  Interpreter

+----------------------

+RIP: 0000003f001ea40c | 0000003f001ea3f5

+Warning, difference between x64 Interpreter and Dynarec in 0x3f001ea36f (0f 8f bb 00 00 00 39 c3)

+=======================================

+DIFF: Dynarec |  Interpreter

+----------------------

+RIP: 0000003f001ea430 | 0000003f001ea375

+Warning, difference between x64 Interpreter and Dynarec in 0x3f001ea3f3 (7e 17 83 fe 63 7f 12 89)

+=======================================

+DIFF: Dynarec |  Interpreter

+----------------------

+RIP: 0000003f001ea40c | 0000003f001ea3f5

+Warning, difference between x64 Interpreter and Dynarec in 0x3f001ea36f (0f 8f bb 00 00 00 39 c3)

+=======================================

+DIFF: Dynarec |  Interpreter

+----------------------

+RIP: 0000003f001ea430 | 0000003f001ea375

+(( END ))

+```

+

+Again, `objdump` told me **they all look like**:

+

+```asm

+cmp    (( %esi or $0x63 here )),%eax

+jle/jg    (( somewhere ))

+```

+

+---

+

+Maybe at least we can say the `bt` instruction with "zbs" extension results in the my first "dynarec test" difference of this issue. And the latter one is still in investigation.
\ No newline at end of file