Home | History | Annotate | Download | only in interface
      1 //===-- SWIG Interface for SBFunction ---------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 namespace lldb {
     11 
     12 %feature("docstring",
     13 "Represents a generic function, which can be inlined or not.
     14 
     15 For example (from test/lldbutil.py, but slightly modified for doc purpose),
     16 
     17         ...
     18 
     19         frame = thread.GetFrameAtIndex(i)
     20         addr = frame.GetPCAddress()
     21         load_addr = addr.GetLoadAddress(target)
     22         function = frame.GetFunction()
     23         mod_name = frame.GetModule().GetFileSpec().GetFilename()
     24 
     25         if not function:
     26             # No debug info for 'function'.
     27             symbol = frame.GetSymbol()
     28             file_addr = addr.GetFileAddress()
     29             start_addr = symbol.GetStartAddress().GetFileAddress()
     30             symbol_name = symbol.GetName()
     31             symbol_offset = file_addr - start_addr
     32             print >> output, '  frame #{num}: {addr:#016x} {mod}`{symbol} + {offset}'.format(
     33                 num=i, addr=load_addr, mod=mod_name, symbol=symbol_name, offset=symbol_offset)
     34         else:
     35             # Debug info is available for 'function'.
     36             func_name = frame.GetFunctionName()
     37             file_name = frame.GetLineEntry().GetFileSpec().GetFilename()
     38             line_num = frame.GetLineEntry().GetLine()
     39             print >> output, '  frame #{num}: {addr:#016x} {mod}`{func} at {file}:{line} {args}'.format(
     40                 num=i, addr=load_addr, mod=mod_name,
     41                 func='%s [inlined]' % func_name] if frame.IsInlined() else func_name,
     42                 file=file_name, line=line_num, args=get_args_as_string(frame, showFuncName=False))
     43 
     44         ...
     45 ") SBFunction;
     46 class SBFunction
     47 {
     48 public:
     49 
     50     SBFunction ();
     51 
     52     SBFunction (const lldb::SBFunction &rhs);
     53 
     54     ~SBFunction ();
     55 
     56     bool
     57     IsValid () const;
     58 
     59     const char *
     60     GetName() const;
     61 
     62     const char *
     63     GetMangledName () const;
     64 
     65     lldb::SBInstructionList
     66     GetInstructions (lldb::SBTarget target);
     67 
     68     lldb::SBInstructionList
     69     GetInstructions (lldb::SBTarget target, const char *flavor);
     70 
     71     lldb::SBAddress
     72     GetStartAddress ();
     73 
     74     lldb::SBAddress
     75     GetEndAddress ();
     76 
     77     uint32_t
     78     GetPrologueByteSize ();
     79 
     80     lldb::SBType
     81     GetType ();
     82 
     83     lldb::SBBlock
     84     GetBlock ();
     85 
     86     bool
     87     GetDescription (lldb::SBStream &description);
     88 
     89     bool
     90     operator == (const lldb::SBFunction &rhs) const;
     91 
     92     bool
     93     operator != (const lldb::SBFunction &rhs) const;
     94 
     95     %pythoncode %{
     96         def get_instructions_from_current_target (self):
     97             return self.GetInstructions (target)
     98 
     99         __swig_getmethods__["addr"] = GetStartAddress
    100         if _newclass: addr = property(GetStartAddress, None, doc='''A read only property that returns an lldb object that represents the start address (lldb.SBAddress) for this function.''')
    101 
    102         __swig_getmethods__["end_addr"] = GetEndAddress
    103         if _newclass: end_addr = property(GetEndAddress, None, doc='''A read only property that returns an lldb object that represents the end address (lldb.SBAddress) for this function.''')
    104 
    105         __swig_getmethods__["block"] = GetBlock
    106         if _newclass: block = property(GetBlock, None, doc='''A read only property that returns an lldb object that represents the top level lexical block (lldb.SBBlock) for this function.''')
    107 
    108         __swig_getmethods__["instructions"] = get_instructions_from_current_target
    109         if _newclass: instructions = property(get_instructions_from_current_target, None, doc='''A read only property that returns an lldb object that represents the instructions (lldb.SBInstructionList) for this function.''')
    110 
    111         __swig_getmethods__["mangled"] = GetMangledName
    112         if _newclass: mangled = property(GetMangledName, None, doc='''A read only property that returns the mangled (linkage) name for this function as a string.''')
    113 
    114         __swig_getmethods__["name"] = GetName
    115         if _newclass: name = property(GetName, None, doc='''A read only property that returns the name for this function as a string.''')
    116 
    117         __swig_getmethods__["prologue_size"] = GetPrologueByteSize
    118         if _newclass: prologue_size = property(GetPrologueByteSize, None, doc='''A read only property that returns the size in bytes of the prologue instructions as an unsigned integer.''')
    119 
    120         __swig_getmethods__["type"] = GetType
    121         if _newclass: type = property(GetType, None, doc='''A read only property that returns an lldb object that represents the return type (lldb.SBType) for this function.''')
    122     %}
    123 
    124 };
    125 
    126 } // namespace lldb
    127