mirror of
https://github.com/mii443/qemu.git
synced 2025-12-16 17:18:49 +00:00
Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-4.1-pull-request' into staging
Add /proc/hardware and /proc/cpuinfo, update SIOCXXX ioctls, fix shmat emulation, add nanoseconds in stat, init field fp_abi on mips # gpg: Signature made Fri 24 May 2019 12:24:36 BST # gpg: using RSA key F30C38BD3F2FBE3C # gpg: Good signature from "Laurent Vivier <lvivier@redhat.com>" [full] # gpg: aka "Laurent Vivier <laurent@vivier.eu>" [full] # gpg: aka "Laurent Vivier (Red Hat) <lvivier@redhat.com>" [full] # Primary key fingerprint: CD2F 75DD C8E3 A4DC 2E4F 5173 F30C 38BD 3F2F BE3C * remotes/vivier2/tags/linux-user-for-4.1-pull-request: linux-user: Pass through nanosecond timestamp components for stat syscalls linux-user: Align mmap_find_vma to host page size linux-user: Fix shmat emulation by honoring host SHMLBA linux-user: Sanitize interp_info and, for mips only, init field fp_abi linux-user: Add support for SIOC<G|S>IFPFLAGS ioctls for all targets linux-user: Add support for SIOCSPGRP ioctl for all targets linux-user: Fix support for SIOCATMARK and SIOCGPGRP ioctls for xtensa linux-user: add pseudo /proc/hardware for m68k linux-user: add pseudo /proc/cpuinfo for sparc Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
@@ -3914,7 +3914,8 @@ static inline abi_ulong do_shmat(CPUArchState *cpu_env,
|
||||
else {
|
||||
abi_ulong mmap_start;
|
||||
|
||||
mmap_start = mmap_find_vma(0, shm_info.shm_segsz);
|
||||
/* In order to use the host shmat, we need to honor host SHMLBA. */
|
||||
mmap_start = mmap_find_vma(0, shm_info.shm_segsz, MAX(SHMLBA, shmlba));
|
||||
|
||||
if (mmap_start == -1) {
|
||||
errno = ENOMEM;
|
||||
@@ -6412,6 +6413,11 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
|
||||
__put_user(host_st->st_atime, &target_st->target_st_atime);
|
||||
__put_user(host_st->st_mtime, &target_st->target_st_mtime);
|
||||
__put_user(host_st->st_ctime, &target_st->target_st_ctime);
|
||||
#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
|
||||
__put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
|
||||
__put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
|
||||
__put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
|
||||
#endif
|
||||
unlock_user_struct(target_st, target_addr, 1);
|
||||
} else
|
||||
#endif
|
||||
@@ -6442,6 +6448,11 @@ static inline abi_long host_to_target_stat64(void *cpu_env,
|
||||
__put_user(host_st->st_atime, &target_st->target_st_atime);
|
||||
__put_user(host_st->st_mtime, &target_st->target_st_mtime);
|
||||
__put_user(host_st->st_ctime, &target_st->target_st_ctime);
|
||||
#if _POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700
|
||||
__put_user(host_st->st_atim.tv_nsec, &target_st->target_st_atime_nsec);
|
||||
__put_user(host_st->st_mtim.tv_nsec, &target_st->target_st_mtime_nsec);
|
||||
__put_user(host_st->st_ctim.tv_nsec, &target_st->target_st_ctime_nsec);
|
||||
#endif
|
||||
unlock_user_struct(target_st, target_addr, 1);
|
||||
}
|
||||
|
||||
@@ -6790,12 +6801,15 @@ static int is_proc_myself(const char *filename, const char *entry)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN) || \
|
||||
defined(TARGET_SPARC) || defined(TARGET_M68K)
|
||||
static int is_proc(const char *filename, const char *entry)
|
||||
{
|
||||
return strcmp(filename, entry) == 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
|
||||
static int open_net_route(void *cpu_env, int fd)
|
||||
{
|
||||
FILE *fp;
|
||||
@@ -6840,6 +6854,22 @@ static int open_net_route(void *cpu_env, int fd)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_SPARC)
|
||||
static int open_cpuinfo(void *cpu_env, int fd)
|
||||
{
|
||||
dprintf(fd, "type\t\t: sun4u\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(TARGET_M68K)
|
||||
static int open_hardware(void *cpu_env, int fd)
|
||||
{
|
||||
dprintf(fd, "Model:\t\tqemu-m68k\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int do_openat(void *cpu_env, int dirfd, const char *pathname, int flags, mode_t mode)
|
||||
{
|
||||
struct fake_open {
|
||||
@@ -6855,6 +6885,12 @@ static int do_openat(void *cpu_env, int dirfd, const char *pathname, int flags,
|
||||
{ "cmdline", open_self_cmdline, is_proc_myself },
|
||||
#if defined(HOST_WORDS_BIGENDIAN) != defined(TARGET_WORDS_BIGENDIAN)
|
||||
{ "/proc/net/route", open_net_route, is_proc },
|
||||
#endif
|
||||
#if defined(TARGET_SPARC)
|
||||
{ "/proc/cpuinfo", open_cpuinfo, is_proc },
|
||||
#endif
|
||||
#if defined(TARGET_M68K)
|
||||
{ "/proc/hardware", open_hardware, is_proc },
|
||||
#endif
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
@@ -8870,6 +8906,15 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
|
||||
__put_user(st.st_atime, &target_st->target_st_atime);
|
||||
__put_user(st.st_mtime, &target_st->target_st_mtime);
|
||||
__put_user(st.st_ctime, &target_st->target_st_ctime);
|
||||
#if (_POSIX_C_SOURCE >= 200809L || _XOPEN_SOURCE >= 700) && \
|
||||
defined(TARGET_STAT_HAVE_NSEC)
|
||||
__put_user(st.st_atim.tv_nsec,
|
||||
&target_st->target_st_atime_nsec);
|
||||
__put_user(st.st_mtim.tv_nsec,
|
||||
&target_st->target_st_mtime_nsec);
|
||||
__put_user(st.st_ctim.tv_nsec,
|
||||
&target_st->target_st_ctime_nsec);
|
||||
#endif
|
||||
unlock_user_struct(target_st, arg2, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user