unicorn/qemu/target-sparc
Mark Cave-Ayland 7dcdae9807
target-sparc: fix ldstub sign-extension bug
ldstub [addr], reg incorrectly reads a signed byte from memory which causes
problems in the 32-bit Solaris mutex code. Here the byte value being read is
0xff which is incorrectly sign-extended to 0xffffffff before being written back
to the target register causing lock detection to behave incorrectly.

This fixes the intermittent hangs and MUTEX_HELD warnings issued to the
console when running 32-bit Solaris images under qemu-system-sparc.

With thanks to Joseph Dery for providing a condensed test image to consistently
reproduce the problem on demand, and Martin Husemann for allowing me access to
real hardware for comparison.

Backports commit 4553e10360a0713e31647220ed396942f9a6fca0 from qemu
2018-02-23 13:37:36 -05:00
..
cc_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
cpu-qom.h remove slow cpu QOM casts (#815) 2017-05-02 14:56:39 +08:00
cpu.c include/qemu/osdep.h: Don't include qapi/error.h 2018-02-21 23:08:18 -05:00
cpu.h exec.c: Drop TARGET_HAS_ICE define and checks 2018-02-18 18:17:14 -05:00
fop_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
helper.h rework code/block tracing 2016-01-22 18:42:27 -08:00
int32_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
int64_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
ldst_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
Makefile.objs cleanup Sparc unused code 2017-01-23 12:34:00 +08:00
mmu_helper.c tlb: Add ifetch argument to cpu_mmu_index() 2018-02-17 15:23:37 -05:00
TODO import 2015-08-21 15:04:50 +08:00
translate.c target-sparc: fix ldstub sign-extension bug 2018-02-23 13:37:36 -05:00
unicorn.c tcg: Make cpu_regs_sparc a TCGv array 2018-02-21 01:50:28 -05:00
unicorn.h New feature: registers can be bulk saved/restored in an opaque blob 2016-08-20 04:14:07 -07:00
unicorn64.c This code should now build the x86_x64-softmmu part 2. 2017-01-19 22:50:28 +11:00
vis_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00
win_helper.c sparc: Clean up includes 2018-02-19 00:52:41 -05:00