[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] arm32: fix build after 063188f4b3



On Fri, 2014-10-10 at 16:55 +0100, Julien Grall wrote:
> Hi Jan,
> 
> On 10/10/2014 15:51, Jan Beulich wrote:
> >>>> On 10.10.14 at 16:12, <julien.grall@xxxxxxxxxx> wrote:
> >> On 10/10/2014 14:58, Jan Beulich wrote:
> >>> "xen: arm: Add support for the Exynos secure firmware" introduced code
> >>> assuming that exynos_smc() would get called with arguments in certain
> >>> registers. While the "noinline" attribute guarantees the function to
> >>> not get inlined, it does not guarantee that all arguments arrive in the
> >>> assumed registers: gcc's interprocedural analysis can result in clone
> >>> functions to be created where some of the incoming arguments (commonly
> >>> when they have constant values) get replaced by putting in place the
> >>> respective values inside the clone.
> >>
> >> I'm not sure to understand here. If the function is marked as noinlined,
> >> that would mean the arguments will be passed with the ARM in the
> >> register with the ARM calling convention (i.e r0 for argument 0...). Why
> >> GCC would try to create a clone of this function?
> >
> > The compiler is free to do so as long as the language specification isn't
> > being violated.
> 
> Thanks for the explanation.
> 
> >>> The alternative of adding __attribute__((optimize("-fno-ipa-cp")))
> >>> to the function definition would likely not work with all supported
> >>> compiler versions.
> >>
> >> The function was first introduced in arch/arm/psci.c (it's a copy of the
> >> Linux one in arch/arm/kernel/psci.c).
> >>
> >> Does it mean that Linux code is buggy too?
> >
> > Likely.
> >
> >> This function is duplicate in 3 different places in Xen:
> >>    - arch/arm/psci.c
> >>    - arch/platforms/exynos5.c
> >>    - arch/platforms/seattle.c
> >>
> >> So all those functions should be fixed. I think it's time to introduce a
> >> global SMC function...
> >
> > Okay, I got the build failure only in this one place. But if and when
> > the compiler choses to do such transformations is entirely up to it,
> > so yes, if there are multiple instances likely they all would need
> > fixing.
> 
> BTW,  named register is a GNU extension and not supported by clang. Can 
> you avoid to use them? Maybe by writing the function in assembly. So we 
> are safe against any compiler optimization.

I think Jan's patch (or something like it either applied to all three
sites or a new consolidated single site) is good enough for now, given
we are in a freeze.

If you want to rewrite in asm to support clang then that can be done as
a follow up.
ian


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.