@@ -469,6 +469,55 @@ proc skisym { name } {
return $ret
}
+proc addr2func { addr } {
+ global skiboot_symbol_list
+ global linux_symbol_list
+ global user_symbol_list
+ global mconf
+
+ set prevname ""
+ set preva "0"
+
+ if { [ info exists linux_symbol_list ] && "$addr" >= 0xc000000000000000} {
+ foreach line $linux_symbol_list {
+ lassign $line a type name
+ if { "0x$a" > $addr } {
+ set o [format "0x%x" [expr $addr - "0x$preva"]]
+ return "$prevname+$o"
+ }
+ set prevname $name
+ set preva $a
+ }
+ }
+ # Assume skiboot is less that 4MB big
+ if { [ info exists skiboot_symbol_list ] &&
+ "$addr" > $mconf(boot_load) && "$addr" < [expr $mconf(boot_load) + 4194304] } {
+ set mapaddr [expr $addr - $mconf(boot_load)]
+
+ foreach line $skiboot_symbol_list {
+ lassign $line a type name
+ if { "0x$a" > $mapaddr } {
+ set o [format "0x%x" [expr $mapaddr - "0x$preva"]]
+ return "$prevname+$o"
+ }
+ set prevname $name
+ set preva $a
+ }
+ }
+ if { [ info exists user_symbol_list ] } {
+ foreach line $user_symbol_list {
+ lassign $line a type name
+ if { "0x$a" > $addr } {
+ set o [format "0x%x" [expr $addr - "0x$preva"]]
+ return "$prevname+$o"
+ }
+ set prevname $name
+ set preva $a
+ }
+ }
+ return "+$addr"
+}
+
proc current_insn { { t -1 } { c -1 } { p -1 }} {
global target_t
global target_c
@@ -141,19 +141,30 @@ if {![info exists of::encode_compat]} {
if { [file exists mambo_utils.tcl] } then {
source mambo_utils.tcl
+ if { [info exists env(USER_MAP)] } {
+ global user_symbol_map user_symbol_list
+
+ set fp [open $env(USER_MAP) r]
+ set user_symbol_map [read $fp]
+ set user_symbol_list [split $user_symbol_map "\n"]
+ close $fp
+ }
+
if { [info exists env(VMLINUX_MAP)] } {
- global linux_symbol_map
+ global linux_symbol_map linux_symbol_list
set fp [open $env(VMLINUX_MAP) r]
set linux_symbol_map [read $fp]
+ set linux_symbol_list [split $linux_symbol_map "\n"]
close $fp
}
if { [info exists env(SKIBOOT_MAP)] } {
- global skiboot_symbol_map
+ global skiboot_symbol_map skiboot_symbol_list
set fp [open $env(SKIBOOT_MAP) r]
set skiboot_symbol_map [read $fp]
+ set skiboot_symbol_list [split $skiboot_symbol_map "\n"]
close $fp
}
}
If you supply a VMLINUX_MAP/SKIBOOT_MAP/USER_MAP addr2func can guess at your symbol name. ie systemsim % p pc 0xC0000000002A68F8 systemsim % addr2func [p pc] fdt_offset_ptr+0x78 Signed-off-by: Michael Neuling <mikey@neuling.org> --- v2: Fix screwup with comment --- external/mambo/mambo_utils.tcl | 49 ++++++++++++++++++++++++++++++++++ external/mambo/skiboot.tcl | 15 +++++++++-- 2 files changed, 62 insertions(+), 2 deletions(-)