[PATCH] Add kto and kfrom to input operands list.

Mikael Pettersson mikpe at it.uu.se
Wed Jun 2 08:08:44 EDT 2010


Khem Raj writes:
 > When functions incoming parameters are not in input operands list gcc 4.5 does not
 > load the parameters into registers before calling this function but the
 > inline assembly assumes valid addresses inside this function. This
 > breaks the code because r0 and r1 are invalid when execution enters
 > v4wb_copy_user_page ()
 > 
 > Also the constant needs to be used as third input operand so account for that
 > as well.
 > 
 > Tested on qemu arm.
 > 
 > Signed-off-by: Khem Raj <raj.khem at gmail.com>
 > ---
 >  arch/arm/mm/copypage-feroceon.c |    4 ++--

I've tested and verified that this bit enables a gcc-4.5 compiled kernel
to boot on TS-119 (Kirkwood) when combined with my fix for __naked.
With neither or only one of the patches applied, the kernel oopses hard
in copy_user_page() as it tries to start /sbin/init.

So for the copypage-feroceon.c change:
Tested-by: Mikael Pettersson <mikpe at it.uu.se>

To elaborate, the copy_user_page() functions in these copypage-*.c files
break in two ways with gcc-4.5:
- they are static __naked functions, and gcc-4.5 erroneously clones
  them and changes their calling conventions in ways that don't match
  the expectations of their asm() bodies, causing runtime crashes;
  my patch to make __naked imply noinline and noclone fixes that
- the asm() bodies of these __naked functions have inadequate input
  parameter constraints, in particular they fail to declare any
  dependencies on the functions' formal parameters; gcc-4.5 sees this
  and skips the parameter setup before calling these functions, causing
  runtime crashes; Khem's patch (this one) fixes that
  (copypage-xscale.c already had correct asm() constraints so it works
  with only the __naked fix, these other copypage-*.c files need both
  patches to work)

These patches are no-ops for earlier compilers since they merely
formalise the parameter passing behaviour that the kernel has been
expecting all along.

/Mikael



More information about the linux-arm-kernel mailing list