summary refs log tree commit diff stats
path: root/gitlab/issues/target_missing/host_missing/accel_missing/2307.toml
blob: 8b81b2276b84f0182737261c8bb3ff747f148e45 (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
41
42
43
44
45
46
47
48
49
id = 2307
title = "QEMU Windows COM port filenames not recognized i.e. \\\\.\\COM19 or \\\\.\\CNCA0"
state = "opened"
created_at = "2024-04-24T12:54:33.755Z"
closed_at = "n/a"
labels = ["Chardev", "hostos: Windows"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/2307"
host-os = "Windows 10"
host-arch = "x64"
qemu-version = "QEMU emulator version 8.1.0 (v8.1.0-12034-g129566d84e)"
guest-os = "n/a"
guest-arch = "n/a"
description = "n/a"
reproduce = """1. Run qemu-system-arm with the comand line above.
2. QEMU fails with `qemu-system-arm.exe: -gdb \\\\.\\CNCA8: '\\\\.\\CNCA8' is not a valid char driver`
3. ```qemu-system-arm.exe -machine mps2-an500 -gdb \\\\.\\COM19
qemu-system-arm.exe: -gdb \\\\.\\COM19: '\\\\.\\COM19' is not a valid char driver
```"""
additional = """Windows allows COM ports numbered 10 and higher to be prefixed with a `\\\\.\\` escape as in `\\\\.\\COM17`. Such COM port assignments are not uncommon when a plurality of USB serial adapters.
Equally problematic are virtual COM port designations such as `\\\\.\\CNCA8` created by the Windows 10x64 driver package known as `com0com`: https://pete.akeo.ie/2011/07/com0com-signed-drivers.html

Upon checking the source pulled from the Github mirror an initial fix was to simply modify /chardev/char.c, but this appears insufficient. Sadly.

Please ask if more information is required. I am actively working on extending an existing QEMU machine emulation. A patch to fix this problem is below. Please comment if applicable.

Jerry.

```
diff --git a/chardev/char.c b/chardev/char.c
index 3c43fb1278..7a3f342c72 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -418,6 +418,13 @@ QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename,
         qemu_opt_set(opts, "path", filename, &error_abort);
         return opts;
     }
+       // JME
+    if (strstart(filename, "\\\\\\\\.\\\\", NULL)) {
+        qemu_opt_set(opts, "backend", "serial", &error_abort);
+        qemu_opt_set(opts, "path", filename, &error_abort);
+        return opts;
+    }
+
     if (strstart(filename, "file:", &p)) {
         qemu_opt_set(opts, "backend", "file", &error_abort);
         qemu_opt_set(opts, "path", p, &error_abort);

```
/label ~"kind::Bug""""