summary refs log tree commit diff stats
path: root/gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml
diff options
context:
space:
mode:
Diffstat (limited to 'gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml')
-rw-r--r--gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml78
1 files changed, 78 insertions, 0 deletions
diff --git a/gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml b/gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml
new file mode 100644
index 00000000..68f0df5f
--- /dev/null
+++ b/gitlab/issues/target_sparc/host_missing/accel_missing/1564.toml
@@ -0,0 +1,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];
+```"""