[PATCH] powerpc/64s: Fix section mismatch warnings from boot code

Michael Ellerman patch-notifications at ellerman.id.au
Thu Mar 26 23:06:33 AEDT 2020


On Tue, 2020-02-25 at 03:13:28 UTC, Michael Ellerman wrote:
> We currently have two section mismatch warnings:
> 
>   The function __boot_from_prom() references
>   the function __init prom_init().
> 
>   The function start_here_common() references
>   the function __init start_kernel().
> 
> The warnings are correct, we do have branches from non-init code into
> init code, which is freed after boot. But we don't expect to ever
> execute any of that early boot code after boot, if we did that would
> be a bug. In particular calling into OF after boot would be fatal
> because OF is no longer resident.
> 
> So for now fix the warnings by marking the relevant functions as
> __REF, which puts them in the ".ref.text" section.
> 
> This causes some reordering of the functions in the final link:
> 
>   @@ -217,10 +217,9 @@
>    c00000000000b088 t generic_secondary_common_init
>    c00000000000b124 t __mmu_off
>    c00000000000b14c t __start_initialization_multiplatform
>   -c00000000000b1ac t __boot_from_prom
>   -c00000000000b1ec t __after_prom_start
>   -c00000000000b260 t p_end
>   -c00000000000b27c T copy_and_flush
>   +c00000000000b1ac t __after_prom_start
>   +c00000000000b220 t p_end
>   +c00000000000b23c T copy_and_flush
>    c00000000000b300 T __secondary_start
>    c00000000000b300 t copy_to_here
>    c00000000000b344 t start_secondary_prolog
>   @@ -228,8 +227,9 @@
>    c00000000000b36c t enable_64b_mode
>    c00000000000b388 T relative_toc
>    c00000000000b3a8 t p_toc
>   -c00000000000b3b0 t start_here_common
>   -c00000000000b3d0 t start_here_multiplatform
>   +c00000000000b3b0 t __boot_from_prom
>   +c00000000000b3f0 t start_here_multiplatform
>   +c00000000000b480 t start_here_common
>    c00000000000b880 T system_call_common
>    c00000000000b974 t system_call
>    c00000000000b9dc t system_call_exit
> 
> In particular __boot_from_prom moves after copy_to_here, which means
> it's not copied to zero in the first stage of copy of the kernel to
> zero.
> 
> But that's OK, because we only call __boot_from_prom before we do the
> copy, so it makes no difference when it's copied. The call sequence
> is:
>   __start
>   -> __start_initialization_multiplatform
>      -> __boot_from_prom
>         -> __start
>            -> __start_initialization_multiplatform
>               -> __after_prom_start
>                  -> copy_and_flush
>                  -> copy_and_flush (relocated to 0)
>                     -> start_here_multiplatform
>                        -> early_setup
> 
> Reported-by: Mauricio Faria de Oliveira <mauricfo at linux.ibm.com>
> Reported-by: Roman Bolshakov <r.bolshakov at yadro.com>
> Signed-off-by: Michael Ellerman <mpe at ellerman.id.au>

Applied to powerpc next.

https://git.kernel.org/powerpc/c/6eeb9b3b9ce588f14a697737a30d0702b5a20293

cheers


More information about the Linuxppc-dev mailing list