summary refs log tree commit diff stats
path: root/gitlab/issues/target_i386/host_missing/accel_missing/837.toml
blob: 2af3ee599fb81ae6b0df13607e5c59b933a17862 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
id = 837
title = "x86 user: icebp/int1 raises wrong signal"
state = "closed"
created_at = "2022-01-24T05:02:44.865Z"
closed_at = "2022-03-15T04:43:46.057Z"
labels = ["Closed::WontFix", "linux-user", "target: i386"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/837"
host-os = "MX Linux 21/Debian 11"
host-arch = "x86_64"
qemu-version = "6.2.0"
guest-os = "linux-user"
guest-arch = "i386, x86_64"
description = """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
```"""
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`."""
additional = "n/a"