Closed
Description
When built/run on a big endian host (such as s390x), capstone has unexpected output.
Expected
When running on an amd64 Linux host (little endian):
./cstool/cstool m68k40 'f2 3c 44 22 40 49 0e 56'
0 f2 3c 44 22 40 49 0e 56 fadd.s #3.141500, fp0
Actual
When running on a s390x Linux host (big endian):
$ ./cstool/cstool m68k40 'f2 3c 44 22 40 49 0e 56'
0 f2 3c 44 22 40 49 0e 56 fadd.s #0.000000, fp0
This was originally discovered by @plugwash in capstone-rust/capstone-rs#137 for debian testing CI tests for rust-capstone (rust-lang bindings).
Reproducing/Testing
I was able to get a s390x virtualized using multiarch/qemu-user-static container as mentioned in these docs:
https://docs.gitlab.com/omnibus/development/s390x.html
It looks like the upstream C library has a bug when running on a big endian host:
$ uname -a
Linux d2dad0ba076b 5.19.0-76051900-generic #202207312230~1663791054~22.04~28340d4~dev-Ubuntu SMP PREEMPT_DY s390x s390x s390x GNU/Linux
$ ./cstool/cstool m68k40 'f2 3c 44 22 40 49 0e 56'
0 f2 3c 44 22 40 49 0e 56 fadd.s #0.000000, fp0
This is just one example test that failed--there are many. More testing is required to find more error cases.
Also, ideally a big endian architecture would be tested in CI.
Metadata
Metadata
Assignees
Labels
No labels