diff options
Diffstat (limited to 'external/mambo')
-rw-r--r-- | external/mambo/mambo_utils.tcl | 34 | ||||
-rw-r--r-- | external/mambo/skiboot.tcl | 16 |
2 files changed, 50 insertions, 0 deletions
diff --git a/external/mambo/mambo_utils.tcl b/external/mambo/mambo_utils.tcl index 6615ef1..837ae9b 100644 --- a/external/mambo/mambo_utils.tcl +++ b/external/mambo/mambo_utils.tcl @@ -329,6 +329,40 @@ proc doff { opt } { simdebug set $opt 0 } +# skisym and linsym return the address of a symbol, looked up from +# the relevant System.map or skiboot.map file. +proc linsym { name } { + global linux_symbol_map + + # create a regexp that matches the symbol name + set base {([[:xdigit:]]*) (.)} + set exp [concat $base " $name"] + set ret "" + + foreach {line addr type} [regexp -line -inline $exp $linux_symbol_map] { + set ret "0x$addr" + } + + return $ret +} + +# skisym factors in skiboot's load address +proc skisym { name } { + global skiboot_symbol_map + global mconf + + set base {([[:xdigit:]]*) (.)} + set exp [concat $base " $name"] + set ret "" + + foreach {line addr type} [regexp -line -inline $exp $skiboot_symbol_map] { + set actual_addr [expr "0x$addr" + $mconf(boot_load)] + set ret [format "0x%.16x" $actual_addr] + } + + return $ret +} + proc start_qtrace { { qtfile qtrace.qt } } { global env diff --git a/external/mambo/skiboot.tcl b/external/mambo/skiboot.tcl index e16a21c..1b74c9b 100644 --- a/external/mambo/skiboot.tcl +++ b/external/mambo/skiboot.tcl @@ -105,6 +105,22 @@ if {![info exists of::encode_compat]} { # allows running mambo in another directory to the one skiboot.tcl is in. if { [file exists mambo_utils.tcl] } then { source mambo_utils.tcl + + if { [info exists env(VMLINUX_MAP)] } { + global linux_symbol_map + + set fp [open $env(VMLINUX_MAP) r] + set linux_symbol_map [read $fp] + close $fp + } + + if { [info exists env(SKIBOOT_MAP)] } { + global skiboot_symbol_map + + set fp [open $env(SKIBOOT_MAP) r] + set skiboot_symbol_map [read $fp] + close $fp + } } # |