[Skiboot] [PATCH] mambo: Fix backtrace when trace mixes endian code
Ryan Grimm
grimm at linux.ibm.com
Tue Jul 19 01:46:20 AEST 2022
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
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
More information about the Skiboot
mailing list