Laurent Vivier <laur...@vivier.eu> writes: > Le 10/09/2020 à 07:21, Launchpad Bug Tracker a écrit : >> This problem occurs on CentOS-7.5 (64-bit) with qemu-5.1.0, qemu head >> (commit 9435a8b3dd35f1f926f1b9127e8a906217a5518a) for riscv32-linux- >> user. > > I tried to build qemu-5.1 on CentOS-7.5.1 but as python 3.5 is not > available, I gave up. > >> Firstly, compile fails: >> Compiling C object libqemu-riscv32-linux-user.fa.p/linux-user_strace.c.o >> ../qemu.git/linux-user/strace.c:1210:18: error: ‘FALLOC_FL_KEEP_SIZE’ >> undeclared here (not in a function) >> FLAG_GENERIC(FALLOC_FL_KEEP_SIZE), >> >> I have to add below include to linux-user/strace.c >> diff --git a/linux-user/strace.c b/linux-user/strace.c >> index 11fea14fba..22e51d4a8a 100644 >> --- a/linux-user/strace.c >> +++ b/linux-user/strace.c >> @@ -7,6 +7,7 @@ >> #include <sys/mount.h> >> #include <arpa/inet.h> >> #include <netinet/tcp.h> >> +#include <linux/falloc.h> >> #include <linux/if_packet.h> >> #include <linux/netlink.h> >> #include <sched.h> > > In fact, fallocate(2) says fcntl.h must be included. > And qemu/osdep.h includes it. > So you should not have this problem. > >> >> Then trying qemu-riscv32 with a simple ELF, I get: >> linux-user/elfload.c:2341: pgb_reserved_va: Assertion `addr == test' failed. >> >> strace shows that: >> mmap(0x1000, 4294963200, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, >> -1, 0) = 0x10000 >> write(2, "qemu-riscv32: ../qemu.git/linux-"..., 103qemu-riscv32: >> ../qemu.git/linux-user/elfload.c:2341: pgb_reserved_va: Assertion `addr == >> test' failed. >> ) = 103 >> >> The source code is in the function pgb_reserved_va (linux- >> user/elfload.c). I think mmap cannot guarantee that the returned pointer >> (test) equals to the parameter of addr. So is this a bug to assert (addr >> == test)? > > I think Alex Bennée knows better this code than I do, so cc'ing him.
It should be able to do so because the earlier code (pgb_static) checks for a hole the size of reserved_va in the host memory map. This should be fairly easy for 32 bit guests given the amount of spare address space you have on a 64 bit system. I'm assuming CentOS 7.5 actually has a definition for MAP_FIXED_NOREPLACE which should ensure we get what we asked for - otherwise we are in the position of hoping the kernel honours what we asked for. > > Thnaks > Laurent -- Alex Bennée -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1895080 Title: pgb_reserved_va: Assertion `addr == test' failed Status in QEMU: New Bug description: This problem occurs on CentOS-7.5 (64-bit) with qemu-5.1.0, qemu head (commit 9435a8b3dd35f1f926f1b9127e8a906217a5518a) for riscv32-linux- user. Firstly, compile fails: Compiling C object libqemu-riscv32-linux-user.fa.p/linux-user_strace.c.o ../qemu.git/linux-user/strace.c:1210:18: error: ‘FALLOC_FL_KEEP_SIZE’ undeclared here (not in a function) FLAG_GENERIC(FALLOC_FL_KEEP_SIZE), I have to add below include to linux-user/strace.c diff --git a/linux-user/strace.c b/linux-user/strace.c index 11fea14fba..22e51d4a8a 100644 --- a/linux-user/strace.c +++ b/linux-user/strace.c @@ -7,6 +7,7 @@ #include <sys/mount.h> #include <arpa/inet.h> #include <netinet/tcp.h> +#include <linux/falloc.h> #include <linux/if_packet.h> #include <linux/netlink.h> #include <sched.h> Then trying qemu-riscv32 with a simple ELF, I get: linux-user/elfload.c:2341: pgb_reserved_va: Assertion `addr == test' failed. strace shows that: mmap(0x1000, 4294963200, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0) = 0x10000 write(2, "qemu-riscv32: ../qemu.git/linux-"..., 103qemu-riscv32: ../qemu.git/linux-user/elfload.c:2341: pgb_reserved_va: Assertion `addr == test' failed. ) = 103 The source code is in the function pgb_reserved_va (linux- user/elfload.c). I think mmap cannot guarantee that the returned pointer (test) equals to the parameter of addr. So is this a bug to assert (addr == test)? Attached configure script and test ELF file. Thanks. To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1895080/+subscriptions