* [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches
@ 2018-05-14 18:19 Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 1/7] linux-user: define correct fcntl() values for sparc Laurent Vivier
` (7 more replies)
0 siblings, 8 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
The following changes since commit c74e62ee3e2dc2955e07d004c71badecb68a84eb:
Merge remote-tracking branch 'remotes/rth/tags/cota-target-pull-request' into staging (2018-05-11 15:41:29 +0100)
are available in the Git repository at:
git://github.com/vivier/qemu.git tags/linux-user-for-2.13-pull-request
for you to fetch changes up to f606e4d6258fa82c3f6c1cc762ebe483db5f5db6:
linux-user: correctly align types in thunking code (2018-05-14 12:01:21 +0200)
----------------------------------------------------------------
Mostly sparc fixes, allowing to do a "debootstrap --second-stage",
including some structures alignment fixes.
This series fixes following LTP 20180118 tests on a x86_64 host:
armhf: epoll_wait02 getpriority01 nice03 pselect01 pselect01_64
arm64: epoll_wait02 getpriority01 nice03 poll02 pselect01 pselect01_64 select04
s390x: epoll_wait02 getpriority01 nice03 poll02 pselect01 pselect01_64 select04
mips: epoll_wait02 getpriority01 nice03 poll02 pselect01 pselect01_64
mips64el: epoll_wait02 getpriority01 nice03 pselect01 pselect01_64 select04
mipsel: epoll_wait02 getpriority01 nice03 madvise06 poll02 select04
ppc64: epoll_wait02 getpriority01 nice03 poll02 select04
ppc64el: getpriority01 nice03 pselect01 select04
sh4: getpriority01 nice03 madvise06 poll02 pselect01 select04
----------------------------------------------------------------
Laurent Vivier (7):
linux-user: define correct fcntl() values for sparc
linux-user: fix flock/flock64 padding
linux-user: update sparc/syscall_nr.h to linux header 4.16
linux-user: fix conversion of flock/flock64 l_type field
linux-user: add sparc/sparc64 specific errno
linux-user: fix UNAME_MACHINE for sparc/sparc64
linux-user: correctly align types in thunking code
include/exec/user/thunk.h | 22 +++-
linux-user/sparc/syscall_nr.h | 32 +++++-
linux-user/sparc/target_errno.h | 207 ++++++++++++++++++++++++++++++++++++
linux-user/sparc/target_syscall.h | 4 +-
linux-user/sparc64/syscall_nr.h | 20 ++--
linux-user/sparc64/target_syscall.h | 5 +-
linux-user/syscall.c | 66 ++++++++----
linux-user/syscall_defs.h | 25 ++++-
8 files changed, 343 insertions(+), 38 deletions(-)
create mode 100644 linux-user/sparc/target_errno.h
--
2.14.3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 1/7] linux-user: define correct fcntl() values for sparc
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 2/7] linux-user: fix flock/flock64 padding Laurent Vivier
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20180509231123.20864-2-laurent@vivier.eu>
---
linux-user/syscall_defs.h | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 361bb83a29..ec3f561685 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2441,6 +2441,15 @@ struct target_statfs64 {
#define TARGET_F_SETLKW 7
#define TARGET_F_GETOWN 11 /* for sockets. */
#define TARGET_F_SETOWN 12 /* for sockets. */
+#elif defined(TARGET_SPARC)
+#define TARGET_F_RDLCK 1
+#define TARGET_F_WRLCK 2
+#define TARGET_F_UNLCK 3
+#define TARGET_F_GETOWN 5 /* for sockets. */
+#define TARGET_F_SETOWN 6 /* for sockets. */
+#define TARGET_F_GETLK 7
+#define TARGET_F_SETLK 8
+#define TARGET_F_SETLKW 9
#else
#define TARGET_F_GETLK 5
#define TARGET_F_SETLK 6
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 2/7] linux-user: fix flock/flock64 padding
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 1/7] linux-user: define correct fcntl() values for sparc Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 3/7] linux-user: update sparc/syscall_nr.h to linux header 4.16 Laurent Vivier
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
include/uapi/asm-generic/fcntl.h insert a padding macro at
the end of the structures flock and flock64.
This macro is defined to "short __unused;" on sparc,
and "long pad[4]" on mips.
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20180509231123.20864-3-laurent@vivier.eu>
---
linux-user/syscall_defs.h | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index ec3f561685..e4cd87cc00 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -2643,6 +2643,17 @@ struct target_statfs64 {
#define TARGET_O_SYNC (TARGET___O_SYNC | TARGET_O_DSYNC)
#endif
+#if defined(TARGET_SPARC)
+#define TARGET_ARCH_FLOCK_PAD abi_short __unused;
+#define TARGET_ARCH_FLOCK64_PAD abi_short __unused;
+#elif defined(TARGET_MIPS)
+#define TARGET_ARCH_FLOCK_PAD abi_long pad[4];
+#define TARGET_ARCH_FLOCK64_PAD
+#else
+#define TARGET_ARCH_FLOCK_PAD
+#define TARGET_ARCH_FLOCK64_PAD
+#endif
+
struct target_flock {
short l_type;
short l_whence;
@@ -2652,9 +2663,7 @@ struct target_flock {
abi_long l_sysid;
#endif
int l_pid;
-#if defined(TARGET_MIPS)
- abi_long pad[4];
-#endif
+ TARGET_ARCH_FLOCK_PAD
};
struct target_flock64 {
@@ -2663,6 +2672,7 @@ struct target_flock64 {
abi_llong l_start;
abi_llong l_len;
abi_int l_pid;
+ TARGET_ARCH_FLOCK64_PAD
};
struct target_f_owner_ex {
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 3/7] linux-user: update sparc/syscall_nr.h to linux header 4.16
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 1/7] linux-user: define correct fcntl() values for sparc Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 2/7] linux-user: fix flock/flock64 padding Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 4/7] linux-user: fix conversion of flock/flock64 l_type field Laurent Vivier
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
And kill sys_aplib, add sys_sync_file_range:
on sparc, since linux 2.6.17, aplib syscall has been replaced
by sync_file_range syscall.
(289eee6fa78e ["SPARC]: Wire up sys_sync_file_range() into syscall tables.")
The syscall has been removed in linux v2.5.71
(6196166fad "[SPARC64]: Kill sys_aplib.")
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20180509231123.20864-4-laurent@vivier.eu>
---
linux-user/sparc/syscall_nr.h | 32 +++++++++++++++++++++++++++++++-
linux-user/sparc64/syscall_nr.h | 20 ++++++++++++--------
2 files changed, 43 insertions(+), 9 deletions(-)
diff --git a/linux-user/sparc/syscall_nr.h b/linux-user/sparc/syscall_nr.h
index e713c9d5f4..2d77e19bec 100644
--- a/linux-user/sparc/syscall_nr.h
+++ b/linux-user/sparc/syscall_nr.h
@@ -22,6 +22,7 @@
#define TARGET_NR_capset 22 /* Linux Specific */
#define TARGET_NR_setuid 23 /* Implemented via setreuid in SunOS */
#define TARGET_NR_getuid 24 /* Common */
+#define TARGET_NR_vmsplice 25
#define TARGET_NR_ptrace 26 /* Common */
#define TARGET_NR_alarm 27 /* Implemented via setitimer in SunOS */
#define TARGET_NR_sigaltstack 28 /* Common */
@@ -135,6 +136,7 @@
#define TARGET_NR_rmdir 137 /* Common */
#define TARGET_NR_utimes 138 /* SunOS Specific */
#define TARGET_NR_stat64 139 /* Linux sparc32 Specific */
+#define TARGET_NR_sendfile64 140
#define TARGET_NR_getpeername 141 /* Common */
#define TARGET_NR_futex 142 /* gethostid under SunOS */
#define TARGET_NR_gettid 143 /* ENOSYS under SunOS */
@@ -145,29 +147,51 @@
#define TARGET_NR_pciconfig_read 148 /* ENOSYS under SunOS */
#define TARGET_NR_pciconfig_write 149 /* ENOSYS under SunOS */
#define TARGET_NR_getsockname 150 /* Common */
+#define TARGET_NR_inotify_init 151
+#define TARGET_NR_inotify_add_watch 152
#define TARGET_NR_poll 153 /* Common */
#define TARGET_NR_getdents64 154 /* Linux specific */
#define TARGET_NR_fcntl64 155 /* Linux sparc32 Specific */
+#define TARGET_NR_inotify_rm_watch 156
#define TARGET_NR_statfs 157 /* Common */
#define TARGET_NR_fstatfs 158 /* Common */
#define TARGET_NR_umount 159 /* Common */
+#define TARGET_NR_sched_set_affinity 160
+#define TARGET_NR_sched_get_affinity 161
#define TARGET_NR_getdomainname 162 /* SunOS Specific */
#define TARGET_NR_setdomainname 163 /* Common */
#define TARGET_NR_quotactl 165 /* Common */
#define TARGET_NR_set_tid_address 166 /* Linux specific, exportfs under SunOS */
#define TARGET_NR_mount 167 /* Common */
#define TARGET_NR_ustat 168 /* Common */
+#define TARGET_NR_setxattr 169
+#define TARGET_NR_lsetxattr 170
+#define TARGET_NR_fsetxattr 171
+#define TARGET_NR_getxattr 172
+#define TARGET_NR_lgetxattr 173
#define TARGET_NR_getdents 174 /* Common */
#define TARGET_NR_setsid 175 /* Common */
#define TARGET_NR_fchdir 176 /* Common */
+#define TARGET_NR_fgetxattr 177
+#define TARGET_NR_listxattr 178
+#define TARGET_NR_llistxattr 179
+#define TARGET_NR_flistxattr 180
+#define TARGET_NR_removexattr 181
+#define TARGET_NR_lremovexattr 182
#define TARGET_NR_sigpending 183 /* Common */
#define TARGET_NR_query_module 184 /* Linux Specific */
#define TARGET_NR_setpgid 185 /* Common */
+#define TARGET_NR_fremovexattr 186
#define TARGET_NR_tkill 187 /* SunOS: fpathconf */
#define TARGET_NR_exit_group 188 /* Linux specific, sysconf undef SunOS */
#define TARGET_NR_uname 189 /* Linux Specific */
#define TARGET_NR_init_module 190 /* Linux Specific */
#define TARGET_NR_personality 191 /* Linux Specific */
+#define TARGET_NR_remap_file_pages 192
+#define TARGET_NR_epoll_create 193
+#define TARGET_NR_epoll_ctl 194
+#define TARGET_NR_epoll_wait 195
+#define TARGET_NR_ioprio_set 196
#define TARGET_NR_getppid 197 /* Linux Specific */
#define TARGET_NR_sigaction 198 /* Linux Specific */
#define TARGET_NR_sgetmask 199 /* Linux Specific */
@@ -189,6 +213,7 @@
#define TARGET_NR_ipc 215 /* Linux Specific */
#define TARGET_NR_sigreturn 216 /* Linux Specific */
#define TARGET_NR_clone 217 /* Linux Specific */
+#define TARGET_NR_ioprio_get 218
#define TARGET_NR_adjtimex 219 /* Linux Specific */
#define TARGET_NR_sigprocmask 220 /* Linux Specific */
#define TARGET_NR_create_module 221 /* Linux Specific */
@@ -202,6 +227,7 @@
#define TARGET_NR_setfsgid 229 /* Linux Specific */
#define TARGET_NR__newselect 230 /* Linux Specific */
#define TARGET_NR_time 231 /* Linux Specific */
+#define TARGET_NR_splice 232
#define TARGET_NR_stime 233 /* Linux Specific */
#define TARGET_NR_statfs64 234 /* Linux Specific */
#define TARGET_NR_fstatfs64 235 /* Linux Specific */
@@ -224,7 +250,7 @@
#define TARGET_NR_getsid 252
#define TARGET_NR_fdatasync 253
#define TARGET_NR_nfsservctl 254
-#define TARGET_NR_aplib 255
+#define TARGET_NR_sync_file_range 255
#define TARGET_NR_clock_settime 256
#define TARGET_NR_clock_gettime 257
#define TARGET_NR_clock_getres 258
@@ -326,3 +352,7 @@
#define TARGET_NR_listen 354
#define TARGET_NR_setsockopt 355
#define TARGET_NR_mlock2 356
+#define TARGET_NR_copy_file_range 357
+#define TARGET_NR_preadv2 358
+#define TARGET_NR_pwritev2 359
+#define TARGET_NR_statx 360
diff --git a/linux-user/sparc64/syscall_nr.h b/linux-user/sparc64/syscall_nr.h
index 2b49ead267..9391645598 100644
--- a/linux-user/sparc64/syscall_nr.h
+++ b/linux-user/sparc64/syscall_nr.h
@@ -23,7 +23,7 @@
#define TARGET_NR_capset 22 /* Linux Specific */
#define TARGET_NR_setuid 23 /* Implemented via setreuid in SunOS */
#define TARGET_NR_getuid 24 /* Common */
-/* #define TARGET_NR_time alias 25 ENOSYS under SunOS */
+#define TARGET_NR_vmsplice 25
#define TARGET_NR_ptrace 26 /* Common */
#define TARGET_NR_alarm 27 /* Implemented via setitimer in SunOS */
#define TARGET_NR_sigaltstack 28 /* Common */
@@ -149,8 +149,8 @@
#define TARGET_NR_pciconfig_read 148 /* ENOSYS under SunOS */
#define TARGET_NR_pciconfig_write 149 /* ENOSYS under SunOS */
#define TARGET_NR_getsockname 150 /* Common */
-/* #define TARGET_NR_getmsg 151 SunOS Specific */
-/* #define TARGET_NR_putmsg 152 SunOS Specific */
+#define TARGET_NR_inotify_init 151
+#define TARGET_NR_inotify_add_watch 152
#define TARGET_NR_poll 153 /* Common */
#define TARGET_NR_getdents64 154 /* Linux specific */
#define TARGET_NR_fcntl64 155 /* Linux sparc32 Specific */
@@ -194,7 +194,7 @@
#define TARGET_NR_epoll_create 193 /* Linux Specific */
#define TARGET_NR_epoll_ctl 194 /* Linux Specific */
#define TARGET_NR_epoll_wait 195 /* Linux Specific */
-/* #define TARGET_NR_ulimit 196 Linux Specific */
+#define TARGET_NR_ioprio_set 196
#define TARGET_NR_getppid 197 /* Linux Specific */
#define TARGET_NR_sigaction 198 /* Linux Specific */
#define TARGET_NR_sgetmask 199 /* Linux Specific */
@@ -216,7 +216,7 @@
#define TARGET_NR_ipc 215 /* Linux Specific */
#define TARGET_NR_sigreturn 216 /* Linux Specific */
#define TARGET_NR_clone 217 /* Linux Specific */
-/* #define TARGET_NR_modify_ldt 218 Linux Specific - i386 specific, unused */
+#define TARGET_NR_ioprio_get 218
#define TARGET_NR_adjtimex 219 /* Linux Specific */
#define TARGET_NR_sigprocmask 220 /* Linux Specific */
#define TARGET_NR_create_module 221 /* Linux Specific */
@@ -230,7 +230,7 @@
#define TARGET_NR_setfsgid 229 /* Linux Specific */
#define TARGET_NR__newselect 230 /* Linux Specific */
#define TARGET_NR_time 231 /* Linux sparc32 */
-/* #define TARGET_NR_oldstat 232 Linux Specific */
+#define TARGET_NR_splice 232
#define TARGET_NR_stime 233 /* Linux Specific */
#define TARGET_NR_statfs64 234 /* Linux Specific */
#define TARGET_NR_fstatfs64 235 /* Linux Specific */
@@ -253,7 +253,7 @@
#define TARGET_NR_getsid 252
#define TARGET_NR_fdatasync 253
#define TARGET_NR_nfsservctl 254
-#define TARGET_NR_aplib 255
+#define TARGET_NR_sync_file_range 255
#define TARGET_NR_clock_settime 256
#define TARGET_NR_clock_gettime 257
#define TARGET_NR_clock_getres 258
@@ -310,7 +310,7 @@
#define TARGET_NR_epoll_pwait 309
#define TARGET_NR_utimensat 310
#define TARGET_NR_signalfd 311
-#define TARGET_NR_timerfd 312
+#define TARGET_NR_timerfd_create 312
#define TARGET_NR_eventfd 313
#define TARGET_NR_fallocate 314
#define TARGET_NR_timerfd_settime 315
@@ -355,3 +355,7 @@
#define TARGET_NR_listen 354
#define TARGET_NR_setsockopt 355
#define TARGET_NR_mlock2 356
+#define TARGET_NR_copy_file_range 357
+#define TARGET_NR_preadv2 358
+#define TARGET_NR_pwritev2 359
+#define TARGET_NR_statx 360
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 4/7] linux-user: fix conversion of flock/flock64 l_type field
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
` (2 preceding siblings ...)
2018-05-14 18:19 ` [Qemu-devel] [PULL 3/7] linux-user: update sparc/syscall_nr.h to linux header 4.16 Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 5/7] linux-user: add sparc/sparc64 specific errno Laurent Vivier
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
As l_type values (F_RDLCK, F_WRLCK, F_UNLCK, F_EXLCK, F_SHLCK)
are not bitmasks, we can't use target_to_host_bitmask() and
host_to_target_bitmask() to convert them.
Introduce target_to_host_flock() and host_to_target_flock()
to convert values between host and target.
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20180509231123.20864-5-laurent@vivier.eu>
---
linux-user/syscall.c | 66 ++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 48 insertions(+), 18 deletions(-)
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index e4825747f9..af8603f1b7 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6546,28 +6546,50 @@ static int target_to_host_fcntl_cmd(int cmd)
return -TARGET_EINVAL;
}
-#define TRANSTBL_CONVERT(a) { -1, TARGET_##a, -1, a }
-static const bitmask_transtbl flock_tbl[] = {
- TRANSTBL_CONVERT(F_RDLCK),
- TRANSTBL_CONVERT(F_WRLCK),
- TRANSTBL_CONVERT(F_UNLCK),
- TRANSTBL_CONVERT(F_EXLCK),
- TRANSTBL_CONVERT(F_SHLCK),
- { 0, 0, 0, 0 }
-};
+#define FLOCK_TRANSTBL \
+ switch (type) { \
+ TRANSTBL_CONVERT(F_RDLCK); \
+ TRANSTBL_CONVERT(F_WRLCK); \
+ TRANSTBL_CONVERT(F_UNLCK); \
+ TRANSTBL_CONVERT(F_EXLCK); \
+ TRANSTBL_CONVERT(F_SHLCK); \
+ }
+
+static int target_to_host_flock(int type)
+{
+#define TRANSTBL_CONVERT(a) case TARGET_##a: return a
+ FLOCK_TRANSTBL
+#undef TRANSTBL_CONVERT
+ return -TARGET_EINVAL;
+}
+
+static int host_to_target_flock(int type)
+{
+#define TRANSTBL_CONVERT(a) case a: return TARGET_##a
+ FLOCK_TRANSTBL
+#undef TRANSTBL_CONVERT
+ /* if we don't know how to convert the value coming
+ * from the host we copy to the target field as-is
+ */
+ return type;
+}
static inline abi_long copy_from_user_flock(struct flock64 *fl,
abi_ulong target_flock_addr)
{
struct target_flock *target_fl;
- short l_type;
+ int l_type;
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
return -TARGET_EFAULT;
}
__get_user(l_type, &target_fl->l_type);
- fl->l_type = target_to_host_bitmask(l_type, flock_tbl);
+ l_type = target_to_host_flock(l_type);
+ if (l_type < 0) {
+ return l_type;
+ }
+ fl->l_type = l_type;
__get_user(fl->l_whence, &target_fl->l_whence);
__get_user(fl->l_start, &target_fl->l_start);
__get_user(fl->l_len, &target_fl->l_len);
@@ -6586,7 +6608,7 @@ static inline abi_long copy_to_user_flock(abi_ulong target_flock_addr,
return -TARGET_EFAULT;
}
- l_type = host_to_target_bitmask(fl->l_type, flock_tbl);
+ l_type = host_to_target_flock(fl->l_type);
__put_user(l_type, &target_fl->l_type);
__put_user(fl->l_whence, &target_fl->l_whence);
__put_user(fl->l_start, &target_fl->l_start);
@@ -6604,14 +6626,18 @@ static inline abi_long copy_from_user_oabi_flock64(struct flock64 *fl,
abi_ulong target_flock_addr)
{
struct target_oabi_flock64 *target_fl;
- short l_type;
+ int l_type;
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
return -TARGET_EFAULT;
}
__get_user(l_type, &target_fl->l_type);
- fl->l_type = target_to_host_bitmask(l_type, flock_tbl);
+ l_type = target_to_host_flock(l_type);
+ if (l_type < 0) {
+ return l_type;
+ }
+ fl->l_type = l_type;
__get_user(fl->l_whence, &target_fl->l_whence);
__get_user(fl->l_start, &target_fl->l_start);
__get_user(fl->l_len, &target_fl->l_len);
@@ -6630,7 +6656,7 @@ static inline abi_long copy_to_user_oabi_flock64(abi_ulong target_flock_addr,
return -TARGET_EFAULT;
}
- l_type = host_to_target_bitmask(fl->l_type, flock_tbl);
+ l_type = host_to_target_flock(fl->l_type);
__put_user(l_type, &target_fl->l_type);
__put_user(fl->l_whence, &target_fl->l_whence);
__put_user(fl->l_start, &target_fl->l_start);
@@ -6645,14 +6671,18 @@ static inline abi_long copy_from_user_flock64(struct flock64 *fl,
abi_ulong target_flock_addr)
{
struct target_flock64 *target_fl;
- short l_type;
+ int l_type;
if (!lock_user_struct(VERIFY_READ, target_fl, target_flock_addr, 1)) {
return -TARGET_EFAULT;
}
__get_user(l_type, &target_fl->l_type);
- fl->l_type = target_to_host_bitmask(l_type, flock_tbl);
+ l_type = target_to_host_flock(l_type);
+ if (l_type < 0) {
+ return l_type;
+ }
+ fl->l_type = l_type;
__get_user(fl->l_whence, &target_fl->l_whence);
__get_user(fl->l_start, &target_fl->l_start);
__get_user(fl->l_len, &target_fl->l_len);
@@ -6671,7 +6701,7 @@ static inline abi_long copy_to_user_flock64(abi_ulong target_flock_addr,
return -TARGET_EFAULT;
}
- l_type = host_to_target_bitmask(fl->l_type, flock_tbl);
+ l_type = host_to_target_flock(fl->l_type);
__put_user(l_type, &target_fl->l_type);
__put_user(fl->l_whence, &target_fl->l_whence);
__put_user(fl->l_start, &target_fl->l_start);
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 5/7] linux-user: add sparc/sparc64 specific errno
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
` (3 preceding siblings ...)
2018-05-14 18:19 ` [Qemu-devel] [PULL 4/7] linux-user: fix conversion of flock/flock64 l_type field Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 6/7] linux-user: fix UNAME_MACHINE for sparc/sparc64 Laurent Vivier
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
Copied from linux/arch/sparc/include/uapi/asm/errno.h
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20180509231123.20864-6-laurent@vivier.eu>
---
linux-user/sparc/target_errno.h | 207 ++++++++++++++++++++++++++++++++++++
linux-user/sparc/target_syscall.h | 2 +
linux-user/sparc64/target_syscall.h | 3 +-
3 files changed, 211 insertions(+), 1 deletion(-)
create mode 100644 linux-user/sparc/target_errno.h
diff --git a/linux-user/sparc/target_errno.h b/linux-user/sparc/target_errno.h
new file mode 100644
index 0000000000..9b846899cd
--- /dev/null
+++ b/linux-user/sparc/target_errno.h
@@ -0,0 +1,207 @@
+#ifndef SPARC_TARGET_ERRNO_H
+#define SPARC_TARGET_ERRNO_H
+
+/* Target errno definitions taken from asm-sparc/errno.h */
+#undef TARGET_EWOULDBLOCK
+#define TARGET_EWOULDBLOCK TARGET_EAGAIN /* Operation would block */
+#undef TARGET_EINPROGRESS
+#define TARGET_EINPROGRESS 36 /* Operation now in progress */
+#undef TARGET_EALREADY
+#define TARGET_EALREADY 37 /* Operation already in progress */
+#undef TARGET_ENOTSOCK
+#define TARGET_ENOTSOCK 38 /* Socket operation on non-socket */
+#undef TARGET_EDESTADDRREQ
+#define TARGET_EDESTADDRREQ 39 /* Destination address required */
+#undef TARGET_EMSGSIZE
+#define TARGET_EMSGSIZE 40 /* Message too long */
+#undef TARGET_EPROTOTYPE
+#define TARGET_EPROTOTYPE 41 /* Protocol wrong type for socket */
+#undef TARGET_ENOPROTOOPT
+#define TARGET_ENOPROTOOPT 42 /* Protocol not available */
+#undef TARGET_EPROTONOSUPPORT
+#define TARGET_EPROTONOSUPPORT 43 /* Protocol not supported */
+#undef TARGET_ESOCKTNOSUPPORT
+#define TARGET_ESOCKTNOSUPPORT 44 /* Socket type not supported */
+#undef TARGET_EOPNOTSUPP
+#define TARGET_EOPNOTSUPP 45 /* Op not supported on transport endpoint */
+#undef TARGET_EPFNOSUPPORT
+#define TARGET_EPFNOSUPPORT 46 /* Protocol family not supported */
+#undef TARGET_EAFNOSUPPORT
+#define TARGET_EAFNOSUPPORT 47 /* Address family not supported by protocol */
+#undef TARGET_EADDRINUSE
+#define TARGET_EADDRINUSE 48 /* Address already in use */
+#undef TARGET_EADDRNOTAVAIL
+#define TARGET_EADDRNOTAVAIL 49 /* Cannot assign requested address */
+#undef TARGET_ENETDOWN
+#define TARGET_ENETDOWN 50 /* Network is down */
+#undef TARGET_ENETUNREACH
+#define TARGET_ENETUNREACH 51 /* Network is unreachable */
+#undef TARGET_ENETRESET
+#define TARGET_ENETRESET 52 /* Net dropped connection because of reset */
+#undef TARGET_ECONNABORTED
+#define TARGET_ECONNABORTED 53 /* Software caused connection abort */
+#undef TARGET_ECONNRESET
+#define TARGET_ECONNRESET 54 /* Connection reset by peer */
+#undef TARGET_ENOBUFS
+#define TARGET_ENOBUFS 55 /* No buffer space available */
+#undef TARGET_EISCONN
+#define TARGET_EISCONN 56 /* Transport endpoint is already connected */
+#undef TARGET_ENOTCONN
+#define TARGET_ENOTCONN 57 /* Transport endpoint is not connected */
+#undef TARGET_ESHUTDOWN
+#define TARGET_ESHUTDOWN 58 /* No send after transport endpoint shutdown*/
+#undef TARGET_ETOOMANYREFS
+#define TARGET_ETOOMANYREFS 59 /* Too many references: cannot splice */
+#undef TARGET_ETIMEDOUT
+#define TARGET_ETIMEDOUT 60 /* Connection timed out */
+#undef TARGET_ECONNREFUSED
+#define TARGET_ECONNREFUSED 61 /* Connection refused */
+#undef TARGET_ELOOP
+#define TARGET_ELOOP 62 /* Too many symbolic links encountered */
+#undef TARGET_ENAMETOOLONG
+#define TARGET_ENAMETOOLONG 63 /* File name too long */
+#undef TARGET_EHOSTDOWN
+#define TARGET_EHOSTDOWN 64 /* Host is down */
+#undef TARGET_EHOSTUNREACH
+#define TARGET_EHOSTUNREACH 65 /* No route to host */
+#undef TARGET_ENOTEMPTY
+#define TARGET_ENOTEMPTY 66 /* Directory not empty */
+#undef TARGET_EPROCLIM
+#define TARGET_EPROCLIM 67 /* SUNOS: Too many processes */
+#undef TARGET_EUSERS
+#define TARGET_EUSERS 68 /* Too many users */
+#undef TARGET_EDQUOT
+#define TARGET_EDQUOT 69 /* Quota exceeded */
+#undef TARGET_ESTALE
+#define TARGET_ESTALE 70 /* Stale file handle */
+#undef TARGET_EREMOTE
+#define TARGET_EREMOTE 71 /* Object is remote */
+#undef TARGET_ENOSTR
+#define TARGET_ENOSTR 72 /* Device not a stream */
+#undef TARGET_ETIME
+#define TARGET_ETIME 73 /* Timer expired */
+#undef TARGET_ENOSR
+#define TARGET_ENOSR 74 /* Out of streams resources */
+#undef TARGET_ENOMSG
+#define TARGET_ENOMSG 75 /* No message of desired type */
+#undef TARGET_EBADMSG
+#define TARGET_EBADMSG 76 /* Not a data message */
+#undef TARGET_EIDRM
+#define TARGET_EIDRM 77 /* Identifier removed */
+#undef TARGET_EDEADLK
+#define TARGET_EDEADLK 78 /* Resource deadlock would occur */
+#undef TARGET_ENOLCK
+#define TARGET_ENOLCK 79 /* No record locks available */
+#undef TARGET_ENONET
+#define TARGET_ENONET 80 /* Machine is not on the network */
+#undef TARGET_ERREMOTE
+#define TARGET_ERREMOTE 81 /* SunOS: Too many lvls of remote in path */
+#undef TARGET_ENOLINK
+#define TARGET_ENOLINK 82 /* Link has been severed */
+#undef TARGET_EADV
+#define TARGET_EADV 83 /* Advertise error */
+#undef TARGET_ESRMNT
+#define TARGET_ESRMNT 84 /* Srmount error */
+#undef TARGET_ECOMM
+#define TARGET_ECOMM 85 /* Communication error on send */
+#undef TARGET_EPROTO
+#define TARGET_EPROTO 86 /* Protocol error */
+#undef TARGET_EMULTIHOP
+#define TARGET_EMULTIHOP 87 /* Multihop attempted */
+#undef TARGET_EDOTDOT
+#define TARGET_EDOTDOT 88 /* RFS specific error */
+#undef TARGET_EREMCHG
+#define TARGET_EREMCHG 89 /* Remote address changed */
+#undef TARGET_ENOSYS
+#define TARGET_ENOSYS 90 /* Function not implemented */
+#undef TARGET_ESTRPIPE
+#define TARGET_ESTRPIPE 91 /* Streams pipe error */
+#undef TARGET_EOVERFLOW
+#define TARGET_EOVERFLOW 92 /* Value too large for defined data type */
+#undef TARGET_EBADFD
+#define TARGET_EBADFD 93 /* File descriptor in bad state */
+#undef TARGET_ECHRNG
+#define TARGET_ECHRNG 94 /* Channel number out of range */
+#undef TARGET_EL2NSYNC
+#define TARGET_EL2NSYNC 95 /* Level 2 not synchronized */
+#undef TARGET_EL3HLT
+#define TARGET_EL3HLT 96 /* Level 3 halted */
+#undef TARGET_EL3RST
+#define TARGET_EL3RST 97 /* Level 3 reset */
+#undef TARGET_ELNRNG
+#define TARGET_ELNRNG 98 /* Link number out of range */
+#undef TARGET_EUNATCH
+#define TARGET_EUNATCH 99 /* Protocol driver not attached */
+#undef TARGET_ENOCSI
+#define TARGET_ENOCSI 100 /* No CSI structure available */
+#undef TARGET_EL2HLT
+#define TARGET_EL2HLT 101 /* Level 2 halted */
+#undef TARGET_EBADE
+#define TARGET_EBADE 102 /* Invalid exchange */
+#undef TARGET_EBADR
+#define TARGET_EBADR 103 /* Invalid request descriptor */
+#undef TARGET_EXFULL
+#define TARGET_EXFULL 104 /* Exchange full */
+#undef TARGET_ENOANO
+#define TARGET_ENOANO 105 /* No anode */
+#undef TARGET_EBADRQC
+#define TARGET_EBADRQC 106 /* Invalid request code */
+#undef TARGET_EBADSLT
+#define TARGET_EBADSLT 107 /* Invalid slot */
+#undef TARGET_EDEADLOCK
+#define TARGET_EDEADLOCK 108 /* File locking deadlock error */
+#undef TARGET_EBFONT
+#define TARGET_EBFONT 109 /* Bad font file format */
+#undef TARGET_ELIBEXEC
+#define TARGET_ELIBEXEC 110 /* Cannot exec a shared library directly */
+#undef TARGET_ENODATA
+#define TARGET_ENODATA 111 /* No data available */
+#undef TARGET_ELIBBAD
+#define TARGET_ELIBBAD 112 /* Accessing a corrupted shared library */
+#undef TARGET_ENOPKG
+#define TARGET_ENOPKG 113 /* Package not installed */
+#undef TARGET_ELIBACC
+#define TARGET_ELIBACC 114 /* Can not access a needed shared library */
+#undef TARGET_ENOTUNIQ
+#define TARGET_ENOTUNIQ 115 /* Name not unique on network */
+#undef TARGET_ERESTART
+#define TARGET_ERESTART 116 /* Interrupted syscall should be restarted */
+#undef TARGET_EUCLEAN
+#define TARGET_EUCLEAN 117 /* Structure needs cleaning */
+#undef TARGET_ENOTNAM
+#define TARGET_ENOTNAM 118 /* Not a XENIX named type file */
+#undef TARGET_ENAVAIL
+#define TARGET_ENAVAIL 119 /* No XENIX semaphores available */
+#undef TARGET_EISNAM
+#define TARGET_EISNAM 120 /* Is a named type file */
+#undef TARGET_EREMOTEIO
+#define TARGET_EREMOTEIO 121 /* Remote I/O error */
+#undef TARGET_EILSEQ
+#define TARGET_EILSEQ 122 /* Illegal byte sequence */
+#undef TARGET_ELIBMAX
+#define TARGET_ELIBMAX 123 /* Atmpt to link in too many shared libs */
+#undef TARGET_ELIBSCN
+#define TARGET_ELIBSCN 124 /* .lib section in a.out corrupted */
+#undef TARGET_ENOMEDIUM
+#define TARGET_ENOMEDIUM 125 /* No medium found */
+#undef TARGET_EMEDIUMTYPE
+#define TARGET_EMEDIUMTYPE 126 /* Wrong medium type */
+#undef TARGET_ECANCELED
+#define TARGET_ECANCELED 127 /* Operation Cancelled */
+#undef TARGET_ENOKEY
+#define TARGET_ENOKEY 128 /* Required key not available */
+#undef TARGET_EKEYEXPIRED
+#define TARGET_EKEYEXPIRED 129 /* Key has expired */
+#undef TARGET_EKEYREVOKED
+#define TARGET_EKEYREVOKED 130 /* Key has been revoked */
+#undef TARGET_EKEYREJECTED
+#define TARGET_EKEYREJECTED 131 /* Key was rejected by service */
+#undef TARGET_EOWNERDEAD
+#define TARGET_EOWNERDEAD 132 /* Owner died */
+#undef TARGET_ENOTRECOVERABLE
+#define TARGET_ENOTRECOVERABLE 133 /* State not recoverable */
+#undef TARGET_ERFKILL
+#define TARGET_ERFKILL 134 /* Operation not possible due to RF-kill */
+#undef TARGET_EHWPOISON
+#define TARGET_EHWPOISON 135 /* Memory page has hardware error */
+#endif
diff --git a/linux-user/sparc/target_syscall.h b/linux-user/sparc/target_syscall.h
index 5f09abfe89..3725875fcf 100644
--- a/linux-user/sparc/target_syscall.h
+++ b/linux-user/sparc/target_syscall.h
@@ -1,6 +1,8 @@
#ifndef SPARC_TARGET_SYSCALL_H
#define SPARC_TARGET_SYSCALL_H
+#include "target_errno.h"
+
struct target_pt_regs {
abi_ulong psr;
abi_ulong pc;
diff --git a/linux-user/sparc64/target_syscall.h b/linux-user/sparc64/target_syscall.h
index 2cbbaaed1b..34f49df4a1 100644
--- a/linux-user/sparc64/target_syscall.h
+++ b/linux-user/sparc64/target_syscall.h
@@ -1,6 +1,8 @@
#ifndef SPARC64_TARGET_SYSCALL_H
#define SPARC64_TARGET_SYSCALL_H
+#include "../sparc/target_errno.h"
+
struct target_pt_regs {
abi_ulong u_regs[16];
abi_ulong tstate;
@@ -29,5 +31,4 @@ static inline abi_ulong target_shmlba(CPUSPARCState *env)
{
return MAX(TARGET_PAGE_SIZE, 16 * 1024);
}
-
#endif /* SPARC64_TARGET_SYSCALL_H */
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 6/7] linux-user: fix UNAME_MACHINE for sparc/sparc64
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
` (4 preceding siblings ...)
2018-05-14 18:19 ` [Qemu-devel] [PULL 5/7] linux-user: add sparc/sparc64 specific errno Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 7/7] linux-user: correctly align types in thunking code Laurent Vivier
2018-05-15 10:11 ` [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Peter Maydell
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
"sun4" is not recognized by config.guess.
linux defines sparc and sparc64 in arch/sparc/Makefile.
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Reviewed-by: Max Filippov <jcmvbkbc@gmail.com>
Message-Id: <20180509231123.20864-7-laurent@vivier.eu>
---
linux-user/sparc/target_syscall.h | 2 +-
linux-user/sparc64/target_syscall.h | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/linux-user/sparc/target_syscall.h b/linux-user/sparc/target_syscall.h
index 3725875fcf..b9160a771b 100644
--- a/linux-user/sparc/target_syscall.h
+++ b/linux-user/sparc/target_syscall.h
@@ -11,7 +11,7 @@ struct target_pt_regs {
abi_ulong u_regs[16];
};
-#define UNAME_MACHINE "sun4"
+#define UNAME_MACHINE "sparc"
#define UNAME_MINIMUM_RELEASE "2.6.32"
/* SPARC kernels don't define this in their Kconfig, but they have the
diff --git a/linux-user/sparc64/target_syscall.h b/linux-user/sparc64/target_syscall.h
index 34f49df4a1..3073a23e03 100644
--- a/linux-user/sparc64/target_syscall.h
+++ b/linux-user/sparc64/target_syscall.h
@@ -12,7 +12,7 @@ struct target_pt_regs {
abi_ulong fprs;
};
-#define UNAME_MACHINE "sun4u"
+#define UNAME_MACHINE "sparc64"
#define UNAME_MINIMUM_RELEASE "2.6.32"
/* SPARC kernels don't define this in their Kconfig, but they have the
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PULL 7/7] linux-user: correctly align types in thunking code
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
` (5 preceding siblings ...)
2018-05-14 18:19 ` [Qemu-devel] [PULL 6/7] linux-user: fix UNAME_MACHINE for sparc/sparc64 Laurent Vivier
@ 2018-05-14 18:19 ` Laurent Vivier
2018-05-15 10:11 ` [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Peter Maydell
7 siblings, 0 replies; 9+ messages in thread
From: Laurent Vivier @ 2018-05-14 18:19 UTC (permalink / raw)
To: qemu-devel; +Cc: Riku Voipio, Laurent Vivier
This is a follow up
of patch:
commit c2e3dee6e03527baf8698698cce76b1a3174969a
Author: Laurent Vivier <laurent@vivier.eu>
Date: Sun Feb 13 23:37:34 2011 +0100
linux-user: Define target alignment size
In my case m68k aligns "int" on 2 not 4. You can check this with the
following program:
int main(void)
{
struct rtentry rt;
printf("rt_pad1 %ld %zd\n", offsetof(struct rtentry, rt_pad1),
sizeof(rt.rt_pad1));
printf("rt_dst %ld %zd\n", offsetof(struct rtentry, rt_dst),
sizeof(rt.rt_dst));
printf("rt_gateway %ld %zd\n", offsetof(struct rtentry, rt_gateway),
sizeof(rt.rt_gateway));
printf("rt_genmask %ld %zd\n", offsetof(struct rtentry, rt_genmask),
sizeof(rt.rt_genmask));
printf("rt_flags %ld %zd\n", offsetof(struct rtentry, rt_flags),
sizeof(rt.rt_flags));
printf("rt_pad2 %ld %zd\n", offsetof(struct rtentry, rt_pad2),
sizeof(rt.rt_pad2));
printf("rt_pad3 %ld %zd\n", offsetof(struct rtentry, rt_pad3),
sizeof(rt.rt_pad3));
printf("rt_pad4 %ld %zd\n", offsetof(struct rtentry, rt_pad4),
sizeof(rt.rt_pad4));
printf("rt_metric %ld %zd\n", offsetof(struct rtentry, rt_metric),
sizeof(rt.rt_metric));
printf("rt_dev %ld %zd\n", offsetof(struct rtentry, rt_dev),
sizeof(rt.rt_dev));
printf("rt_mtu %ld %zd\n", offsetof(struct rtentry, rt_mtu),
sizeof(rt.rt_mtu));
printf("rt_window %ld %zd\n", offsetof(struct rtentry, rt_window),
sizeof(rt.rt_window));
printf("rt_irtt %ld %zd\n", offsetof(struct rtentry, rt_irtt),
sizeof(rt.rt_irtt));
}
And result is :
i386
rt_pad1 0 4
rt_dst 4 16
rt_gateway 20 16
rt_genmask 36 16
rt_flags 52 2
rt_pad2 54 2
rt_pad3 56 4
rt_pad4 62 2
rt_metric 64 2
rt_dev 68 4
rt_mtu 72 4
rt_window 76 4
rt_irtt 80 2
m68k
rt_pad1 0 4
rt_dst 4 16
rt_gateway 20 16
rt_genmask 36 16
rt_flags 52 2
rt_pad2 54 2
rt_pad3 56 4
rt_pad4 62 2
rt_metric 64 2
rt_dev 66 4
rt_mtu 70 4
rt_window 74 4
rt_irtt 78 2
This affects the "route" command :
WITHOUT this patch:
$ sudo route add -net default gw 10.0.3.1 window 1024 irtt 2 eth0
$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.3.1 0.0.0.0 UG 0 67108866 32768 eth0
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
WITH this patch:
$ sudo route add -net default gw 10.0.3.1 window 1024 irtt 2 eth0
$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.3.1 0.0.0.0 UG 0 1024 2 eth0
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-Id: <20180510205949.26455-1-laurent@vivier.eu>
---
include/exec/user/thunk.h | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
index f19ef4b230..8f55b233b3 100644
--- a/include/exec/user/thunk.h
+++ b/include/exec/user/thunk.h
@@ -149,20 +149,32 @@ static inline int thunk_type_align(const argtype *type_ptr, int is_host)
case TYPE_CHAR:
return 1;
case TYPE_SHORT:
- return 2;
+ if (is_host) {
+ return __alignof__(short);
+ } else {
+ return ABI_SHORT_ALIGNMENT;
+ }
case TYPE_INT:
- return 4;
+ if (is_host) {
+ return __alignof__(int);
+ } else {
+ return ABI_INT_ALIGNMENT;
+ }
case TYPE_LONGLONG:
case TYPE_ULONGLONG:
- return 8;
+ if (is_host) {
+ return __alignof__(long long);
+ } else {
+ return ABI_LLONG_ALIGNMENT;
+ }
case TYPE_LONG:
case TYPE_ULONG:
case TYPE_PTRVOID:
case TYPE_PTR:
if (is_host) {
- return sizeof(void *);
+ return __alignof__(long);
} else {
- return TARGET_ABI_BITS / 8;
+ return ABI_LONG_ALIGNMENT;
}
break;
case TYPE_OLDDEVT:
--
2.14.3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
` (6 preceding siblings ...)
2018-05-14 18:19 ` [Qemu-devel] [PULL 7/7] linux-user: correctly align types in thunking code Laurent Vivier
@ 2018-05-15 10:11 ` Peter Maydell
7 siblings, 0 replies; 9+ messages in thread
From: Peter Maydell @ 2018-05-15 10:11 UTC (permalink / raw)
To: Laurent Vivier; +Cc: QEMU Developers, Riku Voipio
On 14 May 2018 at 19:19, Laurent Vivier <laurent@vivier.eu> wrote:
> The following changes since commit c74e62ee3e2dc2955e07d004c71badecb68a84eb:
>
> Merge remote-tracking branch 'remotes/rth/tags/cota-target-pull-request' into staging (2018-05-11 15:41:29 +0100)
>
> are available in the Git repository at:
>
> git://github.com/vivier/qemu.git tags/linux-user-for-2.13-pull-request
>
> for you to fetch changes up to f606e4d6258fa82c3f6c1cc762ebe483db5f5db6:
>
> linux-user: correctly align types in thunking code (2018-05-14 12:01:21 +0200)
>
> ----------------------------------------------------------------
> Mostly sparc fixes, allowing to do a "debootstrap --second-stage",
> including some structures alignment fixes.
> This series fixes following LTP 20180118 tests on a x86_64 host:
> armhf: epoll_wait02 getpriority01 nice03 pselect01 pselect01_64
> arm64: epoll_wait02 getpriority01 nice03 poll02 pselect01 pselect01_64 select04
> s390x: epoll_wait02 getpriority01 nice03 poll02 pselect01 pselect01_64 select04
> mips: epoll_wait02 getpriority01 nice03 poll02 pselect01 pselect01_64
> mips64el: epoll_wait02 getpriority01 nice03 pselect01 pselect01_64 select04
> mipsel: epoll_wait02 getpriority01 nice03 madvise06 poll02 select04
> ppc64: epoll_wait02 getpriority01 nice03 poll02 select04
> ppc64el: getpriority01 nice03 pselect01 select04
> sh4: getpriority01 nice03 madvise06 poll02 pselect01 select04
> ----------------------------------------------------------------
>
Applied, thanks.
-- PMM
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2018-05-15 10:11 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-14 18:19 [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 1/7] linux-user: define correct fcntl() values for sparc Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 2/7] linux-user: fix flock/flock64 padding Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 3/7] linux-user: update sparc/syscall_nr.h to linux header 4.16 Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 4/7] linux-user: fix conversion of flock/flock64 l_type field Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 5/7] linux-user: add sparc/sparc64 specific errno Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 6/7] linux-user: fix UNAME_MACHINE for sparc/sparc64 Laurent Vivier
2018-05-14 18:19 ` [Qemu-devel] [PULL 7/7] linux-user: correctly align types in thunking code Laurent Vivier
2018-05-15 10:11 ` [Qemu-devel] [PULL 0/7] Linux user for 2.13 patches Peter Maydell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.