qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes
@ 2020-04-03 19:11 Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 01/12] elf-ops: bail out if we have no function symbols Alex Bennée
                   ` (11 more replies)
  0 siblings, 12 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée

Hi,

Here is version 3 of my random fixes series. 

I've dropped the more involved re-factoring of init_guest_space as
it's going to take more thought and is best left to 5.1. I've left in
the earlier clean-ups which fix the spacing and of the /proc/self/maps
but I can drop them if they seem too radical for rc2.

The elf-ops fix is a little cleaner, dropping the return ignored
value and using autoptr to avoid the goto magic.

I've includes the .hex and ARM gdbstub fixes which were posted
separately because I didn't have another series to put them in.
Richard's configure fix is there just so I can run my CI runs but may
well get picked up via another tree?

Anyway I intend to cut the PR on Monday with whatever hasn't been
already pulled in by other trees.

The only un-reviewed patch is:

 - linux-user: factor out reading of /proc/self/maps

Alex Bennée (9):
  elf-ops: bail out if we have no function symbols
  linux-user: protect fcntl64 with an #ifdef
  tests/tcg: remove extraneous pasting macros
  linux-user: more debug for init_guest_space
  target/xtensa: add FIXME for translation memory leak
  linux-user: factor out reading of /proc/self/maps
  linux-user: clean-up padding on /proc/self/maps
  target/arm: don't expose "ieee_half" via gdbstub
  hw/core: properly terminate loading .hex on EOF record

Denis Plotnikov (1):
  gdbstub: fix compiler complaining

Richard Henderson (2):
  softfloat: Fix BAD_SHIFT from normalizeFloatx80Subnormal
  configure: Add -Werror to PIE probe

 configure                      |  4 +-
 include/hw/elf_ops.h           | 48 ++++++++++----------
 include/qemu/selfmap.h         | 44 +++++++++++++++++++
 fpu/softfloat.c                |  3 ++
 gdbstub.c                      |  4 +-
 hw/core/loader.c               |  5 ++-
 linux-user/elfload.c           |  8 +++-
 linux-user/syscall.c           | 80 ++++++++++++++++++----------------
 target/arm/gdbstub.c           |  7 ++-
 target/xtensa/translate.c      |  5 +++
 util/selfmap.c                 | 77 ++++++++++++++++++++++++++++++++
 tests/tcg/x86_64/system/boot.S |  5 +--
 util/Makefile.objs             |  1 +
 13 files changed, 219 insertions(+), 72 deletions(-)
 create mode 100644 include/qemu/selfmap.h
 create mode 100644 util/selfmap.c

-- 
2.20.1



^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH  v3 01/12] elf-ops: bail out if we have no function symbols
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 02/12] linux-user: protect fcntl64 with an #ifdef Alex Bennée
                   ` (10 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé, Richard Henderson, Alex Bennée

It's perfectly possible to have no function symbols in your elf file
and if we do the undefined behaviour sanitizer rightly complains about
us passing NULL to qsort. Check nsyms before we go ahead.

While we are at it lets drop the unchecked return value and cleanup
the fail leg by use of g_autoptr.

Another fix was proposed 101 weeks ago in:
Message-Id: 20180421232120.22208-1-f4bug@amsat.org

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
 include/hw/elf_ops.h | 48 +++++++++++++++++++++++---------------------
 1 file changed, 25 insertions(+), 23 deletions(-)

diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h
index a1411bfcab6..e0bb47bb678 100644
--- a/include/hw/elf_ops.h
+++ b/include/hw/elf_ops.h
@@ -104,19 +104,21 @@ static int glue(symcmp, SZ)(const void *s0, const void *s1)
         : ((sym0->st_value > sym1->st_value) ? 1 : 0);
 }
 
-static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
-                                  int clear_lsb, symbol_fn_t sym_cb)
+static void glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
+                                   int clear_lsb, symbol_fn_t sym_cb)
 {
-    struct elf_shdr *symtab, *strtab, *shdr_table = NULL;
-    struct elf_sym *syms = NULL;
+    struct elf_shdr *symtab, *strtab;
+    g_autofree struct elf_shdr *shdr_table = NULL;
+    g_autofree struct elf_sym *syms = NULL;
+    g_autofree char *str = NULL;
     struct syminfo *s;
     int nsyms, i;
-    char *str = NULL;
 
     shdr_table = load_at(fd, ehdr->e_shoff,
                          sizeof(struct elf_shdr) * ehdr->e_shnum);
-    if (!shdr_table)
-        return -1;
+    if (!shdr_table) {
+        return ;
+    }
 
     if (must_swab) {
         for (i = 0; i < ehdr->e_shnum; i++) {
@@ -125,23 +127,25 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
     }
 
     symtab = glue(find_section, SZ)(shdr_table, ehdr->e_shnum, SHT_SYMTAB);
-    if (!symtab)
-        goto fail;
+    if (!symtab) {
+        return;
+    }
     syms = load_at(fd, symtab->sh_offset, symtab->sh_size);
-    if (!syms)
-        goto fail;
+    if (!syms) {
+        return;
+    }
 
     nsyms = symtab->sh_size / sizeof(struct elf_sym);
 
     /* String table */
     if (symtab->sh_link >= ehdr->e_shnum) {
-        goto fail;
+        return;
     }
     strtab = &shdr_table[symtab->sh_link];
 
     str = load_at(fd, strtab->sh_offset, strtab->sh_size);
     if (!str) {
-        goto fail;
+        return;
     }
 
     i = 0;
@@ -170,8 +174,13 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
         }
         i++;
     }
-    syms = g_realloc(syms, nsyms * sizeof(*syms));
 
+    /* check we have symbols left */
+    if (nsyms == 0) {
+        return;
+    }
+
+    syms = g_realloc(syms, nsyms * sizeof(*syms));
     qsort(syms, nsyms, sizeof(*syms), glue(symcmp, SZ));
     for (i = 0; i < nsyms - 1; i++) {
         if (syms[i].st_size == 0) {
@@ -182,18 +191,11 @@ static int glue(load_symbols, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
     /* Commit */
     s = g_malloc0(sizeof(*s));
     s->lookup_symbol = glue(lookup_symbol, SZ);
-    glue(s->disas_symtab.elf, SZ) = syms;
+    glue(s->disas_symtab.elf, SZ) = g_steal_pointer(&syms);
     s->disas_num_syms = nsyms;
-    s->disas_strtab = str;
+    s->disas_strtab = g_steal_pointer(&str);
     s->next = syminfos;
     syminfos = s;
-    g_free(shdr_table);
-    return 0;
- fail:
-    g_free(syms);
-    g_free(str);
-    g_free(shdr_table);
-    return -1;
 }
 
 static int glue(elf_reloc, SZ)(struct elfhdr *ehdr, int fd, int must_swab,
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 02/12] linux-user: protect fcntl64 with an #ifdef
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 01/12] elf-ops: bail out if we have no function symbols Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 03/12] tests/tcg: remove extraneous pasting macros Alex Bennée
                   ` (9 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Riku Voipio, Alex Bennée, Laurent Vivier

Checking TARGET_ABI_BITS is sketchy - we should check for the presence
of the define to be sure. Also clean up the white space while we are
there.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
 linux-user/syscall.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 5af55fca781..b679bc6b136 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -11331,11 +11331,11 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
            This is a hint, so ignoring and returning success is ok.  */
         return 0;
 #endif
-#if TARGET_ABI_BITS == 32
+#ifdef TARGET_NR_fcntl64
     case TARGET_NR_fcntl64:
     {
-	int cmd;
-	struct flock64 fl;
+        int cmd;
+        struct flock64 fl;
         from_flock64_fn *copyfrom = copy_from_user_flock64;
         to_flock64_fn *copyto = copy_to_user_flock64;
 
@@ -11346,7 +11346,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
         }
 #endif
 
-	cmd = target_to_host_fcntl_cmd(arg2);
+        cmd = target_to_host_fcntl_cmd(arg2);
         if (cmd == -TARGET_EINVAL) {
             return cmd;
         }
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 03/12] tests/tcg: remove extraneous pasting macros
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 01/12] elf-ops: bail out if we have no function symbols Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 02/12] linux-user: protect fcntl64 with an #ifdef Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 04/12] linux-user: more debug for init_guest_space Alex Bennée
                   ` (8 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Eduardo Habkost, Alex Bennée, Richard Henderson,
	Paolo Bonzini, Philippe Mathieu-Daudé,
	Richard Henderson

We are not using them and they just get in the way.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
 tests/tcg/x86_64/system/boot.S | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/tests/tcg/x86_64/system/boot.S b/tests/tcg/x86_64/system/boot.S
index 205cfbd3982..73b19a2bda6 100644
--- a/tests/tcg/x86_64/system/boot.S
+++ b/tests/tcg/x86_64/system/boot.S
@@ -41,10 +41,7 @@
 #define XEN_ELFNOTE_PHYS32_ENTRY  18
 
 #define __ASM_FORM(x)	x
-#define __ASM_FORM_RAW(x)     x
-#define __ASM_FORM_COMMA(x) x,
-#define __ASM_SEL(a,b)           __ASM_FORM(b)
-#define __ASM_SEL_RAW(a,b)      __ASM_FORM_RAW(b)
+#define __ASM_SEL(a,b)  __ASM_FORM(b)
 #define _ASM_PTR	__ASM_SEL(.long, .quad)
 
 	ELFNOTE(Xen, XEN_ELFNOTE_VIRT_BASE,      _ASM_PTR 0x100000)
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 04/12] linux-user: more debug for init_guest_space
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (2 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 03/12] tests/tcg: remove extraneous pasting macros Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 20:39   ` Philippe Mathieu-Daudé
  2020-04-03 19:11 ` [PATCH v3 05/12] target/xtensa: add FIXME for translation memory leak Alex Bennée
                   ` (7 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Riku Voipio, Alex Bennée, Laurent Vivier

Searching for memory space can cause problems so lets extend the
CPU_LOG_PAGE output so you can watch init_guest_space fail to
allocate memory. A more involved fix is actually required to make this
function play nicely with the large guard pages the sanitiser likes to
use.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
---
 linux-user/elfload.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 8198be04460..619c054cc48 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -2172,6 +2172,8 @@ unsigned long init_guest_space(unsigned long host_start,
 
         /* Check to see if the address is valid.  */
         if (host_start && real_start != current_start) {
+            qemu_log_mask(CPU_LOG_PAGE, "invalid %lx && %lx != %lx\n",
+                          host_start, real_start, current_start);
             goto try_again;
         }
 
@@ -2240,7 +2242,11 @@ unsigned long init_guest_space(unsigned long host_start,
          * probably a bad strategy if not, which means we got here
          * because of trouble with ARM commpage setup.
          */
-        munmap((void *)real_start, real_size);
+        if (munmap((void *)real_start, real_size) != 0) {
+            error_report("%s: failed to unmap %lx:%lx (%s)", __func__,
+                         real_start, real_size, strerror(errno));
+            abort();
+        }
         current_start += align;
         if (host_start == current_start) {
             /* Theoretically possible if host doesn't have any suitably
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 05/12] target/xtensa: add FIXME for translation memory leak
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (3 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 04/12] linux-user: more debug for init_guest_space Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 06/12] gdbstub: fix compiler complaining Alex Bennée
                   ` (6 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Max Filippov, Alex Bennée

Dynamically allocating a new structure within the DisasContext can
potentially leak as we can longjmp out of the translation loop (see
test_phys_mem). The proper fix would be to use static allocation
within the DisasContext but as the Xtensa translator imports it's code
from elsewhere I leave that as an exercise for the maintainer.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Acked-by: Max Filippov <jcmvbkbc@gmail.com>
---
 target/xtensa/translate.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
index 8aa972cafdf..37f65b1f030 100644
--- a/target/xtensa/translate.c
+++ b/target/xtensa/translate.c
@@ -1174,6 +1174,11 @@ static void xtensa_tr_init_disas_context(DisasContextBase *dcbase,
     dc->callinc = ((tb_flags & XTENSA_TBFLAG_CALLINC_MASK) >>
                    XTENSA_TBFLAG_CALLINC_SHIFT);
 
+    /*
+     * FIXME: This will leak when a failed instruction load or similar
+     * event causes us to longjump out of the translation loop and
+     * hence not clean-up in xtensa_tr_tb_stop
+     */
     if (dc->config->isa) {
         dc->insnbuf = xtensa_insnbuf_alloc(dc->config->isa);
         dc->slotbuf = xtensa_insnbuf_alloc(dc->config->isa);
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 06/12] gdbstub: fix compiler complaining
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (4 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 05/12] target/xtensa: add FIXME for translation memory leak Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-06 10:21   ` Chenqun (kuhn)
  2020-04-03 19:11 ` [PATCH v3 07/12] softfloat: Fix BAD_SHIFT from normalizeFloatx80Subnormal Alex Bennée
                   ` (5 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Philippe Mathieu-Daudé,
	Richard Henderson, Denis Plotnikov, Euler Robot, Chen Qun,
	Alex Bennée

From: Denis Plotnikov <dplotnikov@virtuozzo.com>

    ./gdbstub.c: In function ‘handle_query_thread_extra’:
        /usr/include/glib-2.0/glib/glib-autocleanups.h:28:10:
    error: ‘cpu_name’ may be used uninitialized in this function
    [-Werror=maybe-uninitialized]
        g_free (*pp);
               ^
    ./gdbstub.c:2063:26: note: ‘cpu_name’ was declared here
        g_autofree char *cpu_name;
                         ^
    cc1: all warnings being treated as errors

Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
Message-Id: <20200326151407.25046-1-dplotnikov@virtuozzo.com>
Reported-by: Euler Robot <euler.robot@huawei.com>
Reported-by: Chen Qun <kuhn.chenqun@huawei.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 gdbstub.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gdbstub.c b/gdbstub.c
index 013fb1ac0f1..171e1509509 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -2060,8 +2060,8 @@ static void handle_query_thread_extra(GdbCmdContext *gdb_ctx, void *user_ctx)
         /* Print the CPU model and name in multiprocess mode */
         ObjectClass *oc = object_get_class(OBJECT(cpu));
         const char *cpu_model = object_class_get_name(oc);
-        g_autofree char *cpu_name;
-        cpu_name  = object_get_canonical_path_component(OBJECT(cpu));
+        g_autofree char *cpu_name =
+            object_get_canonical_path_component(OBJECT(cpu));
         g_string_printf(rs, "%s %s [%s]", cpu_model, cpu_name,
                         cpu->halted ? "halted " : "running");
     } else {
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 07/12] softfloat: Fix BAD_SHIFT from normalizeFloatx80Subnormal
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (5 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 06/12] gdbstub: fix compiler complaining Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 08/12] linux-user: factor out reading of /proc/self/maps Alex Bennée
                   ` (4 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Alex Bennée, Richard Henderson, Aurelien Jarno, Peter Maydell

From: Richard Henderson <richard.henderson@linaro.org>

All other calls to normalize*Subnormal detect zero input before
the call -- this is the only outlier.  This case can happen with
+0.0 + +0.0 = +0.0 or -0.0 + -0.0 = -0.0, so return a zero of
the correct sign.

Reported-by: Coverity (CID 1421991)
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200327232042.10008-1-richard.henderson@linaro.org>
---
 fpu/softfloat.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fpu/softfloat.c b/fpu/softfloat.c
index 301ce3b537b..ae6ba718540 100644
--- a/fpu/softfloat.c
+++ b/fpu/softfloat.c
@@ -5856,6 +5856,9 @@ static floatx80 addFloatx80Sigs(floatx80 a, floatx80 b, flag zSign,
         zSig1 = 0;
         zSig0 = aSig + bSig;
         if ( aExp == 0 ) {
+            if (zSig0 == 0) {
+                return packFloatx80(zSign, 0, 0);
+            }
             normalizeFloatx80Subnormal( zSig0, &zExp, &zSig0 );
             goto roundAndPack;
         }
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 08/12] linux-user: factor out reading of /proc/self/maps
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (6 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 07/12] softfloat: Fix BAD_SHIFT from normalizeFloatx80Subnormal Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-04  0:33   ` Richard Henderson
  2020-04-03 19:11 ` [PATCH v3 09/12] linux-user: clean-up padding on /proc/self/maps Alex Bennée
                   ` (3 subsequent siblings)
  11 siblings, 1 reply; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Riku Voipio, Alex Bennée, Laurent Vivier

Unfortunately reading /proc/self/maps is still considered the gold
standard for a process finding out about it's own memory layout. As we
will want this data in other contexts soon factor out the code to read
and parse the data. Rather than just blindly copying the existing
sscanf based code we use a more modern glib version of the parsing
code to make a more general purpose map structure.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
v2
  - s/uint64_t/unsigned long/ for MapInfo structure
  - limit to 6 fields and strip leading spaces
---
 include/qemu/selfmap.h | 44 ++++++++++++++++++++++++
 linux-user/syscall.c   | 58 +++++++++++++++----------------
 util/selfmap.c         | 77 ++++++++++++++++++++++++++++++++++++++++++
 util/Makefile.objs     |  1 +
 4 files changed, 150 insertions(+), 30 deletions(-)
 create mode 100644 include/qemu/selfmap.h
 create mode 100644 util/selfmap.c

diff --git a/include/qemu/selfmap.h b/include/qemu/selfmap.h
new file mode 100644
index 00000000000..302c459d695
--- /dev/null
+++ b/include/qemu/selfmap.h
@@ -0,0 +1,44 @@
+/*
+ * Utility functions to read our own memory map
+ *
+ * Copyright (c) 2020 Linaro Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef _SELFMAP_H_
+#define _SELFMAP_H_
+
+typedef struct {
+    unsigned long start;
+    unsigned long end;
+
+    /* flags */
+    bool is_read;
+    bool is_write;
+    bool is_exec;
+    bool is_priv;
+
+    unsigned long offset;
+    gchar *dev;
+    int   inode;
+    gchar *path;
+} MapInfo;
+
+
+/**
+ * read_self_maps:
+ *
+ * Read /proc/self/maps and return a list of MapInfo structures.
+ */
+GSList *read_self_maps(void);
+
+/**
+ * free_self_maps:
+ * @info: a GSlist
+ *
+ * Free a list of MapInfo structures.
+ */
+void free_self_maps(GSList *info);
+
+#endif /* _SELFMAP_H_ */
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index b679bc6b136..666be20f3ff 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -117,6 +117,7 @@
 
 #include "qemu.h"
 #include "qemu/guest-random.h"
+#include "qemu/selfmap.h"
 #include "user/syscall-trace.h"
 #include "qapi/error.h"
 #include "fd-trans.h"
@@ -7232,45 +7233,45 @@ static int open_self_maps(void *cpu_env, int fd)
 {
     CPUState *cpu = env_cpu((CPUArchState *)cpu_env);
     TaskState *ts = cpu->opaque;
-    FILE *fp;
-    char *line = NULL;
-    size_t len = 0;
-    ssize_t read;
+    GSList *map_info = read_self_maps();
+    GSList *s;
 
-    fp = fopen("/proc/self/maps", "r");
-    if (fp == NULL) {
-        return -1;
-    }
+    for (s = map_info; s; s = g_slist_next(s)) {
+        MapInfo *e = (MapInfo *) s->data;
 
-    while ((read = getline(&line, &len, fp)) != -1) {
-        int fields, dev_maj, dev_min, inode;
-        uint64_t min, max, offset;
-        char flag_r, flag_w, flag_x, flag_p;
-        char path[512] = "";
-        fields = sscanf(line, "%"PRIx64"-%"PRIx64" %c%c%c%c %"PRIx64" %x:%x %d"
-                        " %512s", &min, &max, &flag_r, &flag_w, &flag_x,
-                        &flag_p, &offset, &dev_maj, &dev_min, &inode, path);
-
-        if ((fields < 10) || (fields > 11)) {
-            continue;
-        }
-        if (h2g_valid(min)) {
+        if (h2g_valid(e->start)) {
+            unsigned long min = e->start;
+            unsigned long max = e->end;
             int flags = page_get_flags(h2g(min));
-            max = h2g_valid(max - 1) ? max : (uintptr_t)g2h(GUEST_ADDR_MAX) + 1;
+            const char *path;
+
+            max = h2g_valid(max - 1) ?
+                max : (uintptr_t) g2h(GUEST_ADDR_MAX) + 1;
+
             if (page_check_range(h2g(min), max - min, flags) == -1) {
                 continue;
             }
+
             if (h2g(min) == ts->info->stack_limit) {
-                pstrcpy(path, sizeof(path), "      [stack]");
+                path = "      [stack]";
+            } else {
+                path = e->path;
             }
+
             dprintf(fd, TARGET_ABI_FMT_ptr "-" TARGET_ABI_FMT_ptr
-                    " %c%c%c%c %08" PRIx64 " %02x:%02x %d %s%s\n",
-                    h2g(min), h2g(max - 1) + 1, flag_r, flag_w,
-                    flag_x, flag_p, offset, dev_maj, dev_min, inode,
-                    path[0] ? "         " : "", path);
+                    " %c%c%c%c %08" PRIx64 " %s %d %s%s\n",
+                    h2g(min), h2g(max - 1) + 1,
+                    e->is_read ? 'r' : '-',
+                    e->is_write ? 'w' : '-',
+                    e->is_exec ? 'x' : '-',
+                    e->is_priv ? 'p' : '-',
+                    (uint64_t) e->offset, e->dev, e->inode,
+                    path ? "         " : "", path ? path : "");
         }
     }
 
+    free_self_maps(map_info);
+
 #ifdef TARGET_VSYSCALL_PAGE
     /*
      * We only support execution from the vsyscall page.
@@ -7281,9 +7282,6 @@ static int open_self_maps(void *cpu_env, int fd)
             TARGET_VSYSCALL_PAGE, TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE);
 #endif
 
-    free(line);
-    fclose(fp);
-
     return 0;
 }
 
diff --git a/util/selfmap.c b/util/selfmap.c
new file mode 100644
index 00000000000..15d0acdb437
--- /dev/null
+++ b/util/selfmap.c
@@ -0,0 +1,77 @@
+/*
+ * Utility function to get QEMU's own process map
+ *
+ * Copyright (c) 2020 Linaro Ltd
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "qemu/cutils.h"
+#include "qemu/selfmap.h"
+
+GSList *read_self_maps(void)
+{
+    gchar *maps;
+    GSList *map_info = NULL;
+
+    if (g_file_get_contents("/proc/self/maps", &maps, NULL, NULL)) {
+        gchar **lines = g_strsplit(maps, "\n", 0);
+        int i, entries = g_strv_length(lines);
+
+        for (i = 0; i < entries; i++) {
+            gchar **fields = g_strsplit(lines[i], " ", 6);
+            if (g_strv_length(fields) > 4) {
+                MapInfo *e = g_new0(MapInfo, 1);
+                int errors;
+                const char *end;
+
+                errors  = qemu_strtoul(fields[0], &end, 16, &e->start);
+                errors += qemu_strtoul(end + 1, NULL, 16, &e->end);
+
+                e->is_read  = fields[1][0] == 'r' ? true : false;
+                e->is_write = fields[1][1] == 'w' ? true : false;
+                e->is_exec  = fields[1][2] == 'x' ? true : false;
+                e->is_priv  = fields[1][3] == 'p' ? true : false;
+
+                errors += qemu_strtoul(fields[2], NULL, 16, &e->offset);
+                e->dev = g_strdup(fields[3]);
+                errors += qemu_strtoi(fields[4], NULL, 10, &e->inode);
+
+                /*
+                 * The last field may have leading spaces which we
+                 * need to strip.
+                 */
+                if (g_strv_length(fields) == 6) {
+                    e->path = g_strdup(g_strchug(fields[5]));
+                }
+                map_info = g_slist_prepend(map_info, e);
+            }
+
+            g_strfreev(fields);
+        }
+        g_strfreev(lines);
+        g_free(maps);
+    }
+
+    /* ensure the map data is in the same order we collected it */
+    return g_slist_reverse(map_info);
+}
+
+/**
+ * free_self_maps:
+ * @info: a GSlist
+ *
+ * Free a list of MapInfo structures.
+ */
+static void free_info(gpointer data)
+{
+    MapInfo *e = (MapInfo *) data;
+    g_free(e->dev);
+    g_free(e->path);
+}
+
+void free_self_maps(GSList *info)
+{
+    g_slist_free_full(info, &free_info);
+}
diff --git a/util/Makefile.objs b/util/Makefile.objs
index 6718a38b616..fe339c2636b 100644
--- a/util/Makefile.objs
+++ b/util/Makefile.objs
@@ -63,3 +63,4 @@ util-obj-y += guest-random.o
 util-obj-$(CONFIG_GIO) += dbus.o
 dbus.o-cflags = $(GIO_CFLAGS)
 dbus.o-libs = $(GIO_LIBS)
+util-obj-$(CONFIG_USER_ONLY) += selfmap.o
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 09/12] linux-user: clean-up padding on /proc/self/maps
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (7 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 08/12] linux-user: factor out reading of /proc/self/maps Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 10/12] target/arm: don't expose "ieee_half" via gdbstub Alex Bennée
                   ` (2 subsequent siblings)
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Riku Voipio, Alex Bennée, Laurent Vivier

Don't use magic spaces, calculate the justification for the file
field like the kernel does with seq_pad.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

---
v2
  - change for unsigned long update
---
 linux-user/syscall.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 666be20f3ff..8a610b91402 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -7235,6 +7235,7 @@ static int open_self_maps(void *cpu_env, int fd)
     TaskState *ts = cpu->opaque;
     GSList *map_info = read_self_maps();
     GSList *s;
+    int count;
 
     for (s = map_info; s; s = g_slist_next(s)) {
         MapInfo *e = (MapInfo *) s->data;
@@ -7253,20 +7254,24 @@ static int open_self_maps(void *cpu_env, int fd)
             }
 
             if (h2g(min) == ts->info->stack_limit) {
-                path = "      [stack]";
+                path = "[stack]";
             } else {
                 path = e->path;
             }
 
-            dprintf(fd, TARGET_ABI_FMT_ptr "-" TARGET_ABI_FMT_ptr
-                    " %c%c%c%c %08" PRIx64 " %s %d %s%s\n",
-                    h2g(min), h2g(max - 1) + 1,
-                    e->is_read ? 'r' : '-',
-                    e->is_write ? 'w' : '-',
-                    e->is_exec ? 'x' : '-',
-                    e->is_priv ? 'p' : '-',
-                    (uint64_t) e->offset, e->dev, e->inode,
-                    path ? "         " : "", path ? path : "");
+            count = dprintf(fd, TARGET_ABI_FMT_ptr "-" TARGET_ABI_FMT_ptr
+                            " %c%c%c%c %08" PRIx64 " %s %d",
+                            h2g(min), h2g(max - 1) + 1,
+                            e->is_read ? 'r' : '-',
+                            e->is_write ? 'w' : '-',
+                            e->is_exec ? 'x' : '-',
+                            e->is_priv ? 'p' : '-',
+                            (uint64_t) e->offset, e->dev, e->inode);
+            if (path) {
+                dprintf(fd, "%*s%s\n", 73 - count, "", path);
+            } else {
+                dprintf(fd, "\n");
+            }
         }
     }
 
@@ -7277,9 +7282,10 @@ static int open_self_maps(void *cpu_env, int fd)
      * We only support execution from the vsyscall page.
      * This is as if CONFIG_LEGACY_VSYSCALL_XONLY=y from v5.3.
      */
-    dprintf(fd, TARGET_FMT_lx "-" TARGET_FMT_lx
-            " --xp 00000000 00:00 0 [vsyscall]\n",
-            TARGET_VSYSCALL_PAGE, TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE);
+    count = dprintf(fd, TARGET_FMT_lx "-" TARGET_FMT_lx
+                    " --xp 00000000 00:00 0",
+                    TARGET_VSYSCALL_PAGE, TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE);
+    dprintf(fd, "%*s%s\n", 73 - count, "",  "[vsyscall]");
 #endif
 
     return 0;
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 10/12] target/arm: don't expose "ieee_half" via gdbstub
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (8 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 09/12] linux-user: clean-up padding on /proc/self/maps Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 11/12] hw/core: properly terminate loading .hex on EOF record Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 12/12] configure: Add -Werror to PIE probe Alex Bennée
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, open list:ARM TCG CPUs, Alex Bennée,
	Peter Maydell

While support for parsing ieee_half in the XML description was added
to gdb in 2019 (a6d0f249) there is no easy way for the gdbstub to know
if the gdb end will understand it. Disable it for now and allow older
gdbs to successfully connect to the default -cpu max SVE enabled
QEMUs.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
---
 target/arm/gdbstub.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/target/arm/gdbstub.c b/target/arm/gdbstub.c
index d9ef7d2187c..8efc535f2a0 100644
--- a/target/arm/gdbstub.c
+++ b/target/arm/gdbstub.c
@@ -192,7 +192,12 @@ static const struct TypeSize vec_lanes[] = {
     /* 16 bit */
     { "uint16", 16, 'h', 'u' },
     { "int16", 16, 'h', 's' },
-    { "ieee_half", 16, 'h', 'f' },
+    /*
+     * TODO: currently there is no reliable way of telling
+     * if the remote gdb actually understands ieee_half so
+     * we don't expose it in the target description for now.
+     * { "ieee_half", 16, 'h', 'f' },
+     */
     /* bytes */
     { "uint8", 8, 'b', 'u' },
     { "int8", 8, 'b', 's' },
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH v3 11/12] hw/core: properly terminate loading .hex on EOF record
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (9 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 10/12] target/arm: don't expose "ieee_half" via gdbstub Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-03 19:11 ` [PATCH v3 12/12] configure: Add -Werror to PIE probe Alex Bennée
  11 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel
  Cc: Richard Henderson, Alex Bennée, Stefan Hajnoczi,
	Philippe Mathieu-Daudé

The https://makecode.microbit.org/#editor generates slightly weird
.hex files which work fine on a real microbit but causes QEMU to
choke. The reason is extraneous data after the EOF record which causes
the loader to attempt to write a bigger file than it should to the
"rom". According to the HEX file spec an EOF really should be the last
thing we process so lets do that.

Reported-by: Ursula Bennée <alex.bennee@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
 hw/core/loader.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/core/loader.c b/hw/core/loader.c
index eeef6da9a1b..8bbb1797a4c 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -1447,6 +1447,7 @@ typedef struct {
     uint32_t current_rom_index;
     uint32_t rom_start_address;
     AddressSpace *as;
+    bool complete;
 } HexParser;
 
 /* return size or -1 if error */
@@ -1484,6 +1485,7 @@ static int handle_record_type(HexParser *parser)
                                   parser->current_rom_index,
                                   parser->rom_start_address, parser->as);
         }
+        parser->complete = true;
         return parser->total_size;
     case EXT_SEG_ADDR_RECORD:
     case EXT_LINEAR_ADDR_RECORD:
@@ -1548,11 +1550,12 @@ static int parse_hex_blob(const char *filename, hwaddr *addr, uint8_t *hex_blob,
         .bin_buf = g_malloc(hex_blob_size),
         .start_addr = addr,
         .as = as,
+        .complete = false
     };
 
     rom_transaction_begin();
 
-    for (; hex_blob < end; ++hex_blob) {
+    for (; hex_blob < end && !parser.complete; ++hex_blob) {
         switch (*hex_blob) {
         case '\r':
         case '\n':
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH  v3 12/12] configure: Add -Werror to PIE probe
  2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
                   ` (10 preceding siblings ...)
  2020-04-03 19:11 ` [PATCH v3 11/12] hw/core: properly terminate loading .hex on EOF record Alex Bennée
@ 2020-04-03 19:11 ` Alex Bennée
  2020-04-06 21:32   ` Philippe Mathieu-Daudé
  11 siblings, 1 reply; 18+ messages in thread
From: Alex Bennée @ 2020-04-03 19:11 UTC (permalink / raw)
  To: qemu-devel; +Cc: Alex Bennée, Richard Henderson

From: Richard Henderson <richard.henderson@linaro.org>

Without -Werror, the probe may succeed, but then compilation fails
later when -Werror is added for other reasons.  Shows up on windows,
where the compiler complains about -fPIC.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
Message-Id: <20200401214756.6559-1-richard.henderson@linaro.org>
---
 configure | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index 22870f38672..233c671aaa9 100755
--- a/configure
+++ b/configure
@@ -2119,7 +2119,7 @@ if compile_prog "-Werror -fno-pie" "-no-pie"; then
 fi
 
 if test "$static" = "yes"; then
-  if test "$pie" != "no" && compile_prog "-fPIE -DPIE" "-static-pie"; then
+  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
     QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
     pie="yes"
@@ -2132,7 +2132,7 @@ if test "$static" = "yes"; then
 elif test "$pie" = "no"; then
   QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
   QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
-elif compile_prog "-fPIE -DPIE" "-pie"; then
+elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
   QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
   QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
   pie="yes"
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 04/12] linux-user: more debug for init_guest_space
  2020-04-03 19:11 ` [PATCH v3 04/12] linux-user: more debug for init_guest_space Alex Bennée
@ 2020-04-03 20:39   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-04-03 20:39 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel; +Cc: Riku Voipio, Laurent Vivier

On 4/3/20 9:11 PM, Alex Bennée wrote:
> Searching for memory space can cause problems so lets extend the
> CPU_LOG_PAGE output so you can watch init_guest_space fail to
> allocate memory. A more involved fix is actually required to make this
> function play nicely with the large guard pages the sanitiser likes to

TIL "in an effort to differentiate British English from American, many 
British publishers have begun giving -ise endings even to words that 
have always been spelled -ize."

https://grammarist.com/spelling/sanitise-sanitize/

> use.
> 
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Reviewed-by: Laurent Vivier <laurent@vivier.eu>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>   linux-user/elfload.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index 8198be04460..619c054cc48 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -2172,6 +2172,8 @@ unsigned long init_guest_space(unsigned long host_start,
>   
>           /* Check to see if the address is valid.  */
>           if (host_start && real_start != current_start) {
> +            qemu_log_mask(CPU_LOG_PAGE, "invalid %lx && %lx != %lx\n",
> +                          host_start, real_start, current_start);
>               goto try_again;
>           }
>   
> @@ -2240,7 +2242,11 @@ unsigned long init_guest_space(unsigned long host_start,
>            * probably a bad strategy if not, which means we got here
>            * because of trouble with ARM commpage setup.
>            */
> -        munmap((void *)real_start, real_size);
> +        if (munmap((void *)real_start, real_size) != 0) {
> +            error_report("%s: failed to unmap %lx:%lx (%s)", __func__,
> +                         real_start, real_size, strerror(errno));
> +            abort();
> +        }
>           current_start += align;
>           if (host_start == current_start) {
>               /* Theoretically possible if host doesn't have any suitably
> 



^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 08/12] linux-user: factor out reading of /proc/self/maps
  2020-04-03 19:11 ` [PATCH v3 08/12] linux-user: factor out reading of /proc/self/maps Alex Bennée
@ 2020-04-04  0:33   ` Richard Henderson
  2020-04-06  9:09     ` Alex Bennée
  0 siblings, 1 reply; 18+ messages in thread
From: Richard Henderson @ 2020-04-04  0:33 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel; +Cc: Riku Voipio, Laurent Vivier

On 4/3/20 12:11 PM, Alex Bennée wrote:
> +                e->is_read  = fields[1][0] == 'r' ? true : false;
> +                e->is_write = fields[1][1] == 'w' ? true : false;
> +                e->is_exec  = fields[1][2] == 'x' ? true : false;
> +                e->is_priv  = fields[1][3] == 'p' ? true : false;

Drop the redundant ? true : false.  That is of course the result of the boolean
operation.

> +                errors += qemu_strtoi(fields[4], NULL, 10, &e->inode);

The root of the typedef chain for ino_t is

/usr/include/asm-generic/posix_types.h:typedef __kernel_ulong_t __kernel_ino_t;

so I think you should just go ahead and use unsigned long here too.  Or maybe
even uint64_t, because 32-bit has ino64_t, and could in fact have a Large
Number here.


r~


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 08/12] linux-user: factor out reading of /proc/self/maps
  2020-04-04  0:33   ` Richard Henderson
@ 2020-04-06  9:09     ` Alex Bennée
  0 siblings, 0 replies; 18+ messages in thread
From: Alex Bennée @ 2020-04-06  9:09 UTC (permalink / raw)
  To: Richard Henderson; +Cc: Riku Voipio, qemu-devel, Laurent Vivier


Richard Henderson <richard.henderson@linaro.org> writes:

> On 4/3/20 12:11 PM, Alex Bennée wrote:
>> +                e->is_read  = fields[1][0] == 'r' ? true : false;
>> +                e->is_write = fields[1][1] == 'w' ? true : false;
>> +                e->is_exec  = fields[1][2] == 'x' ? true : false;
>> +                e->is_priv  = fields[1][3] == 'p' ? true : false;
>
> Drop the redundant ? true : false.  That is of course the result of the boolean
> operation.

doh! Fortunately the compiler was smart enough to see through my idiocy...

>
>> +                errors += qemu_strtoi(fields[4], NULL, 10, &e->inode);
>
> The root of the typedef chain for ino_t is
>
> /usr/include/asm-generic/posix_types.h:typedef __kernel_ulong_t __kernel_ino_t;
>
> so I think you should just go ahead and use unsigned long here too.  Or maybe
> even uint64_t, because 32-bit has ino64_t, and could in fact have a Large
> Number here.

Will fix.

>
>
> r~


-- 
Alex Bennée


^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH  v3 06/12] gdbstub: fix compiler complaining
  2020-04-03 19:11 ` [PATCH v3 06/12] gdbstub: fix compiler complaining Alex Bennée
@ 2020-04-06 10:21   ` Chenqun (kuhn)
  0 siblings, 0 replies; 18+ messages in thread
From: Chenqun (kuhn) @ 2020-04-06 10:21 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel
  Cc: Philippe Mathieu-Daudé,
	Denis Plotnikov, Richard Henderson, Euler Robot

>-----Original Message-----
>From: Alex Bennée [mailto:alex.bennee@linaro.org]
>Sent: Saturday, April 4, 2020 3:12 AM
>To: qemu-devel@nongnu.org
>Cc: Denis Plotnikov <dplotnikov@virtuozzo.com>; Euler Robot
><euler.robot@huawei.com>; Chenqun (kuhn) <kuhn.chenqun@huawei.com>;
>Richard Henderson <richard.henderson@linaro.org>; Alex Bennée
><alex.bennee@linaro.org>; Philippe Mathieu-Daudé <philmd@redhat.com>
>Subject: [PATCH v3 06/12] gdbstub: fix compiler complaining
>
>From: Denis Plotnikov <dplotnikov@virtuozzo.com>
>
>    ./gdbstub.c: In function ‘handle_query_thread_extra’:
>        /usr/include/glib-2.0/glib/glib-autocleanups.h:28:10:
>    error: ‘cpu_name’ may be used uninitialized in this function
>    [-Werror=maybe-uninitialized]
>        g_free (*pp);
>               ^
>    ./gdbstub.c:2063:26: note: ‘cpu_name’ was declared here
>        g_autofree char *cpu_name;
>                         ^
>    cc1: all warnings being treated as errors
>
>Signed-off-by: Denis Plotnikov <dplotnikov@virtuozzo.com>
>Message-Id: <20200326151407.25046-1-dplotnikov@virtuozzo.com>
>Reported-by: Euler Robot <euler.robot@huawei.com>
>Reported-by: Chen Qun <kuhn.chenqun@huawei.com>
>Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
>Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
>---
Add Miroslav Rezanina's  "Reviewed-by" tag.
https://lists.gnu.org/archive/html/qemu-devel/2020-03/msg07651.html

Reviewed-by: Miroslav Rezanina <mrezanin@redhat.com>

Thanks.
> gdbstub.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/gdbstub.c b/gdbstub.c
>index 013fb1ac0f1..171e1509509 100644
>--- a/gdbstub.c
>+++ b/gdbstub.c
>@@ -2060,8 +2060,8 @@ static void
>handle_query_thread_extra(GdbCmdContext *gdb_ctx, void *user_ctx)
>         /* Print the CPU model and name in multiprocess mode */
>         ObjectClass *oc = object_get_class(OBJECT(cpu));
>         const char *cpu_model = object_class_get_name(oc);
>-        g_autofree char *cpu_name;
>-        cpu_name  = object_get_canonical_path_component(OBJECT(cpu));
>+        g_autofree char *cpu_name =
>+            object_get_canonical_path_component(OBJECT(cpu));
>         g_string_printf(rs, "%s %s [%s]", cpu_model, cpu_name,
>                         cpu->halted ? "halted " : "running");
>     } else {
>--
>2.20.1


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v3 12/12] configure: Add -Werror to PIE probe
  2020-04-03 19:11 ` [PATCH v3 12/12] configure: Add -Werror to PIE probe Alex Bennée
@ 2020-04-06 21:32   ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 18+ messages in thread
From: Philippe Mathieu-Daudé @ 2020-04-06 21:32 UTC (permalink / raw)
  To: Alex Bennée, qemu-devel; +Cc: Richard Henderson

On 4/3/20 9:11 PM, Alex Bennée wrote:
> From: Richard Henderson <richard.henderson@linaro.org>
> 
> Without -Werror, the probe may succeed, but then compilation fails
> later when -Werror is added for other reasons.  Shows up on windows,
> where the compiler complains about -fPIC.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Message-Id: <20200401214756.6559-1-richard.henderson@linaro.org>

Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Tested-by: Philippe Mathieu-Daudé <philmd@redhat.com>

> ---
>   configure | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/configure b/configure
> index 22870f38672..233c671aaa9 100755
> --- a/configure
> +++ b/configure
> @@ -2119,7 +2119,7 @@ if compile_prog "-Werror -fno-pie" "-no-pie"; then
>   fi
>   
>   if test "$static" = "yes"; then
> -  if test "$pie" != "no" && compile_prog "-fPIE -DPIE" "-static-pie"; then
> +  if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
>       QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
>       QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
>       pie="yes"
> @@ -2132,7 +2132,7 @@ if test "$static" = "yes"; then
>   elif test "$pie" = "no"; then
>     QEMU_CFLAGS="$CFLAGS_NOPIE $QEMU_CFLAGS"
>     QEMU_LDFLAGS="$LDFLAGS_NOPIE $QEMU_LDFLAGS"
> -elif compile_prog "-fPIE -DPIE" "-pie"; then
> +elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
>     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
>     QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
>     pie="yes"
> 



^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-04-06 21:33 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-03 19:11 [PATCH v3 for 5.0-rc2 00/12] a selection of random fixes Alex Bennée
2020-04-03 19:11 ` [PATCH v3 01/12] elf-ops: bail out if we have no function symbols Alex Bennée
2020-04-03 19:11 ` [PATCH v3 02/12] linux-user: protect fcntl64 with an #ifdef Alex Bennée
2020-04-03 19:11 ` [PATCH v3 03/12] tests/tcg: remove extraneous pasting macros Alex Bennée
2020-04-03 19:11 ` [PATCH v3 04/12] linux-user: more debug for init_guest_space Alex Bennée
2020-04-03 20:39   ` Philippe Mathieu-Daudé
2020-04-03 19:11 ` [PATCH v3 05/12] target/xtensa: add FIXME for translation memory leak Alex Bennée
2020-04-03 19:11 ` [PATCH v3 06/12] gdbstub: fix compiler complaining Alex Bennée
2020-04-06 10:21   ` Chenqun (kuhn)
2020-04-03 19:11 ` [PATCH v3 07/12] softfloat: Fix BAD_SHIFT from normalizeFloatx80Subnormal Alex Bennée
2020-04-03 19:11 ` [PATCH v3 08/12] linux-user: factor out reading of /proc/self/maps Alex Bennée
2020-04-04  0:33   ` Richard Henderson
2020-04-06  9:09     ` Alex Bennée
2020-04-03 19:11 ` [PATCH v3 09/12] linux-user: clean-up padding on /proc/self/maps Alex Bennée
2020-04-03 19:11 ` [PATCH v3 10/12] target/arm: don't expose "ieee_half" via gdbstub Alex Bennée
2020-04-03 19:11 ` [PATCH v3 11/12] hw/core: properly terminate loading .hex on EOF record Alex Bennée
2020-04-03 19:11 ` [PATCH v3 12/12] configure: Add -Werror to PIE probe Alex Bennée
2020-04-06 21:32   ` Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).