blob: 94b9f97dc0b6870f5f9425379ee2f4dd4b8c141b (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Support SIGILL to the guest
Currently FEX will just close an application if it encounters a block with an invalid instruction.
We can support giving the guest a SIGILL.
This should be done in two steps to reduce the amount of immediate work
1) Support the use-case of SIGILL + guest handler terminate
- This means that once the frontend encounters and invalid operation.
- Save Thread state
- End the Block
- Call a SIGILL host side handler
- Pass the signal information to the guest
- Invoke the guests signal handler with the known good information
- Guest will invoke terminate, thus taking down the application and FEX with it
2) Once step 1 is done, support use cases where an application is testing for instructions and safely recovering
- Guest will modify the passed in ucontext once it has caught the sigill
- Most likely modifying RIP to jump past the instruction, or using longjump to escape
- Will likely also modify another GPR to know the failure case
- Once the guest has returned from its signal, we need to read the state back in to our context and safely continue
- This can benefit more than SIGILL later once we have some form of state recovery for the other signals.
|