A few fixlets to the SIGSEGV library: - Don't export transfer types definitions (formerly used by older API) - Handle ADD instructions in ix86_skip_instruction() (generated by icc 9.1) - Use "%p" format for EIP/RIP addresses
MacOS X exception handling updates: - Call user handler for KERN_INVALID_ADDRESS too (SIGBUS) - Check for VALID_THREAD_STATE_FLAVOR in forward_exception() - Return KERN_FAILURE if forward_exception() got an unknown behavior code
decode movslq (generated by gcc4.1)
add some barriers to make sure L_e_region* really come after the test insns
ugly cast games
Code I wrote yesterday was totally broken. It's enough to make sure nPC is correctly updated too... Instruction skipper now works on Solaris/SPARC.
- Fix SPARC Store Doubleword transfer_size in decoder. - In the instruction skipper code, add a huge kludge (trampoline) to forcibly zero out %global registers when requested. Otherwise, Solaris/SPARC turned out to use %g1 during signal handling, and the zero we could have written to there vanished. This assumes [%sp-8] is valid to use (ABI states data below %sp is undefined though)
Adapt for MacOS X for Intel, also fix thread_state type in forward_exception()
Mach exception recovery and instruction skipping for Darwin/x86.
Enable instruction skipping for OpenBSD 3.4 on i386
instruction skipper for Solaris/i386 (Solaris 9)
NetBSD/ppc support
Happy New Year!
Fixes for NetBSD 2.0
Check that we can really read at the faulty eip in Windows prior to decoding the instruction. Also fix the unrecoverable fault dump to really be useful.
ppc64 fixes
Integrate SIGSEGV recovery from libsigsegv for Windows and Cygwin. Also implement instruction skipper for Windows/x86.
Decode MOVSX r32, r/m16 (generated by icc v8.0 on x86)
cosmetic fixes when printing movsbq operation summary
handle (skip) x86 movsbl instructions
Summary: possible support of SheepShaver on Zaurus PDAs Add Linux/ARM instruction skipping, includes support for ARMv4+ halfword and signed data transfer instructions. Note that load/store multiple are not handled and someone has to make sure post-incr/write-back logic is correctly implemented.
Added missing switch value to eliminate a warning
ARM/linux sigsegv handler. Instruction skipper yet to be written for happy Zaurus owners.
Happy New Year! :)
Instruction skipper for Solaris/SPARC.
Add support for Linux/hppa, FreeBSD/alpha. Misc debugging output.
MIPS instruction skipper. TODO: check LWL/LWR semantics.
Fix subterfuge mode on IRIX/mips. Get PC in both modes for Irix too
really fix writes to byte registers
fix configure tests. i.e. move up arch_insn_skipper_tests()
Extend x86 instruction skipper to AMD64. Add plenty of arch dependent opcodes to test it. Also fix DEBUG output & writes (zero'ing) to %xH regs
- FreeBSD/i386 sigcontext subterfuge support for instruction skipper - NetBSD/alpha support from Boehm GC - NetBSD/i386 won't work in sigcontext subterfuge mode unless instruction is decoded more accurately to compute the effective address. Also note that NetBSD 1.6 does not support siginfo_t yet.
Solaris/SPARC support for SIGSEGV_FAULT_INSTRUCTION
fix merge with Mach exception filters, we have preconditions to check
indentation fixes, optimize handle_badaccess() to receive only necessary data and don't copy a struct sigcontext again on x86.
return something more convenient to debug on errors
Make sure reported fault instruction address falls into the expected code range. This is a configure-time safety net that depends on the GCC "Labels as Values" extension.
Mach memory fault recovery from Michael Z. Sliczniak
really fix typo!
fix typo
New SIGSEGV API so that skip-instruction requests are more explicit. Yes, that's api change, but that's cooler now for SheepShaver. ;-)
Bring x86 instruction skipper back to life
New API to ignore a SIGSEGV fault. This should help on SheepShaver/x86 for now since I still don't know why MacOS would like to write to ROM on a particular test.
configure script is reportedly no longer crashing on FreeBSD when SIGSEGV_SKIP_INSTRUCTION is set.
- New arch support for IP retrieval on SIGSEGV.
Correctly guard FreeBSD bits
Backout "ignoresegv" support on FreeBSD/x86 for now. Unfortunately, the configure script would hang whereas standalone testing will pass all tests. Any idea why?? - Unix/sigsegv.cpp (ix86_skip_instruction): Add decoder for mozbl instruction. (SIGSEGV_REGISTER_FILE [FreeBSD/x86]): Note why we start at EDI offset rather than plain sigcontext pointer. i.e. I don't know sigset_t size beforehand and don't intend to.
Implement "ignoresegv" feature on FreeBSD/x86 (tested on FreeBSD 4.5) - sigsegv.cpp (ix86_skip_instruction): Add decoder for movzwl instructions. (main): oddly, FreeBSD doesn't seem to let a write to a page if it is write-only. Aka. make the page readable too.
- Fix compilation on Linux/x86 with SIGCONTEXT_SUBTERFUGE
- sigsegv.cpp (ix86_skip_instruction): Fix DEBUG compilation.
Implement "ignoresegv" feature on Darwin/ppc (tested on MacOS X) - Unix/sigsegv.cpp (powerpc_decode_instruction): New. (get_fault_instruction [MacOS X]): Factorize code. (get_fault_instruction [Linux/m68k]): Don't use expression statement. - README (ignoresegv): Add Darwin/ppc to list of supported platforms.
Implement "ignoresegv" feature on Linux/ppc: - Unix/sigsegv.cpp (powerpc_skip_instruction): New from SheepShaver code. - README (ignoresegv): Add Linux/ppc to list of supported platforms.
- video_vosh.h (Screen_fault_handler): Move unrecoverable fault case to... - main_unix.cpp (sigsegv_dump_state): ... Here. - sigsegv.h (sigsegv_fault_handler_t): Rename from sigsegv_handler_t. - sigsegv.h (sigsegv_state_dumper_t): New.
- Merge with clisp SIGSEGV library version 1.2 with support added for HP-UX (contributed by Paolo Bonzini) - Add missing? include <ucontext.h> for Irix and OSF/1 support
Implement the "ignoresegv" feature from SheepShaver. This is Unix-specific so far. Target platform is currently Linux/x86.
- Add fault instruction recovery for Linux/ppc and siginfo_t handlers
direct addressing works under FreeBSD (says Michael Alyn Miller :-)
- documentation updates - 2001 -> 2002 - version 0.9 -> 1.0
- Add EIP recovery on Linux/x86 when using siginfo_t based signal handlers
- small fixes for Linux/ia64
- added SIGSEGV support for Linux/Alpha (to be checked), Darwin/PPC - added uniform virtual memory allocation (supports mmap(), vm_allocate(), or fallbacks to malloc()/free()) - cleaned up memory allocation in main_unix.cpp
- use "volatile" to prevent from optimization for writes to page
- fixed "SIGSEGV recovery" not supported case
- new and updated SIGSEGV support functions: + configure script cleanups + possible support for Direct Addressing / VOSF on other platforms
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.