| Index: third_party/sqlite/sqlite-src-3080704/tool/stack_usage.tcl
|
| diff --git a/third_party/sqlite/sqlite-src-3080704/tool/stack_usage.tcl b/third_party/sqlite/sqlite-src-3080704/tool/stack_usage.tcl
|
| deleted file mode 100644
|
| index b3574f026e08bfa402663dfcfb05071db46e5dbb..0000000000000000000000000000000000000000
|
| --- a/third_party/sqlite/sqlite-src-3080704/tool/stack_usage.tcl
|
| +++ /dev/null
|
| @@ -1,98 +0,0 @@
|
| -#!/usr/bin/tclsh
|
| -#
|
| -# Parse the output of
|
| -#
|
| -# objdump -d sqlite3.o
|
| -#
|
| -# for x64 and generate a report showing:
|
| -#
|
| -# (1) Stack used by each function
|
| -# (2) Recursion paths and their aggregate stack depth
|
| -#
|
| -set getStack 0
|
| -while {![eof stdin]} {
|
| - set line [gets stdin]
|
| - if {[regexp {^[0-9a-f]+ <([^>]+)>:\s*$} $line all procname]} {
|
| - set curfunc $procname
|
| - set root($curfunc) 1
|
| - set calls($curfunc) {}
|
| - set calledby($curfunc) {}
|
| - set recursive($curfunc) {}
|
| - set stkdepth($curfunc) 0
|
| - set getStack 1
|
| - continue
|
| - }
|
| - if {[regexp {callq? +[0-9a-z]+ <([^>]+)>} $line all other]} {
|
| - set key [list $curfunc $other]
|
| - set callpair($key) 1
|
| - unset -nocomplain root($curfunc)
|
| - continue
|
| - }
|
| - if {[regexp {sub +\$(0x[0-9a-z]+),%[er]sp} $line all xdepth]} {
|
| - if {$getStack} {
|
| - scan $xdepth %x depth
|
| - set stkdepth($curfunc) $depth
|
| - set getStack 0
|
| - }
|
| - continue
|
| - }
|
| -}
|
| -
|
| -puts "****************** Stack Usage By Function ********************"
|
| -set sdlist {}
|
| -foreach f [array names stkdepth] {
|
| - lappend sdlist [list $stkdepth($f) $f]
|
| -}
|
| -foreach sd [lsort -integer -decr -index 0 $sdlist] {
|
| - foreach {depth fname} $sd break
|
| - puts [format {%6d %s} $depth $fname]
|
| -}
|
| -
|
| -puts "****************** Stack Usage By Recursion *******************"
|
| -foreach key [array names callpair] {
|
| - foreach {from to} $key break
|
| - lappend calls($from) $to
|
| - # lappend calledby($to) $from
|
| -}
|
| -proc all_descendents {root} {
|
| - global calls recursive
|
| - set todo($root) $root
|
| - set go 1
|
| - while {$go} {
|
| - set go 0
|
| - foreach f [array names todo] {
|
| - set path $todo($f)
|
| - unset todo($f)
|
| - if {![info exists calls($f)]} continue
|
| - foreach x $calls($f) {
|
| - if {$x==$root} {
|
| - lappend recursive($root) [concat $path $root]
|
| - } elseif {![info exists d($x)]} {
|
| - set go 1
|
| - set todo($x) [concat $path $x]
|
| - set d($x) 1
|
| - }
|
| - }
|
| - }
|
| - }
|
| - return [array names d]
|
| -}
|
| -set pathlist {}
|
| -foreach f [array names recursive] {
|
| - all_descendents $f
|
| - foreach m $recursive($f) {
|
| - set depth 0
|
| - foreach b [lrange $m 0 end-1] {
|
| - set depth [expr {$depth+$stkdepth($b)}]
|
| - }
|
| - lappend pathlist [list $depth $m]
|
| - }
|
| -}
|
| -foreach path [lsort -integer -decr -index 0 $pathlist] {
|
| - foreach {depth m} $path break
|
| - set first [lindex $m 0]
|
| - puts [format {%6d %s %d} $depth $first $stkdepth($first)]
|
| - foreach b [lrange $m 1 end] {
|
| - puts " $b $stkdepth($b)"
|
| - }
|
| -}
|
|
|