i#6417: Handle AMD 32-bit syscall instruction. #6464
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Handle AMD 32-bit syscall instruction.
The fix is to check for AMD 32-bit SYSCALL in is_at_do_syscall().
Here's more details:
CI x86-32 signalNNNN tests started failing recently. After checking the log, the failures happen on AMD 32-bit system.
Based on the debug logs
AMD:
0xf7f90583 89 cd mov %ecx -> %ebp
0xf7f90585 0f 05 syscall -> %ecx
interp: syscall @ 0xf7f90585
instr_get_opcode(instr): 95
change_prot(0xf7f90000, 0x2000, rwx) => mprotect(0xf7f90000, 0x2000, 7)==2 pages
change_prot(0xf7f90000, 0x2000, r-x) => mprotect(0xf7f90000, 0x2000, 5)==2 pages
set_syscall_method to 3make_writable: pc 0x441fc000 -> 0x441fc000-0x441fe000 0
Just updated syscall routine:
0x441fd240 0f 05 syscall -> %ecx
0x441fd242 a3 5c 29 18 44 mov %eax -> 0x4418295c[4byte]
whereas Intel uses sysenter, and set the syscall_method to SYSCALL_METHOD_SYSENTER:
0xf7f71583 89 e5 mov %esp -> %ebp
0xf7f71585 0f 34 sysenter -> %esp
interp: syscall @ 0xf7f71585
change_prot(0xf7f71000, 0x2000, rwx) => mprotect(0xf7f71000, 0x2000, 7)==2 pages
change_prot(0xf7f71000, 0x2000, r-x) => mprotect(0xf7f71000, 0x2000, 5)==2 pages
set_syscall_method to 2make_writable: pc 0x4845a000 -> 0x4845a000-0x4845c000 0
Just updated syscall routine:
0x4845b240 0f 34 sysenter -> %esp
0x4845b242 a3 5c 09 3e 48 mov %eax -> 0x483e095c[4byte]
Issue: #6417