All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Campbell <Ian.Campbell@citrix.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: "Keir (Xen.org)" <keir@xen.org>,
	Stefano Stabellini <Stefano.Stabellini@eu.citrix.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	"Tim (Xen.org)" <tim@xen.org>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>,
	Julien Grall <julien.grall@citrix.com>
Subject: Re: [PATCH 4/4] xen/arm: correctly handle an empty array of platform descs.
Date: Tue, 14 May 2013 11:21:20 +0100	[thread overview]
Message-ID: <1368526880.14264.29.camel@zakaz.uk.xensource.com> (raw)
In-Reply-To: <5192248402000078000D5E7F@nat28.tlf.novell.com>

On Tue, 2013-05-14 at 10:48 +0100, Jan Beulich wrote:
> >>> On 14.05.13 at 11:32, Ian Campbell <Ian.Campbell@citrix.com> wrote:
> > Sadly this turns out to be a bit more complicated :-( CCing Jan and Keir
> > since this was wider implications (this construct is used elsewhere) and
> > Ian J because he pointed this out.
> > 
> > TL;DR: There is probably a problem here, but I'm not sure it is one
> > worth worrying about, at least not yet/for 4.3.
> > 
> > The problem is that the compiler is allowed to assume that:
> >         extern const struct platform_desc _splatform[], _eplatform[];
> > Defines two *distinct* arrays, which therefore can never be equal. Hence
> > it optimises 
> >     for ( platform = _splatform; platform != _eplatform; platform++ )
> > with the assumption that there must always be at least one iteration.
> 
> Did you actually observe gcc doing this?

Yes, leading to an infinite loop.

With my "fixed" version (with the <) it just did one needless iteration
of whatever happened to be at _splatform =_eplatform, which luckily was
accessible data. It happens to be the device data (which likely suffers
the same issue).

I've also semi-confirmed by staring at the disassembly...

>  I agree that the abstract
> C specification allows for such an assumption, but with the gcc
> itself providing ways to create symbols aliases I would be pretty
> surprised if it actually then produces broken code here.
> 
> > FWIW this seems to work:
> >     for ( platform = &_splatform[0]; platform < &_eplatform[0]; platform++ )
> > But I'm not sure it is strictly any less undefined than the original
> > code and it might just be obscuring things enough that today's optimiser
> > misses a trick.
> 
> This surely is as (un)defined as the original code.

As I suspected!

Ian.

  reply	other threads:[~2013-05-14 10:21 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-13 16:22 [PATCH 0/4] xen/arm: fixes for 64 bit Ian Campbell
2013-05-13 16:22 ` [PATCH 1/4] xen/arm: Add emacs magic blocks to asm files Ian Campbell
2013-05-13 16:44   ` Stefano Stabellini
2013-05-13 17:35     ` Tim Deegan
2013-05-13 16:23 ` [PATCH 2/4] xen/arm64: do not clobber callee saved register in early_putch Ian Campbell
2013-05-13 16:53   ` Stefano Stabellini
2013-05-13 16:23 ` [PATCH 3/4] xen/arm: support "arm, armv8-timer" DTS compatibility Ian Campbell
2013-05-13 16:46   ` Stefano Stabellini
2013-05-13 16:23 ` [PATCH 4/4] xen/arm: correctly handle an empty array of platform descs Ian Campbell
2013-05-13 16:48   ` Stefano Stabellini
2013-05-14  9:32     ` Ian Campbell
2013-05-14  9:48       ` Jan Beulich
2013-05-14 10:21         ` Ian Campbell [this message]
2013-05-14 14:29           ` Jan Beulich
2013-05-14 14:37             ` Jan Beulich
2013-05-14 14:54             ` Ian Campbell
2013-05-14 14:56               ` Ian Campbell
2013-05-14 15:07                 ` Ian Campbell
2013-05-14 15:46                   ` Jan Beulich
2013-05-14 16:41                     ` Ian Campbell
2013-05-15  7:12                       ` Jan Beulich
2013-05-15  9:47                         ` Ian Campbell
2013-05-15 12:19                           ` Jan Beulich
2013-05-15 13:47                             ` Ian Campbell
2013-05-16 10:17                               ` Jan Beulich
2013-05-17 10:07                                 ` Ian Campbell
2013-05-17 10:39                                   ` Jan Beulich
2013-05-17 14:34                                     ` Ian Campbell
2013-05-17 15:34                                       ` Jan Beulich
2013-05-17 17:03                                         ` Ian Campbell
2013-05-21  7:54                                           ` Jan Beulich
2013-05-14 15:11               ` Jan Beulich
2013-05-14 15:14                 ` Ian Campbell
2013-05-14  9:36 ` [PATCH 0/4] xen/arm: fixes for 64 bit Ian Campbell

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=1368526880.14264.29.camel@zakaz.uk.xensource.com \
    --to=ian.campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=JBeulich@suse.com \
    --cc=Stefano.Stabellini@eu.citrix.com \
    --cc=julien.grall@citrix.com \
    --cc=keir@xen.org \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.org \
    /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.