Patch title: Release 90 bulk changes
Abstract:
File: /language/debug/profiler.pli
Key:
    Removed line
    Added line
   
module "/pliant/language/compiler.pli"
module "/pliant/language/misc/hooks.pli"
module "/pliant/language/debug/record.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream.pli"


gvar Int nowhere := 0
module "/pliant/language/compiler.pli"
module "/pliant/language/misc/hooks.pli"
module "/pliant/language/debug/record.pli"
module "/pliant/language/os.pli"
module "/pliant/language/stream.pli"


gvar Int nowhere := 0
gvar CBool profiler_recurse := false
gvar Int profiler_recurse := 0



function profiler_record initial_eip initial_ebp
  arg Address initial_eip initial_ebp
  var Address eip := initial_eip
  var Address ebp := initial_ebp
  var Address mini := ebp



function profiler_record initial_eip initial_ebp
  arg Address initial_eip initial_ebp
  var Address eip := initial_eip
  var Address ebp := initial_ebp
  var Address mini := ebp
  var Int level := 0
  while (cast ebp uInt)>=(cast mini uInt) and ebp<>null
    var Link:Function f :> search_function_at eip
    if exists:f and f:executable_size<>0
      atomic_increment f:profiler_counter
      var Pointer:DebuggerInstructionRecord best :> null map
      find_instruction f:externals f eip best
      if exists:best
        atomic_increment best:profiler_counter
  while (cast ebp uInt)>=(cast mini uInt) and ebp<>null
    var Link:Function f :> search_function_at eip
    if exists:f and f:executable_size<>0
      atomic_increment f:profiler_counter
      var Pointer:DebuggerInstructionRecord best :> null map
      find_instruction f:externals f eip best
      if exists:best
        atomic_increment best:profiler_counter
    if not profiler_recurse
    if level>=profiler_recurse
      if not exists:f
        atomic_increment nowhere
      return
    mini := ebp translate Byte 1
    eip := (ebp translate Int 1) map Address
    ebp := ebp map Address
      if not exists:f
        atomic_increment nowhere
      return
    mini := ebp translate Byte 1
    eip := (ebp translate Int 1) map Address
    ebp := ebp map Address
    level += 1


export profiler_recurse profiler_start profiler_stop
export profiler_report profiler_reset


export profiler_recurse profiler_start profiler_stop
export profiler_report profiler_reset