On Thu, Feb 02, 2017 at 04:25:34PM +0000, Peter Maydell wrote: > On 2 February 2017 at 13:56, Peter Maydell <peter.mayd...@linaro.org> wrote: > > On 31 January 2017 at 20:18, Michael S. Tsirkin <m...@redhat.com> wrote: > >> virtio, vhost, pci: fixes, features > >> > >> generic pci root port support > >> disable shpc by default > >> safer version of ARRAY_SIZE and QEMU_BUILD_BUG_ON > >> fixes and cleanups all over the place > >> > >> Signed-off-by: Michael S. Tsirkin <m...@redhat.com> > > > Applied, thanks. > > ...travis builds now fail for the --enable-tcg-interpreter config: > https://travis-ci.org/qemu/qemu/jobs/197648661 > > In file included from /home/travis/build/qemu/qemu/tcg/tcg.c:255:0: > /home/travis/build/qemu/qemu/tcg/tci/tcg-target.inc.c: In function > ‘tcg_out_op’: > /home/travis/build/qemu/qemu/tcg/tci/tcg-target.inc.c:569:117: error: > negative width in bit-field ‘<anonymous>’ > /home/travis/build/qemu/qemu/tcg/tci/tcg-target.inc.c:569:255: error: > negative width in bit-field ‘<anonymous>’ > In file included from /home/travis/build/qemu/qemu/tcg/tcg.c:255:0: > /home/travis/build/qemu/qemu/tcg/tci/tcg-target.inc.c:578:115: error: > negative width in bit-field ‘<anonymous>’ > /home/travis/build/qemu/qemu/tcg/tci/tcg-target.inc.c:578:255: error: > negative width in bit-field ‘<anonymous>’ > > These look to be because we were trying to use ARRAY_SIZE() > on a non-array, which was previously undetected. The use is > only in an assert() so fairly harmless. > > Would somebody who cares about TCI like to provide a fix? > > thanks > -- PMM
I think the following should do it. Completely untested. --> tcg/tci: fix ARRAY_SIZE misuse tb_jmp_insn_offset and tb_jmp_reset_offset are pointers, not arrays, so using ARRAY_SIZE on them will not do the right thing. They point to arrays within TranslationBlock so check the size of these instead. Signed-off-by: Michael S. Tsirkin <m...@redhat.com> -- diff --git a/tcg/tci/tcg-target.inc.c b/tcg/tci/tcg-target.inc.c index 26ee9b1..a2ba654 100644 --- a/tcg/tci/tcg-target.inc.c +++ b/tcg/tci/tcg-target.inc.c @@ -556,6 +556,7 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args, const int *const_args) { uint8_t *old_code_ptr = s->code_ptr; + TranslationBlock *tb; tcg_out_op_t(s, opc); @@ -566,7 +567,7 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args, case INDEX_op_goto_tb: if (s->tb_jmp_insn_offset) { /* Direct jump method. */ - tcg_debug_assert(args[0] < ARRAY_SIZE(s->tb_jmp_insn_offset)); + tcg_debug_assert(args[0] < ARRAY_SIZE(tb->jmp_insn_offset)); /* Align for atomic patching and thread safety */ s->code_ptr = QEMU_ALIGN_PTR_UP(s->code_ptr, 4); s->tb_jmp_insn_offset[args[0]] = tcg_current_code_size(s); @@ -575,7 +576,7 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, const TCGArg *args, /* Indirect jump method. */ TODO(); } - tcg_debug_assert(args[0] < ARRAY_SIZE(s->tb_jmp_reset_offset)); + tcg_debug_assert(args[0] < ARRAY_SIZE(tb->jmp_reset_offset)); s->tb_jmp_reset_offset[args[0]] = tcg_current_code_size(s); break; case INDEX_op_br: