On Thu, Feb 25, 2016 at 01:28:27AM +1100, Michael Ellerman wrote:
> @@ -450,17 +448,44 @@ static unsigned long stub_for_addr(const Elf64_Shdr 
> *sechdrs,
>       return (unsigned long)&stubs[i];
>  }
>  
> +#ifdef CC_USING_MPROFILE_KERNEL
> +static int is_early_mcount_callsite(u32 *instruction)
> +{
> +     /* -mprofile-kernel sequence starting with
> +      * mflr r0 and maybe std r0, LRSAVE(r1).
> +      */
> +     if ((instruction[-3] == PPC_INST_MFLR &&
> +          instruction[-2] == PPC_INST_STD_LR) ||
> +         instruction[-2] == PPC_INST_MFLR) {
> +             /* Nothing to be done here, it's an _mcount
> +              * call location and r2 will have to be
> +              * restored in the _mcount function.
> +              */
> +             return 1;
> +     }
> +     return 0;
> +}
> +#else

*You* said this might page fault :)

Did we agree yet whether we insist on a streamlined compiler?
(GCC commit e95d0248dace required)?

If not:
if (instruction[-2] == PPC_INST_STD_LR)
  {
    if (instruction[-3] == PPC_INST_MFLR)
      return 1;
  }
else if (instruction[-2] == PPC_INST_MFLR)
    return 1;
return 0;

leaves less freedom for the compiler to "optimise".

Signed-off-by: Torsten Duwe <d...@suse.de>

        Torsten

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to