[Spice-devel] [PATCH spice-server 2/3] Remove a warning on MIPS machine

Frediano Ziglio fziglio at redhat.com
Tue Jun 18 17:03:24 UTC 2019


> 
> > 
> > On 6/3/19 2:22 PM, Frediano Ziglio wrote:
> > > The formula is here to make sure glyph is aligned to 4 bytes so
> > > tell to the compiler to avoid a warning.
> > 
> > What's the warning ?
> 
> Trying to reproduce but the updated environment it's slow like
> hell (it's more than 30 minutes that it's compiling 3 files).
> 

The warning is

red-parse-qxl.c: In function ‘red_get_string’:
red-parse-qxl.c:949:17: error: cast increases required alignment of target type [-Werror=cast-align]
         glyph = (SpiceRasterGlyph*)
                 ^


> > Is it that the pointer may be unaligned (which is imposible
> > if you start from an aligned address) ?
> > 
> 
> Yes, was an alignment warning
> 
> > Looks complicated to me, especially since after the
> > SPICE_ALIGNED_CAST there is another (the "real") cast.
> > 
> 
> Maybe with an additional
> 
> @@ -941,7 +941,7 @@ static SpiceString *red_get_string(RedMemSlotInfo *slots,
> int group_id,
>          spice_assert(glyph_size <= (char*) end - (char*) &start->data[0]);
>          memcpy(glyph->data, start->data, glyph_size);
>          start = (QXLRasterGlyph*)(&start->data[glyph_size]);
> -        glyph = (SpiceRasterGlyph*) SPICE_ALIGNED_CAST(uint32_t*,
> +        glyph = SPICE_ALIGNED_CAST(SpiceRasterGlyph*,
>              (((uint8_t *)glyph) +
>               SPICE_ALIGN(sizeof(SpiceRasterGlyph) + glyph_size, 4)));
>      }
> 
> 
> would work too. Not sure how long it's going to take to test it.
> 

This works too.

> > On the other hand it doesn't break anything.
> > 
> > > 
> > > Signed-off-by: Frediano Ziglio <fziglio at redhat.com>
> > 
> > Ack.
> > 
> > > ---
> > >   server/red-parse-qxl.c | 4 ++--
> > >   1 file changed, 2 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/server/red-parse-qxl.c b/server/red-parse-qxl.c
> > > index afae94316..89b61c06f 100644
> > > --- a/server/red-parse-qxl.c
> > > +++ b/server/red-parse-qxl.c
> > > @@ -941,9 +941,9 @@ static SpiceString *red_get_string(RedMemSlotInfo
> > > *slots, int group_id,
> > >           spice_assert(glyph_size <= (char*) end - (char*)
> > >           &start->data[0]);
> > >           memcpy(glyph->data, start->data, glyph_size);
> > >           start = (QXLRasterGlyph*)(&start->data[glyph_size]);
> > > -        glyph = (SpiceRasterGlyph*)
> > > +        glyph = (SpiceRasterGlyph*) SPICE_ALIGNED_CAST(uint32_t*,
> > >               (((uint8_t *)glyph) +
> > > -             SPICE_ALIGN(sizeof(SpiceRasterGlyph) + glyph_size, 4));
> > > +             SPICE_ALIGN(sizeof(SpiceRasterGlyph) + glyph_size, 4)));
> > >       }
> > >   
> > >       if (free_data) {
> > > 
> > 
> > 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel


More information about the Spice-devel mailing list