diff options
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.toml | 78 |
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]; +```""" |