From 5089c7ce82a49e6a97c5cf3db57a89bca8ed25d8 Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Mon, 18 Jan 2016 23:50:45 +0100 Subject: [PATCH 1/8] linux-user: fix realloc size of target_fd_trans. target_fd_trans is an array of "TargetFdTrans *": compute size accordingly. Use g_renew() as proposed by Paolo. Reported-by: Paolo Bonzini Signed-off-by: Laurent Vivier Signed-off-by: Riku Voipio --- linux-user/syscall.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 54ce14a611..dac5518a07 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -318,8 +318,8 @@ static void fd_trans_register(int fd, TargetFdTrans *trans) if (fd >= target_fd_max) { oldmax = target_fd_max; target_fd_max = ((fd >> 6) + 1) << 6; /* by slice of 64 entries */ - target_fd_trans = g_realloc(target_fd_trans, - target_fd_max * sizeof(TargetFdTrans)); + target_fd_trans = g_renew(TargetFdTrans *, + target_fd_trans, target_fd_max); memset((void *)(target_fd_trans + oldmax), 0, (target_fd_max - oldmax) * sizeof(TargetFdTrans *)); } From 460c579f3ddc71bcf34128d4b3d1e1debdd93f73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Llu=C3=ADs=20Vilanova?= Date: Mon, 1 Feb 2016 19:38:42 +0100 Subject: [PATCH 2/8] build: [linux-user] Rename "syscall.h" to "target_syscall.h" in target directories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes double-definitions in linux-user builds when using the UST tracing backend (which indirectly includes the system's "syscall.h"). Signed-off-by: LluĂ­s Vilanova Reviewed-by: Peter Maydell Signed-off-by: Riku Voipio --- linux-user/aarch64/{syscall.h => target_syscall.h} | 5 +++++ linux-user/alpha/{syscall.h => target_syscall.h} | 5 +++++ linux-user/arm/{syscall.h => target_syscall.h} | 4 ++++ linux-user/cris/{syscall.h => target_syscall.h} | 0 linux-user/i386/{syscall.h => target_syscall.h} | 5 +++++ linux-user/m68k/{syscall.h => target_syscall.h} | 4 ++++ linux-user/microblaze/{syscall.h => target_syscall.h} | 0 linux-user/mips/{syscall.h => target_syscall.h} | 4 ++++ linux-user/mips64/{syscall.h => target_syscall.h} | 4 ++++ linux-user/openrisc/{syscall.h => target_syscall.h} | 5 +++++ linux-user/ppc/{syscall.h => target_syscall.h} | 5 +++++ linux-user/qemu.h | 2 +- linux-user/s390x/{syscall.h => target_syscall.h} | 5 +++++ linux-user/sh4/{syscall.h => target_syscall.h} | 5 +++++ linux-user/sparc/{syscall.h => target_syscall.h} | 5 +++++ linux-user/sparc64/{syscall.h => target_syscall.h} | 5 +++++ linux-user/tilegx/{syscall.h => target_syscall.h} | 0 linux-user/unicore32/{syscall.h => target_syscall.h} | 0 linux-user/x86_64/{syscall.h => target_syscall.h} | 5 +++++ 19 files changed, 67 insertions(+), 1 deletion(-) rename linux-user/aarch64/{syscall.h => target_syscall.h} (80%) rename linux-user/alpha/{syscall.h => target_syscall.h} (98%) rename linux-user/arm/{syscall.h => target_syscall.h} (93%) rename linux-user/cris/{syscall.h => target_syscall.h} (100%) rename linux-user/i386/{syscall.h => target_syscall.h} (97%) rename linux-user/m68k/{syscall.h => target_syscall.h} (87%) rename linux-user/microblaze/{syscall.h => target_syscall.h} (100%) rename linux-user/mips/{syscall.h => target_syscall.h} (99%) rename linux-user/mips64/{syscall.h => target_syscall.h} (99%) rename linux-user/openrisc/{syscall.h => target_syscall.h} (90%) rename linux-user/ppc/{syscall.h => target_syscall.h} (96%) rename linux-user/s390x/{syscall.h => target_syscall.h} (89%) rename linux-user/sh4/{syscall.h => target_syscall.h} (83%) rename linux-user/sparc/{syscall.h => target_syscall.h} (87%) rename linux-user/sparc64/{syscall.h => target_syscall.h} (87%) rename linux-user/tilegx/{syscall.h => target_syscall.h} (100%) rename linux-user/unicore32/{syscall.h => target_syscall.h} (100%) rename linux-user/x86_64/{syscall.h => target_syscall.h} (96%) diff --git a/linux-user/aarch64/syscall.h b/linux-user/aarch64/target_syscall.h similarity index 80% rename from linux-user/aarch64/syscall.h rename to linux-user/aarch64/target_syscall.h index dc72a15c5e..f458018048 100644 --- a/linux-user/aarch64/syscall.h +++ b/linux-user/aarch64/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + struct target_pt_regs { uint64_t regs[31]; uint64_t sp; @@ -11,3 +14,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/alpha/syscall.h b/linux-user/alpha/target_syscall.h similarity index 98% rename from linux-user/alpha/syscall.h rename to linux-user/alpha/target_syscall.h index 245cff2545..3db4b16f6b 100644 --- a/linux-user/alpha/syscall.h +++ b/linux-user/alpha/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + /* default linux values for the selectors */ #define __USER_DS (1) @@ -255,3 +258,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 4096 #define TARGET_MLOCKALL_MCL_CURRENT 0x2000 #define TARGET_MLOCKALL_MCL_FUTURE 0x4000 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/arm/syscall.h b/linux-user/arm/target_syscall.h similarity index 93% rename from linux-user/arm/syscall.h rename to linux-user/arm/target_syscall.h index 3844a96112..ea863db0b9 100644 --- a/linux-user/arm/syscall.h +++ b/linux-user/arm/target_syscall.h @@ -1,3 +1,5 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H /* this struct defines the way the registers are stored on the stack during a system call. */ @@ -48,3 +50,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/cris/syscall.h b/linux-user/cris/target_syscall.h similarity index 100% rename from linux-user/cris/syscall.h rename to linux-user/cris/target_syscall.h diff --git a/linux-user/i386/syscall.h b/linux-user/i386/target_syscall.h similarity index 97% rename from linux-user/i386/syscall.h rename to linux-user/i386/target_syscall.h index 906aaac0b1..0ac84dc02f 100644 --- a/linux-user/i386/syscall.h +++ b/linux-user/i386/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + /* default linux values for the selectors */ #define __USER_CS (0x23) #define __USER_DS (0x2B) @@ -150,3 +153,5 @@ struct target_vm86plus_struct { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/m68k/syscall.h b/linux-user/m68k/target_syscall.h similarity index 87% rename from linux-user/m68k/syscall.h rename to linux-user/m68k/target_syscall.h index 9218493a44..97a4cc0cbd 100644 --- a/linux-user/m68k/syscall.h +++ b/linux-user/m68k/target_syscall.h @@ -1,3 +1,5 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H /* this struct defines the way the registers are stored on the stack during a system call. */ @@ -23,3 +25,5 @@ struct target_pt_regs { #define TARGET_MLOCKALL_MCL_FUTURE 2 void do_m68k_simcall(CPUM68KState *, int); + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/microblaze/syscall.h b/linux-user/microblaze/target_syscall.h similarity index 100% rename from linux-user/microblaze/syscall.h rename to linux-user/microblaze/target_syscall.h diff --git a/linux-user/mips/syscall.h b/linux-user/mips/target_syscall.h similarity index 99% rename from linux-user/mips/syscall.h rename to linux-user/mips/target_syscall.h index 35ca23b166..68db160e53 100644 --- a/linux-user/mips/syscall.h +++ b/linux-user/mips/target_syscall.h @@ -1,3 +1,5 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H /* this struct defines the way the registers are stored on the stack during a system call. */ @@ -231,3 +233,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/mips64/syscall.h b/linux-user/mips64/target_syscall.h similarity index 99% rename from linux-user/mips64/syscall.h rename to linux-user/mips64/target_syscall.h index 6733107ddb..0e0c2d232f 100644 --- a/linux-user/mips64/syscall.h +++ b/linux-user/mips64/target_syscall.h @@ -1,3 +1,5 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H /* this struct defines the way the registers are stored on the stack during a system call. */ @@ -228,3 +230,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/openrisc/syscall.h b/linux-user/openrisc/target_syscall.h similarity index 90% rename from linux-user/openrisc/syscall.h rename to linux-user/openrisc/target_syscall.h index 8ac03656d4..19aeffc95d 100644 --- a/linux-user/openrisc/syscall.h +++ b/linux-user/openrisc/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + struct target_pt_regs { union { struct { @@ -27,3 +30,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/ppc/syscall.h b/linux-user/ppc/target_syscall.h similarity index 96% rename from linux-user/ppc/syscall.h rename to linux-user/ppc/target_syscall.h index 0daf5cd2df..35cab59462 100644 --- a/linux-user/ppc/syscall.h +++ b/linux-user/ppc/target_syscall.h @@ -17,6 +17,9 @@ * License along with this library; if not, see . */ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + /* XXX: ABSOLUTELY BUGGY: * for now, this is quite just a cut-and-paste from i386 target... */ @@ -73,3 +76,5 @@ struct target_revectored_struct { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 0x2000 #define TARGET_MLOCKALL_MCL_FUTURE 0x4000 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/qemu.h b/linux-user/qemu.h index ba5b433d99..26b0ba2736 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -13,7 +13,7 @@ #include "exec/user/thunk.h" #include "syscall_defs.h" -#include "syscall.h" +#include "target_syscall.h" #include "exec/gdbstub.h" #include "qemu/queue.h" diff --git a/linux-user/s390x/syscall.h b/linux-user/s390x/target_syscall.h similarity index 89% rename from linux-user/s390x/syscall.h rename to linux-user/s390x/target_syscall.h index 35f170af25..02061efc78 100644 --- a/linux-user/s390x/syscall.h +++ b/linux-user/s390x/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + /* this typedef defines how a Program Status Word looks like */ typedef struct { abi_ulong mask; @@ -27,3 +30,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/sh4/syscall.h b/linux-user/sh4/target_syscall.h similarity index 83% rename from linux-user/sh4/syscall.h rename to linux-user/sh4/target_syscall.h index 7aa4f239c5..9f3381bc9b 100644 --- a/linux-user/sh4/syscall.h +++ b/linux-user/sh4/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + struct target_pt_regs { unsigned long regs[16]; unsigned long pc; @@ -15,3 +18,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/sparc/syscall.h b/linux-user/sparc/target_syscall.h similarity index 87% rename from linux-user/sparc/syscall.h rename to linux-user/sparc/target_syscall.h index 58573b92ea..a73fa6dae1 100644 --- a/linux-user/sparc/syscall.h +++ b/linux-user/sparc/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + struct target_pt_regs { abi_ulong psr; abi_ulong pc; @@ -18,3 +21,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 4096 #define TARGET_MLOCKALL_MCL_CURRENT 0x2000 #define TARGET_MLOCKALL_MCL_FUTURE 0x4000 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/sparc64/syscall.h b/linux-user/sparc64/target_syscall.h similarity index 87% rename from linux-user/sparc64/syscall.h rename to linux-user/sparc64/target_syscall.h index 8398d3f463..eb827fcac1 100644 --- a/linux-user/sparc64/syscall.h +++ b/linux-user/sparc64/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + struct target_pt_regs { abi_ulong u_regs[16]; abi_ulong tstate; @@ -19,3 +22,5 @@ struct target_pt_regs { #define TARGET_MINSIGSTKSZ 4096 #define TARGET_MLOCKALL_MCL_CURRENT 0x2000 #define TARGET_MLOCKALL_MCL_FUTURE 0x4000 + +#endif /* TARGET_SYSCALL_H */ diff --git a/linux-user/tilegx/syscall.h b/linux-user/tilegx/target_syscall.h similarity index 100% rename from linux-user/tilegx/syscall.h rename to linux-user/tilegx/target_syscall.h diff --git a/linux-user/unicore32/syscall.h b/linux-user/unicore32/target_syscall.h similarity index 100% rename from linux-user/unicore32/syscall.h rename to linux-user/unicore32/target_syscall.h diff --git a/linux-user/x86_64/syscall.h b/linux-user/x86_64/target_syscall.h similarity index 96% rename from linux-user/x86_64/syscall.h rename to linux-user/x86_64/target_syscall.h index 88b3c3fe31..feecd32d50 100644 --- a/linux-user/x86_64/syscall.h +++ b/linux-user/x86_64/target_syscall.h @@ -1,3 +1,6 @@ +#ifndef TARGET_SYSCALL_H +#define TARGET_SYSCALL_H + #define __USER_CS (0x33) #define __USER_DS (0x2B) @@ -100,3 +103,5 @@ struct target_msqid64_ds { #define TARGET_MINSIGSTKSZ 2048 #define TARGET_MLOCKALL_MCL_CURRENT 1 #define TARGET_MLOCKALL_MCL_FUTURE 2 + +#endif /* TARGET_SYSCALL_H */ From de3f1b98410e0d5b406a0df3a48547b559d18602 Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Thu, 4 Feb 2016 19:56:01 +0100 Subject: [PATCH 3/8] linux-user: set ppc64/ppc64le default CPU to POWER8 Set the default to the latest CPU version to have the largest set of available features. It is also really needed in little-endian mode because POWER7 is not really supported in this mode and some distros (at least debian) generate POWER8 code for their ppc64le target. Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813698 Signed-off-by: Laurent Vivier Reviewed-by: Alexander Graf Reviewed-by: Michael Tokarev Signed-off-by: Riku Voipio --- linux-user/main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/linux-user/main.c b/linux-user/main.c index e719a2da02..2a692e0f0b 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -4160,7 +4160,7 @@ int main(int argc, char **argv, char **envp) cpu_model = "or1200"; #elif defined(TARGET_PPC) # ifdef TARGET_PPC64 - cpu_model = "POWER7"; + cpu_model = "POWER8"; # else cpu_model = "750"; # endif From b6e17875f2e4d1ebfd45bcb0eed04c3157e86a84 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 9 Feb 2016 15:57:11 +0000 Subject: [PATCH 4/8] linux-user: Don't assert if guest tries shmdt(0) Our implementation of shmat() and shmdt() for linux-user was using "zero guest address" as its marker for "entry in the shm_regions[] array is not in use". This meant that if the guest did a shmdt(0) we would match on an unused array entry and call page_set_flags() with both start and end addresses zero, which causes an assertion failure. Use an explicit in_use flag to manage the shm_regions[] array, so that we avoid this problem. Signed-off-by: Peter Maydell Reported-by: Pavel Shamis Reviewed-by: Laurent Vivier Signed-off-by: Riku Voipio --- linux-user/syscall.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index dac5518a07..8b76169ca5 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -2598,8 +2598,9 @@ static abi_long do_socketcall(int num, abi_ulong vptr) #define N_SHM_REGIONS 32 static struct shm_region { - abi_ulong start; - abi_ulong size; + abi_ulong start; + abi_ulong size; + bool in_use; } shm_regions[N_SHM_REGIONS]; struct target_semid_ds @@ -3291,7 +3292,8 @@ static inline abi_ulong do_shmat(int shmid, abi_ulong shmaddr, int shmflg) ((shmflg & SHM_RDONLY)? 0 : PAGE_WRITE)); for (i = 0; i < N_SHM_REGIONS; i++) { - if (shm_regions[i].start == 0) { + if (!shm_regions[i].in_use) { + shm_regions[i].in_use = true; shm_regions[i].start = raddr; shm_regions[i].size = shm_info.shm_segsz; break; @@ -3308,8 +3310,8 @@ static inline abi_long do_shmdt(abi_ulong shmaddr) int i; for (i = 0; i < N_SHM_REGIONS; ++i) { - if (shm_regions[i].start == shmaddr) { - shm_regions[i].start = 0; + if (shm_regions[i].in_use && shm_regions[i].start == shmaddr) { + shm_regions[i].in_use = false; page_set_flags(shmaddr, shmaddr + shm_regions[i].size, 0); break; } From 7c73d2a3fa14cecfd38db7d8a3cd266ce14b9d57 Mon Sep 17 00:00:00 2001 From: Riku Voipio Date: Fri, 29 Jan 2016 19:39:57 +0200 Subject: [PATCH 5/8] linux-user: sync syscall numbers with kernel Sync syscall numbers to match the linux v4.5-rc1 kernel. Reviewed-by: Laurent Vivier Signed-off-by: Riku Voipio --- linux-user/aarch64/syscall_nr.h | 2 +- linux-user/alpha/syscall_nr.h | 6 ++++++ linux-user/cris/syscall_nr.h | 24 ++++++++++++++++++++++++ linux-user/i386/syscall_nr.h | 27 +++++++++++++++++++++++++++ linux-user/microblaze/syscall_nr.h | 8 ++++++++ linux-user/mips64/syscall_nr.h | 23 +++++++++++++++++++++++ linux-user/openrisc/syscall_nr.h | 28 ++++++++++++---------------- linux-user/ppc/syscall_nr.h | 24 ++++++++++++++++++++++++ linux-user/s390x/syscall_nr.h | 30 ++++++++++++++++++++++++++++++ linux-user/sparc/syscall_nr.h | 14 ++++++++++++++ linux-user/sparc64/syscall_nr.h | 14 ++++++++++++++ linux-user/tilegx/syscall_nr.h | 4 ++++ linux-user/x86_64/syscall_nr.h | 13 +++++++++++++ 13 files changed, 200 insertions(+), 17 deletions(-) diff --git a/linux-user/aarch64/syscall_nr.h b/linux-user/aarch64/syscall_nr.h index 74f42758fb..c8a8599c09 100644 --- a/linux-user/aarch64/syscall_nr.h +++ b/linux-user/aarch64/syscall_nr.h @@ -262,7 +262,6 @@ #define TARGET_NR_process_vm_writev 271 #define TARGET_NR_kcmp 272 #define TARGET_NR_finit_module 273 - #define TARGET_NR_sched_setattr 274 #define TARGET_NR_sched_getattr 275 #define TARGET_NR_renameat2 276 @@ -274,6 +273,7 @@ #define TARGET_NR_userfaultfd 282 #define TARGET_NR_membarrier 283 #define TARGET_NR_mlock2 284 +#define TARGET_NR_copy_file_range 285 #define TARGET_NR_open 1024 #define TARGET_NR_link 1025 diff --git a/linux-user/alpha/syscall_nr.h b/linux-user/alpha/syscall_nr.h index dde8d5c6ad..00e14bb6b3 100644 --- a/linux-user/alpha/syscall_nr.h +++ b/linux-user/alpha/syscall_nr.h @@ -444,3 +444,9 @@ #define TARGET_NR_process_vm_writev 505 #define TARGET_NR_kcmp 506 #define TARGET_NR_finit_module 507 +#define TARGET_NR_sched_setattr 508 +#define TARGET_NR_sched_getattr 509 +#define TARGET_NR_renameat2 510 +#define TARGET_NR_getrandom 511 +#define TARGET_NR_memfd_create 512 +#define TARGET_NR_execveat 513 diff --git a/linux-user/cris/syscall_nr.h b/linux-user/cris/syscall_nr.h index 694bd02fa5..44f0b645b4 100644 --- a/linux-user/cris/syscall_nr.h +++ b/linux-user/cris/syscall_nr.h @@ -336,3 +336,27 @@ #define TARGET_NR_preadv 333 #define TARGET_NR_pwritev 334 #define TARGET_NR_setns 335 +#define TARGET_NR_name_to_handle_at 336 +#define TARGET_NR_open_by_handle_at 337 +#define TARGET_NR_rt_tgsigqueueinfo 338 +#define TARGET_NR_perf_event_open 339 +#define TARGET_NR_recvmmsg 340 +#define TARGET_NR_accept4 341 +#define TARGET_NR_fanotify_init 342 +#define TARGET_NR_fanotify_mark 343 +#define TARGET_NR_prlimit64 344 +#define TARGET_NR_clock_adjtime 345 +#define TARGET_NR_syncfs 346 +#define TARGET_NR_sendmmsg 347 +#define TARGET_NR_process_vm_readv 348 +#define TARGET_NR_process_vm_writev 349 +#define TARGET_NR_kcmp 350 +#define TARGET_NR_finit_module 351 +#define TARGET_NR_sched_setattr 352 +#define TARGET_NR_sched_getattr 353 +#define TARGET_NR_renameat2 354 +#define TARGET_NR_seccomp 355 +#define TARGET_NR_getrandom 356 +#define TARGET_NR_memfd_create 357 +#define TARGET_NR_bpf 358 +#define TARGET_NR_execveat 359 diff --git a/linux-user/i386/syscall_nr.h b/linux-user/i386/syscall_nr.h index c8f7302194..fa3f0b4a08 100644 --- a/linux-user/i386/syscall_nr.h +++ b/linux-user/i386/syscall_nr.h @@ -353,3 +353,30 @@ #define TARGET_NR_process_vm_writev 348 #define TARGET_NR_kcmp 349 #define TARGET_NR_finit_module 350 +#define TARGET_NR_sched_setattr 351 +#define TARGET_NR_sched_getattr 352 +#define TARGET_NR_renameat2 353 +#define TARGET_NR_seccomp 354 +#define TARGET_NR_getrandom 355 +#define TARGET_NR_memfd_create 356 +#define TARGET_NR_bpf 357 +#define TARGET_NR_execveat 358 +#define TARGET_NR_socket 359 +#define TARGET_NR_socketpair 360 +#define TARGET_NR_bind 361 +#define TARGET_NR_connect 362 +#define TARGET_NR_listen 363 +#define TARGET_NR_accept4 364 +#define TARGET_NR_getsockopt 365 +#define TARGET_NR_setsockopt 366 +#define TARGET_NR_getsockname 367 +#define TARGET_NR_getpeername 368 +#define TARGET_NR_sendto 369 +#define TARGET_NR_sendmsg 370 +#define TARGET_NR_recvfrom 371 +#define TARGET_NR_recvmsg 372 +#define TARGET_NR_shutdown 373 +#define TARGET_NR_userfaultfd 374 +#define TARGET_NR_membarrier 375 +#define TARGET_NR_mlock2 376 +#define TARGET_NR_copy_file_range 377 diff --git a/linux-user/microblaze/syscall_nr.h b/linux-user/microblaze/syscall_nr.h index 6f530f9d1e..0704449bae 100644 --- a/linux-user/microblaze/syscall_nr.h +++ b/linux-user/microblaze/syscall_nr.h @@ -382,3 +382,11 @@ #define TARGET_NR_process_vm_writev 378 #define TARGET_NR_kcmp 379 #define TARGET_NR_finit_module 380 +#define TARGET_NR_sched_setattr 381 +#define TARGET_NR_sched_getattr 382 +#define TARGET_NR_renameat2 383 +#define TARGET_NR_seccomp 384 +#define TARGET_NR_getrandom 385 +#define TARGET_NR_memfd_create 386 +#define TARGET_NR_bpf 387 +#define TARGET_NR_execveat 388 diff --git a/linux-user/mips64/syscall_nr.h b/linux-user/mips64/syscall_nr.h index 004232a8a2..746cc267e9 100644 --- a/linux-user/mips64/syscall_nr.h +++ b/linux-user/mips64/syscall_nr.h @@ -316,6 +316,18 @@ #define TARGET_NR_process_vm_writev (TARGET_NR_Linux + 310) #define TARGET_NR_kcmp (TARGET_NR_Linux + 311) #define TARGET_NR_finit_module (TARGET_NR_Linux + 312) +#define TARGET_NR_sched_setattr (TARGET_NR_Linux + 313) +#define TARGET_NR_sched_getattr (TARGET_NR_Linux + 314) +#define TARGET_NR_renameat2 (TARGET_NR_Linux + 315) +#define TARGET_NR_seccomp (TARGET_NR_Linux + 316) +#define TARGET_NR_getrandom (TARGET_NR_Linux + 317) +#define TARGET_NR_memfd_create (TARGET_NR_Linux + 318) +#define TARGET_NR_bpf (TARGET_NR_Linux + 319) +#define TARGET_NR_execveat (TARGET_NR_Linux + 320) +#define TARGET_NR_userfaultfd (TARGET_NR_Linux + 321) +#define TARGET_NR_membarrier (TARGET_NR_Linux + 322) +#define TARGET_NR_mlock2 (TARGET_NR_Linux + 323) + #else /* * Linux 64-bit syscalls are in the range from 5000 to 5999. @@ -630,4 +642,15 @@ #define TARGET_NR_kcmp (TARGET_NR_Linux + 306) #define TARGET_NR_finit_module (TARGET_NR_Linux + 307) #define TARGET_NR_getdents64 (TARGET_NR_Linux + 308) +#define TARGET_NR_sched_setattr (TARGET_NR_Linux + 309) +#define TARGET_NR_sched_getattr (TARGET_NR_Linux + 310) +#define TARGET_NR_renameat2 (TARGET_NR_Linux + 311) +#define TARGET_NR_seccomp (TARGET_NR_Linux + 312) +#define TARGET_NR_getrandom (TARGET_NR_Linux + 313) +#define TARGET_NR_memfd_create (TARGET_NR_Linux + 314) +#define TARGET_NR_bpf (TARGET_NR_Linux + 315) +#define TARGET_NR_execveat (TARGET_NR_Linux + 316) +#define TARGET_NR_userfaultfd (TARGET_NR_Linux + 317) +#define TARGET_NR_membarrier (TARGET_NR_Linux + 318) +#define TARGET_NR_mlock2 (TARGET_NR_Linux + 319) #endif diff --git a/linux-user/openrisc/syscall_nr.h b/linux-user/openrisc/syscall_nr.h index 4c386eae98..6b1c7d265e 100644 --- a/linux-user/openrisc/syscall_nr.h +++ b/linux-user/openrisc/syscall_nr.h @@ -382,9 +382,18 @@ #define TARGET_NR_process_vm_writev 271 #define TARGET_NR_kcmp 272 #define TARGET_NR_finit_module 273 - -#undef TARGET_NR_syscalls -#define TARGET_NR_syscalls 274 +#define TARGET_NR_sched_setattr 274 +#define TARGET_NR_sched_getattr 275 +#define TARGET_NR_renameat2 276 +#define TARGET_NR_seccomp 277 +#define TARGET_NR_getrandom 278 +#define TARGET_NR_memfd_create 279 +#define TARGET_NR_bpf 280 +#define TARGET_NR_execveat 281 +#define TARGET_NR_userfaultfd 282 +#define TARGET_NR_membarrier 283 +#define TARGET_NR_mlock2 284 +#define TARGET_NR_copy_file_range 285 /* * All syscalls below here should go away really, @@ -411,9 +420,6 @@ #define TARGET_NR_3264_stat 1038 #define TARGET_NR_3264_lstat 1039 -#undef TARGET_NR_syscalls -#define TARGET_NR_syscalls (TARGET_NR_3264_lstat+1) - #define TARGET_NR_pipe 1040 #define TARGET_NR_dup2 1041 #define TARGET_NR_epoll_create 1042 @@ -421,10 +427,6 @@ #define TARGET_NR_eventfd 1044 #define TARGET_NR_signalfd 1045 -#undef TARGET_NR_syscalls -#define TARGET_NR_syscalls (TARGET_NR_signalfd+1) - - #define TARGET_NR_sendfile 1046 #define TARGET_NR_ftruncate 1047 #define TARGET_NR_truncate 1048 @@ -441,9 +443,6 @@ #define TARGET_NR_lseek 1057 #define TARGET_NR_mmap 1058 -#undef TARGET_NR_syscalls -#define TARGET_NR_syscalls (TARGET_NR_mmap+1) - #define TARGET_NR_alarm 1059 #define __ARCH_WANT_SYS_ALARM #define TARGET_NR_getpgrp 1060 @@ -477,9 +476,6 @@ #define TARGET_NR_fork 1079 -#undef TARGET_NR_syscalls -#define TARGET_NR_syscalls (TARGET_NR_fork+1) - /* * 32 bit systems traditionally used different diff --git a/linux-user/ppc/syscall_nr.h b/linux-user/ppc/syscall_nr.h index 1e1736e11d..0a5fd543e7 100644 --- a/linux-user/ppc/syscall_nr.h +++ b/linux-user/ppc/syscall_nr.h @@ -368,3 +368,27 @@ #define TARGET_NR_process_vm_writev 352 #define TARGET_NR_finit_module 353 #define TARGET_NR_kcmp 354 +#define TARGET_NR_sched_setattr 355 +#define TARGET_NR_sched_getattr 356 +#define TARGET_NR_renameat2 357 +#define TARGET_NR_seccomp 358 +#define TARGET_NR_getrandom 359 +#define TARGET_NR_memfd_create 360 +#define TARGET_NR_bpf 361 +#define TARGET_NR_execveat 362 +#define TARGET_NR_switch_endian 363 +#define TARGET_NR_userfaultfd 364 +#define TARGET_NR_membarrier 365 +#define TARGET_NR_semop 366 +#define TARGET_NR_semget 367 +#define TARGET_NR_semctl 368 +#define TARGET_NR_semtimedop 369 +#define TARGET_NR_msgsnd 370 +#define TARGET_NR_msgrcv 371 +#define TARGET_NR_msgget 372 +#define TARGET_NR_msgctl 373 +#define TARGET_NR_shmat 374 +#define TARGET_NR_shmdt 375 +#define TARGET_NR_shmget 376 +#define TARGET_NR_shmctl 377 +#define TARGET_NR_mlock2 378 diff --git a/linux-user/s390x/syscall_nr.h b/linux-user/s390x/syscall_nr.h index 7c0b8b2eaa..1a66c5561d 100644 --- a/linux-user/s390x/syscall_nr.h +++ b/linux-user/s390x/syscall_nr.h @@ -271,6 +271,36 @@ #define TARGET_NR_s390_runtime_instr 342 #define TARGET_NR_kcmp 343 #define TARGET_NR_finit_module 344 +#define TARGET_NR_sched_setattr 345 +#define TARGET_NR_sched_getattr 346 +#define TARGET_NR_renameat2 347 +#define TARGET_NR_seccomp 348 +#define TARGET_NR_getrandom 349 +#define TARGET_NR_memfd_create 350 +#define TARGET_NR_bpf 351 +#define TARGET_NR_s390_pci_mmio_write 352 +#define TARGET_NR_s390_pci_mmio_read 353 +#define TARGET_NR_execveat 354 +#define TARGET_NR_userfaultfd 355 +#define TARGET_NR_membarrier 356 +#define TARGET_NR_recvmmsg 357 +#define TARGET_NR_sendmmsg 358 +#define TARGET_NR_socket 359 +#define TARGET_NR_socketpair 360 +#define TARGET_NR_bind 361 +#define TARGET_NR_connect 362 +#define TARGET_NR_listen 363 +#define TARGET_NR_accept4 364 +#define TARGET_NR_getsockopt 365 +#define TARGET_NR_setsockopt 366 +#define TARGET_NR_getsockname 367 +#define TARGET_NR_getpeername 368 +#define TARGET_NR_sendto 369 +#define TARGET_NR_sendmsg 370 +#define TARGET_NR_recvfrom 371 +#define TARGET_NR_recvmsg 372 +#define TARGET_NR_shutdown 373 +#define TARGET_NR_mlock2 374 /* * There are some system calls that are not present on 64 bit, some diff --git a/linux-user/sparc/syscall_nr.h b/linux-user/sparc/syscall_nr.h index 181cd32653..5b582a5a90 100644 --- a/linux-user/sparc/syscall_nr.h +++ b/linux-user/sparc/syscall_nr.h @@ -309,3 +309,17 @@ #define TARGET_NR_kern_features 340 #define TARGET_NR_kcmp 341 #define TARGET_NR_finit_module 342 +#define TARGET_NR_sched_setattr 343 +#define TARGET_NR_sched_getattr 344 +#define TARGET_NR_renameat2 345 +#define TARGET_NR_seccomp 346 +#define TARGET_NR_getrandom 347 +#define TARGET_NR_memfd_create 348 +#define TARGET_NR_bpf 349 +#define TARGET_NR_execveat 350 +#define TARGET_NR_membarrier 351 +#define TARGET_NR_userfaultfd 352 +#define TARGET_NR_bind 353 +#define TARGET_NR_listen 354 +#define TARGET_NR_setsockopt 355 +#define TARGET_NR_mlock2 356 diff --git a/linux-user/sparc64/syscall_nr.h b/linux-user/sparc64/syscall_nr.h index 34a984cc88..2b49ead267 100644 --- a/linux-user/sparc64/syscall_nr.h +++ b/linux-user/sparc64/syscall_nr.h @@ -341,3 +341,17 @@ #define TARGET_NR_kern_features 340 #define TARGET_NR_kcmp 341 #define TARGET_NR_finit_module 342 +#define TARGET_NR_sched_setattr 343 +#define TARGET_NR_sched_getattr 344 +#define TARGET_NR_renameat2 345 +#define TARGET_NR_seccomp 346 +#define TARGET_NR_getrandom 347 +#define TARGET_NR_memfd_create 348 +#define TARGET_NR_bpf 349 +#define TARGET_NR_execveat 350 +#define TARGET_NR_membarrier 351 +#define TARGET_NR_userfaultfd 352 +#define TARGET_NR_bind 353 +#define TARGET_NR_listen 354 +#define TARGET_NR_setsockopt 355 +#define TARGET_NR_mlock2 356 diff --git a/linux-user/tilegx/syscall_nr.h b/linux-user/tilegx/syscall_nr.h index 1dca348378..87fb72c554 100644 --- a/linux-user/tilegx/syscall_nr.h +++ b/linux-user/tilegx/syscall_nr.h @@ -274,6 +274,10 @@ #define TARGET_NR_memfd_create 279 #define TARGET_NR_bpf 280 #define TARGET_NR_execveat 281 +#define TARGET_NR_userfaultfd 282 +#define TARGET_NR_membarrier 283 +#define TARGET_NR_mlock2 284 +#define TARGET_NR_copy_file_range 285 #define TARGET_NR_open 1024 #define TARGET_NR_link 1025 diff --git a/linux-user/x86_64/syscall_nr.h b/linux-user/x86_64/syscall_nr.h index 7c59e3a09e..f00fa2b783 100644 --- a/linux-user/x86_64/syscall_nr.h +++ b/linux-user/x86_64/syscall_nr.h @@ -312,3 +312,16 @@ #define TARGET_NR_process_vm_writev 311 #define TARGET_NR_kcmp 312 #define TARGET_NR_finit_module 313 +#define TARGET_NR_sched_setattr 314 +#define TARGET_NR_sched_getattr 315 +#define TARGET_NR_renameat2 316 +#define TARGET_NR_seccomp 317 +#define TARGET_NR_getrandom 318 +#define TARGET_NR_memfd_create 319 +#define TARGET_NR_kexec_file_load 320 +#define TARGET_NR_bpf 321 +#define TARGET_NR_execveat 322 +#define TARGET_NR_userfaultfd 323 +#define TARGET_NR_membarrier 324 +#define TARGET_NR_mlock2 325 +#define TARGET_NR_copy_file_range 326 From 13756fb008728e0c316d6b183c8740e030b1ad74 Mon Sep 17 00:00:00 2001 From: Riku Voipio Date: Mon, 15 Feb 2016 14:35:12 +0200 Subject: [PATCH 6/8] linux-user: remove unavailable syscalls from aarch64 QEMU lists deprecated system call numbers in for Aarch64. These are never enabled for Linux kernel, so don't define them in Qemu either. Remove the ifdef around host_to_target_stat64 since all architectures need it now. Reviewed-by: Peter Maydell Signed-off-by: Riku Voipio --- linux-user/aarch64/syscall_nr.h | 59 --------------------------------- linux-user/syscall.c | 2 -- 2 files changed, 61 deletions(-) diff --git a/linux-user/aarch64/syscall_nr.h b/linux-user/aarch64/syscall_nr.h index c8a8599c09..59511d855d 100644 --- a/linux-user/aarch64/syscall_nr.h +++ b/linux-user/aarch64/syscall_nr.h @@ -275,62 +275,3 @@ #define TARGET_NR_mlock2 284 #define TARGET_NR_copy_file_range 285 -#define TARGET_NR_open 1024 -#define TARGET_NR_link 1025 -#define TARGET_NR_unlink 1026 -#define TARGET_NR_mknod 1027 -#define TARGET_NR_chmod 1028 -#define TARGET_NR_chown 1029 -#define TARGET_NR_mkdir 1030 -#define TARGET_NR_rmdir 1031 -#define TARGET_NR_lchown 1032 -#define TARGET_NR_access 1033 -#define TARGET_NR_rename 1034 -#define TARGET_NR_readlink 1035 -#define TARGET_NR_symlink 1036 -#define TARGET_NR_utimes 1037 -#define TARGET_NR_stat 1038 -#define TARGET_NR_lstat 1039 -#define TARGET_NR_pipe 1040 -#define TARGET_NR_dup2 1041 -#define TARGET_NR_epoll_create 1042 -#define TARGET_NR_inotify_init 1043 -#define TARGET_NR_eventfd 1044 -#define TARGET_NR_signalfd 1045 -#define TARGET_NR_sendfile64 1046 -#define TARGET_NR_ftruncate64 1047 -#define TARGET_NR_truncate64 1048 -#define TARGET_NR_stat64 1049 -#define TARGET_NR_lstat64 1050 -#define TARGET_NR_fstat64 1051 -#define TARGET_NR_fcntl64 1052 -/* #define TARGET_NR_fadvise64 1053 */ -#define TARGET_NR_newfstatat 1054 -#define TARGET_NR_fstatfs64 1055 -#define TARGET_NR_statfs64 1056 -#define TARGET_NR_lseek64 1057 -#define TARGET_NR_mmap64 1058 -#define TARGET_NR_alarm 1059 -#define TARGET_NR_getpgrp 1060 -#define TARGET_NR_pause 1061 -#define TARGET_NR_time 1062 -#define TARGET_NR_utime 1063 -#define TARGET_NR_creat 1064 -#define TARGET_NR_getdents 1065 -#define TARGET_NR_futimesat 1066 -#define TARGET_NR_select 1067 -#define TARGET_NR_poll 1068 -#define TARGET_NR_epoll_wait 1069 -#define TARGET_NR_ustat 1070 -#define TARGET_NR_vfork 1071 -#define TARGET_NR_oldwait4 1072 -#define TARGET_NR_recv 1073 -#define TARGET_NR_send 1074 -#define TARGET_NR_bdflush 1075 -#define TARGET_NR_umount 1076 -#define TARGET_NR_uselib 1077 -#define TARGET_NR__sysctl 1078 -#define TARGET_NR_fork 1079 -#define TARGET_NR_syscalls (__NR_fork+1) - -#define TARGET_NR_sigreturn 1999 diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 8b76169ca5..539183a788 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -5231,7 +5231,6 @@ static inline int target_to_host_mlockall_arg(int arg) } #endif -#if defined(TARGET_NR_stat64) || defined(TARGET_NR_newfstatat) static inline abi_long host_to_target_stat64(void *cpu_env, abi_ulong target_addr, struct stat *host_st) @@ -5294,7 +5293,6 @@ static inline abi_long host_to_target_stat64(void *cpu_env, return 0; } -#endif /* ??? Using host futex calls even when target atomic operations are not really atomic probably breaks things. However implementing From 93a92d3bd649cd315db47b9fb5dcb6af657cc22c Mon Sep 17 00:00:00 2001 From: Riku Voipio Date: Mon, 15 Feb 2016 15:38:40 +0200 Subject: [PATCH 7/8] linux-user: correct timerfd_create syscall numbers x86, m68k, ppc, sh4 and sparc failed to enable timerfd, because they didn't have timerfd_create system call defined. Instead QEMU defined timerfd syscall. Checking with kernel sources, it appears kernel developers reused timerfd syscall number with timerfd_create, presumably since no userspace called the old syscall number. Reported-by: Laurent Vivier Reviewed-by: Laurent Vivier Signed-off-by: Riku Voipio --- linux-user/i386/syscall_nr.h | 2 +- linux-user/m68k/syscall_nr.h | 2 +- linux-user/ppc/syscall_nr.h | 2 +- linux-user/sh4/syscall_nr.h | 2 +- linux-user/sparc/syscall_nr.h | 2 +- linux-user/x86_64/syscall_nr.h | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/linux-user/i386/syscall_nr.h b/linux-user/i386/syscall_nr.h index fa3f0b4a08..bc1bc233ed 100644 --- a/linux-user/i386/syscall_nr.h +++ b/linux-user/i386/syscall_nr.h @@ -324,7 +324,7 @@ #define TARGET_NR_epoll_pwait 319 #define TARGET_NR_utimensat 320 #define TARGET_NR_signalfd 321 -#define TARGET_NR_timerfd 322 +#define TARGET_NR_timerfd_create 322 #define TARGET_NR_eventfd 323 #define TARGET_NR_fallocate 324 #define TARGET_NR_timerfd_settime 325 diff --git a/linux-user/m68k/syscall_nr.h b/linux-user/m68k/syscall_nr.h index a2daba034a..4b50fb29b6 100644 --- a/linux-user/m68k/syscall_nr.h +++ b/linux-user/m68k/syscall_nr.h @@ -317,7 +317,7 @@ #define TARGET_NR_epoll_pwait 315 #define TARGET_NR_utimensat 316 #define TARGET_NR_signalfd 317 -#define TARGET_NR_timerfd 318 +#define TARGET_NR_timerfd_create 318 #define TARGET_NR_eventfd 319 #define TARGET_NR_fallocate 320 #define TARGET_NR_timerfd_settime 321 diff --git a/linux-user/ppc/syscall_nr.h b/linux-user/ppc/syscall_nr.h index 0a5fd543e7..46ed8a68ce 100644 --- a/linux-user/ppc/syscall_nr.h +++ b/linux-user/ppc/syscall_nr.h @@ -319,7 +319,7 @@ #define TARGET_NR_epoll_pwait 303 #define TARGET_NR_utimensat 304 #define TARGET_NR_signalfd 305 -#define TARGET_NR_timerfd 306 +#define TARGET_NR_timerfd_create 306 #define TARGET_NR_eventfd 307 #define TARGET_NR_sync_file_range2 308 #define TARGET_NR_fallocate 309 diff --git a/linux-user/sh4/syscall_nr.h b/linux-user/sh4/syscall_nr.h index bdf8742c69..50099846d2 100644 --- a/linux-user/sh4/syscall_nr.h +++ b/linux-user/sh4/syscall_nr.h @@ -323,7 +323,7 @@ #define TARGET_NR_epoll_pwait 319 #define TARGET_NR_utimensat 320 #define TARGET_NR_signalfd 321 -#define TARGET_NR_timerfd 322 +#define TARGET_NR_timerfd_create 322 #define TARGET_NR_eventfd 323 #define TARGET_NR_fallocate 324 #define TARGET_NR_timerfd_settime 325 diff --git a/linux-user/sparc/syscall_nr.h b/linux-user/sparc/syscall_nr.h index 5b582a5a90..732b1052a4 100644 --- a/linux-user/sparc/syscall_nr.h +++ b/linux-user/sparc/syscall_nr.h @@ -278,7 +278,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 diff --git a/linux-user/x86_64/syscall_nr.h b/linux-user/x86_64/syscall_nr.h index f00fa2b783..16397b3e8f 100644 --- a/linux-user/x86_64/syscall_nr.h +++ b/linux-user/x86_64/syscall_nr.h @@ -281,7 +281,7 @@ #define TARGET_NR_utimensat 280 #define TARGET_NR_epoll_pwait 281 #define TARGET_NR_signalfd 282 -#define TARGET_NR_timerfd 283 +#define TARGET_NR_timerfd_create 283 #define TARGET_NR_eventfd 284 #define TARGET_NR_fallocate 285 #define TARGET_NR_timerfd_settime 286 From f894efd19917321844b31e5dd7a061fdc6fb322d Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Sun, 21 Feb 2016 10:56:23 +0100 Subject: [PATCH 8/8] linux-user: add getrandom() syscall getrandom() has been introduced in kernel 3.17 and is now used during the boot sequence of Debian unstable (stretch/sid). Signed-off-by: Laurent Vivier Signed-off-by: Riku Voipio --- linux-user/syscall.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 539183a788..951753143c 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -249,6 +249,9 @@ _syscall2(int, ioprio_get, int, which, int, who) #if defined(TARGET_NR_ioprio_set) && defined(__NR_ioprio_set) _syscall3(int, ioprio_set, int, which, int, who, int, ioprio) #endif +#if defined(TARGET_NR_getrandom) && defined(__NR_getrandom) +_syscall3(int, getrandom, void *, buf, size_t, buflen, unsigned int, flags) +#endif static bitmask_transtbl fcntl_flags_tbl[] = { { TARGET_O_ACCMODE, TARGET_O_WRONLY, O_ACCMODE, O_WRONLY, }, @@ -7541,6 +7544,16 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, ret = get_errno(shutdown(arg1, arg2)); break; #endif +#if defined(TARGET_NR_getrandom) && defined(__NR_getrandom) + case TARGET_NR_getrandom: + p = lock_user(VERIFY_WRITE, arg1, arg2, 0); + if (!p) { + goto efault; + } + ret = get_errno(getrandom(p, arg2, arg3)); + unlock_user(p, arg1, ret); + break; +#endif #ifdef TARGET_NR_socket case TARGET_NR_socket: ret = do_socket(arg1, arg2, arg3);