summary refs log tree commit diff stats
path: root/gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml
blob: 68f0df5f266b253b08a5dbabd764b8438503ea0f (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
id = 1564
title = "stat64 on sparc64 failed to get correct major/minor dev"
state = "opened"
created_at = "2023-03-28T11:33:28.707Z"
closed_at = "n/a"
labels = ["linux-user", "target: sparc"]
url = "https://gitlab.com/qemu-project/qemu/-/issues/1564"
host-os = "Slackware 15.0"
host-arch = "x86"
qemu-version = "7.2.91"
guest-os = "Slackware 14.2"
guest-arch = "sparc64"
description = """The reported device major/minor is not correct, e.g: stat /dev/zero:
Reported: Device type: 0,10500000
Correct : Device type: 1,5"""
reproduce = """1. "stat /dev/zero" or "ls -l /dev/zero""""
additional = """The problem is a missing padding into target_stat64 struct related to sparc64. Here patch to solve the issue (it also fixes some incorrect variables size):

```
--- qemu-20230327/linux-user/syscall_defs.h\t2023-03-27 15:41:42.000000000 +0200
+++ qemu-20230327/linux-user/syscall_defs.h.new\t2023-03-27 21:43:25.615115126 +0200
@@ -1450,7 +1450,7 @@ struct target_stat {
 \tunsigned int\tst_dev;
 \tabi_ulong\tst_ino;
 \tunsigned int\tst_mode;
-\tunsigned int\tst_nlink;
+\tshort int\tst_nlink;
 \tunsigned int\tst_uid;
 \tunsigned int\tst_gid;
 \tunsigned int\tst_rdev;
@@ -1465,8 +1465,7 @@ struct target_stat {
 
 #define TARGET_HAS_STRUCT_STAT64
 struct target_stat64 {
-\tunsigned char\t__pad0[6];
-\tunsigned short\tst_dev;
+\tuint64_t\tst_dev;
 
 \tuint64_t\tst_ino;
 \tuint64_t\tst_nlink;
@@ -1476,14 +1475,13 @@ struct target_stat64 {
 \tunsigned int\tst_uid;
 \tunsigned int\tst_gid;
 
-\tunsigned char\t__pad2[6];
-\tunsigned short\tst_rdev;
+\tunsigned int\t__pad0;
+\tuint64_t\tst_rdev;
 
         int64_t\t\tst_size;
 \tint64_t\t\tst_blksize;
 
-\tunsigned char\t__pad4[4];
-\tunsigned int\tst_blocks;
+\tint64_t\t\tst_blocks;
 
 \tabi_ulong\ttarget_st_atime;
 \tabi_ulong\ttarget_st_atime_nsec;
@@ -1522,8 +1520,7 @@ struct target_stat {
 
 #define TARGET_HAS_STRUCT_STAT64
 struct target_stat64 {
-\tunsigned char\t__pad0[6];
-\tunsigned short\tst_dev;
+\tuint64_t st_dev;
 
 \tuint64_t st_ino;
 
@@ -1533,8 +1530,7 @@ struct target_stat64 {
 \tunsigned int\tst_uid;
 \tunsigned int\tst_gid;
 
-\tunsigned char\t__pad2[6];
-\tunsigned short\tst_rdev;
+\tuint64_t        st_rdev;
 
 \tunsigned char\t__pad3[8];
```"""