Skip to content

Commit

Permalink
mambo: Add addr2func for symbol resolution
Browse files Browse the repository at this point in the history
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>
Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
  • Loading branch information
mikey authored and stewartsmith committed May 15, 2019
1 parent df34ced commit 901261b
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 2 deletions.
49 changes: 49 additions & 0 deletions external/mambo/mambo_utils.tcl
Expand Up @@ -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
Expand Down
15 changes: 13 additions & 2 deletions external/mambo/skiboot.tcl
Expand Up @@ -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
}
}
Expand Down

0 comments on commit 901261b

Please sign in to comment.