All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Vivier <Laurent@vivier.eu>
To: qemu-devel@nongnu.org
Cc: Riku Voipio <riku.voipio@iki.fi>
Subject: Re: [Qemu-devel] [PATCH] linux-user: correctly align types in thunking code
Date: Wed, 02 Jan 2013 00:08:36 +0100	[thread overview]
Message-ID: <1357081716.31530.6.camel@Quad> (raw)
In-Reply-To: <1356036920-19326-1-git-send-email-laurent@vivier.eu>

Ping !

Le jeudi 20 décembre 2012 à 21:55 +0100, Laurent Vivier a écrit :
> This is a follow up
> of patch:
> 
>         commit c2e3dee6e03527baf8698698cce76b1a3174969a
>         Author: Laurent Vivier <laurent@vivier.eu>
>         Date:   Sun Feb 13 23:37:34 2011 +0100
> 
>             linux-user: Define target alignment size
> 
> In my case m68k aligns "int" on 2 not 4. You can check this with the
> following program:
> 
> int main(void)
> {
>         struct rtentry rt;
>         printf("rt_pad1 %ld %zd\n", offsetof(struct rtentry, rt_pad1),
>                 sizeof(rt.rt_pad1));
>         printf("rt_dst %ld %zd\n", offsetof(struct rtentry, rt_dst),
>                 sizeof(rt.rt_dst));
>         printf("rt_gateway %ld %zd\n", offsetof(struct rtentry, rt_gateway),
>                 sizeof(rt.rt_gateway));
>         printf("rt_genmask %ld %zd\n", offsetof(struct rtentry, rt_genmask),
>                 sizeof(rt.rt_genmask));
>         printf("rt_flags %ld %zd\n", offsetof(struct rtentry, rt_flags),
>                 sizeof(rt.rt_flags));
>         printf("rt_pad2 %ld %zd\n", offsetof(struct rtentry, rt_pad2),
>                 sizeof(rt.rt_pad2));
>         printf("rt_pad3 %ld %zd\n", offsetof(struct rtentry, rt_pad3),
>                 sizeof(rt.rt_pad3));
>         printf("rt_pad4 %ld %zd\n", offsetof(struct rtentry, rt_pad4),
>                 sizeof(rt.rt_pad4));
>         printf("rt_metric %ld %zd\n", offsetof(struct rtentry, rt_metric),
>                 sizeof(rt.rt_metric));
>         printf("rt_dev %ld %zd\n", offsetof(struct rtentry, rt_dev),
>                 sizeof(rt.rt_dev));
>         printf("rt_mtu %ld %zd\n", offsetof(struct rtentry, rt_mtu),
>                 sizeof(rt.rt_mtu));
>         printf("rt_window %ld %zd\n", offsetof(struct rtentry, rt_window),
>                 sizeof(rt.rt_window));
>         printf("rt_irtt %ld %zd\n", offsetof(struct rtentry, rt_irtt),
>                 sizeof(rt.rt_irtt));
> }
> 
> And result is :
> 
> i386
> 
> rt_pad1 0 4
> rt_dst 4 16
> rt_gateway 20 16
> rt_genmask 36 16
> rt_flags 52 2
> rt_pad2 54 2
> rt_pad3 56 4
> rt_pad4 62 2
> rt_metric 64 2
> rt_dev 68 4
> rt_mtu 72 4
> rt_window 76 4
> rt_irtt 80 2
> 
> m68k
> 
> rt_pad1 0 4
> rt_dst 4 16
> rt_gateway 20 16
> rt_genmask 36 16
> rt_flags 52 2
> rt_pad2 54 2
> rt_pad3 56 4
> rt_pad4 62 2
> rt_metric 64 2
> rt_dev 66 4
> rt_mtu 70 4
> rt_window 74 4
> rt_irtt 78 2
> 
> This affects the "route" command :
> 
> WITHOUT this patch:
> 
> $ sudo route add -net default gw 10.0.3.1 window 1024 irtt 2 eth0
> $ netstat -nr
> Kernel IP routing table
> Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
> 0.0.0.0         10.0.3.1        0.0.0.0         UG        0 67108866  32768 eth0
> 10.0.3.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
> 
> WITH this patch:
> 
> $ sudo route add -net default gw 10.0.3.1 window 1024 irtt 2 eth0
> $ netstat -nr
> Kernel IP routing table
> Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
> 0.0.0.0         10.0.3.1        0.0.0.0         UG        0 1024       2 eth0
> 10.0.3.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
> 
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> ---
>  include/exec/user/thunk.h |   22 +++++++++++++++++-----
>  1 file changed, 17 insertions(+), 5 deletions(-)
> 
> diff --git a/include/exec/user/thunk.h b/include/exec/user/thunk.h
> index 87025c3..d3e9f3d 100644
> --- a/include/exec/user/thunk.h
> +++ b/include/exec/user/thunk.h
> @@ -151,20 +151,32 @@ static inline int thunk_type_align(const argtype *type_ptr, int is_host)
>      case TYPE_CHAR:
>          return 1;
>      case TYPE_SHORT:
> -        return 2;
> +        if (is_host) {
> +            return __alignof__(short);
> +        } else {
> +            return TARGET_SHORT_ALIGNMENT;
> +        }
>      case TYPE_INT:
> -        return 4;
> +        if (is_host) {
> +            return __alignof__(int);
> +        } else {
> +            return TARGET_INT_ALIGNMENT;
> +        }
>      case TYPE_LONGLONG:
>      case TYPE_ULONGLONG:
> -        return 8;
> +        if (is_host) {
> +            return __alignof__(long long);
> +        } else {
> +            return TARGET_LLONG_ALIGNMENT;
> +        }
>      case TYPE_LONG:
>      case TYPE_ULONG:
>      case TYPE_PTRVOID:
>      case TYPE_PTR:
>          if (is_host) {
> -            return sizeof(void *);
> +            return __alignof__(long);
>          } else {
> -            return TARGET_ABI_BITS / 8;
> +            return TARGET_LONG_ALIGNMENT;
>          }
>          break;
>      case TYPE_OLDDEVT:

-- 
"Just play. Have fun. Enjoy the game."
- Michael Jordan
"Just play. Have fun. Enjoy the game."
- Michael Jordan

  reply	other threads:[~2013-01-01 23:08 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-12-20 20:55 [Qemu-devel] [PATCH] linux-user: correctly align types in thunking code Laurent Vivier
2013-01-01 23:08 ` Laurent Vivier [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-05-10 20:59 Laurent Vivier
2018-05-11 10:43 ` Peter Maydell
2012-12-08 15:18 Laurent Vivier
2012-12-08 16:40 ` Peter Maydell
2012-12-08 17:10   ` Laurent Vivier
2012-12-08 16:55 ` Andreas Färber
2012-12-08 17:13   ` Laurent Vivier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1357081716.31530.6.camel@Quad \
    --to=laurent@vivier.eu \
    --cc=qemu-devel@nongnu.org \
    --cc=riku.voipio@iki.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.