Files
linguist/samples/Terra/testdebug.t
2016-01-28 11:22:27 +07:00

57 lines
1.5 KiB
Perl

if not terralib.traceback then return end
--this test require debug on, if it is not on, relaunch with it on
if 0 == terralib.isdebug then
assert(0 == os.execute(terralib.terrahome.."/bin/terra -g testdebug.t"))
return
end
C = terralib.includec("stdio.h")
terra foo(a : int, b : int)
var c = a + b
return c * 2
end
local ptr = terralib.cast(rawstring,foo:getdefinitions()[1]:getpointer())
terra findptr(a : &opaque)
var si : terralib.SymbolInfo
var li : terralib.LineInfo
terralib.lookupsymbol(a,&si)
C.printf("p = %p, addr = %p, sz = %d, nm = %.*s\n",a,si.addr,[int](si.size), si.namelength,si.name)
terralib.lookupline(si.addr,a, &li)
C.printf("line = %.*s:%d\n",li.namelength,li.name,[int](li.linenum))
return li.linenum
end
assert(11 == findptr(ptr+6))
assert(10 == findptr(ptr+4))
local ra = terralib.intrinsic("llvm.returnaddress", int32 -> &opaque )
local fa = terralib.intrinsic("llvm.frameaddress", int32 -> &opaque )
terra testbt3()
var frames : (&opaque)[128]
terralib.traceback(nil)
var N = terralib.backtrace(frames,128,ra(0),fa(1))
for i = 0,N do
C.printf("%p ",frames[i])
var nm : rawstring
var nmL : uint64
var si : terralib.SymbolInfo
if terralib.lookupsymbol(frames[i],&si) then
C.printf("frame %.*s\n", si.namelength, si.name)
else
C.printf("\n")
end
end
end
testbt3:setinlined(false)
terra fn2()
testbt3()
C.printf("fn2\n")
return 1
end
terra what()
fn2()
C.printf("what\n")
end
fn2:setinlined(false)
what()
terralib.disas(terralib.traceback,5,5)