[Skiboot] [PATCH] mambo: Fix backtrace when trace mixes endian code

Nicholas Piggin npiggin at gmail.com
Wed Jul 20 20:31:06 AEST 2022


Excerpts from Ryan Grimm's message of July 19, 2022 1:46 am:
> In the case of LE kernel and BE skiboot, the bt functions triggers an
> illegal address when the kernel has a stack pointer in skiboot.  For
> example, in copy_and_flush:
> 
> pc:                             0x000000000000C25C      +0x000000000000C25C
> lr:                             0x000000000000C240      +0x000000000000C240
> stack:0x0000000031C13D20        0x8428023000000000      +0x8428023000000000
> Illegal Address 0x001EC13100000007
> 
> The bad address is from mem_display_64 and is fixed up by inverting
> the LE bit:
> 
> systemsim % mem_display_64 [ expr 0x0000000031C13D20 ] 1
> 0x103EC13100000000
> systemsim % mem_display_64 [ expr 0x0000000031C13D20 ] 0
> 0x0000000031C13E10
> 
> This patch tests the pointer by catching the illegal access and
> inverting the LE bit.  Now the stack trace looks good:
> 
> pc:                             0x000000000000C254      +0x000000000000C254
> lr:                             0x000000000000C240      +0x000000000000C240
> stack:0x0000000031C13D20        0x0000000030022884      .load_and_boot_kernel+0xc6c
> stack:0x0000000031C13E10        0x0000000030023344      .main_cpu_entry+0x8bc
> 
> Opal calls also look good too now:
> 
> pc:                             0x0000000030028588      .cpu_idle_delay+0xb8
> lr:                             0x000000003002856C      .cpu_idle_delay+0x9c
> stack:0x0000000031C13A10        0x0000000030028514      .cpu_idle_delay+0x44
> stack:0x0000000031C13AB0        0x000000003002D6C0      .time_wait_nopoll+0x34
> stack:0x0000000031C13B20        0x000000003002D77C      .time_wait+0xa8
> stack:0x0000000031C13BA0        0x000000003002821C      .cpu_wait_job+0x3c
> stack:0x0000000031C13C40        0x0000000030029554      .opal_reinit_cpus+0x3c0
> stack:0x0000000031C13D10        0x00000000300038AC      opal_entry+0x14c
> stack:0x000000000071FDA0        0xC0000000000537B0      opal_call+0x40
> stack:0x000000000071FE60        0xC00000000005450C      opal_reinit_cpus+0x20
> stack:0x000000000071FED0        0xC00000000065FDAC      opal_configure_cores+0x48
> stack:0x000000000071FF00        0xC000000000656554      early_setup+0x134

Nice!

Acked-by: Nicholas Piggin <npiggin at gmail.com>

> 
> Signed-off-by: Ryan Grimm <grimm at linux.ibm.com>
> ---
>  external/mambo/mambo_utils.tcl | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/external/mambo/mambo_utils.tcl b/external/mambo/mambo_utils.tcl
> index 96f8971a..f8f64eb9 100644
> --- a/external/mambo/mambo_utils.tcl
> +++ b/external/mambo/mambo_utils.tcl
> @@ -423,6 +423,13 @@ proc bt { {sp 0} } {
>          set sym [addr2func $lr]
>          puts "stack:$pa \t$lr\t$sym"
>          if { $bc == 0 } { break }
> +
> +        # catch illegal address in case of endian mismatch
> +        set tstpa [ mysim cpu $p:$c:$t util dtranslate $bc ]
> +        if {[catch { set tst [ mem_display_64 $tstpa $le ] } ]} {
> +            set le [ expr ! $le ]
> +            set bc [ mem_display_64 $pa $le ]
> +        }
>          set sp $bc
>      }
>      puts ""
> -- 
> 2.31.1
> 
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
> 


More information about the Skiboot mailing list