summary refs log tree commit diff stats
path: root/results/classifier/user-mode-bugs/837
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/user-mode-bugs/837')
-rw-r--r--results/classifier/user-mode-bugs/83732
1 files changed, 32 insertions, 0 deletions
diff --git a/results/classifier/user-mode-bugs/837 b/results/classifier/user-mode-bugs/837
new file mode 100644
index 000000000..73249b93c
--- /dev/null
+++ b/results/classifier/user-mode-bugs/837
@@ -0,0 +1,32 @@
+
+
+x86 user: icebp/int1 raises wrong signal
+Description of problem:
+This is a relatively minor inaccuracy. When `icebp` (`F1`) is executed, it raises `SIGILL` in QEMU, where the behavior on baremetal Linux (on an old Intel Core i5-430m) is to raise `SIGTRAP`.
+
+Specifically, on the architectural level, `icebp` raises `#DB` without affecting `dr6`.
+
+This also happens on an AArch64 host.
+```
+$ ./icebp
+Trace/breakpoint trap
+$ qemu-x86_64 ./icebp
+qemu: uncaught target signal 4 (Illegal instruction) - core dumped
+Illegal instruction
+```
+Steps to reproduce:
+1. Compile this file using `gcc -nostdlib -static icebp.S -o icebp`, optionally with `-m32` to test i386
+```
+    .globl _start
+_start:
+    .byte  0xF1 // gas doesn't assemble this instruction opcode but it disassembles it
+#ifdef __x86_64__
+    mov    $60, %eax
+    syscall
+#else
+    mov    $1, %eax
+    int    $0x80
+#endif 
+```
+2. Run on baremetal. Notice how it raises `SIGTRAP` according to the shell job control message
+3. Run on qemu-user. Notice how it raises `SIGILL`.