blob: 34f41557dc4999f209c6d9f2db167ef3e29a11d5 [file] [log] [blame]
Johnny Chen3cfd5e82011-07-18 21:30:21 +00001//===-- SWIG Interface for SBAddress ----------------------------*- 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
10namespace lldb {
11
12%feature("docstring",
13"A section + offset based address class.
14
15The SBAddress class allows addresses to be relative to a section
16that can move during runtime due to images (executables, shared
17libraries, bundles, frameworks) being loaded at different
18addresses than the addresses found in the object file that
19represents them on disk. There are currently two types of addresses
20for a section:
21 o file addresses
22 o load addresses
23
24File addresses represents the virtual addresses that are in the 'on
25disk' object files. These virtual addresses are converted to be
26relative to unique sections scoped to the object file so that
27when/if the addresses slide when the images are loaded/unloaded
28in memory, we can easily track these changes without having to
29update every object (compile unit ranges, line tables, function
30address ranges, lexical block and inlined subroutine address
31ranges, global and static variables) each time an image is loaded or
32unloaded.
33
34Load addresses represents the virtual addresses where each section
35ends up getting loaded at runtime. Before executing a program, it
36is common for all of the load addresses to be unresolved. When a
37DynamicLoader plug-in receives notification that shared libraries
38have been loaded/unloaded, the load addresses of the main executable
39and any images (shared libraries) will be resolved/unresolved. When
40this happens, breakpoints that are in one of these sections can be
41set/cleared.
42
43See docstring of SBFunction for example usage of SBAddress."
44) SBAddress;
45class SBAddress
46{
47public:
48
49 SBAddress ();
50
51 SBAddress (const lldb::SBAddress &rhs);
52
Greg Clayton39f54ea2012-02-04 02:58:17 +000053 SBAddress (lldb::SBSection section,
54 lldb::addr_t offset);
55
Johnny Chenc4f3ade2011-07-26 23:42:01 +000056 %feature("docstring", "
57 Create an address by resolving a load address using the supplied target.
58 ") SBAddress;
Greg Claytona3955062011-07-22 16:46:35 +000059 SBAddress (lldb::addr_t load_addr, lldb::SBTarget &target);
60
Johnny Chen3cfd5e82011-07-18 21:30:21 +000061 ~SBAddress ();
62
63 bool
64 IsValid () const;
65
66 void
67 Clear ();
68
69 addr_t
70 GetFileAddress () const;
71
72 addr_t
73 GetLoadAddress (const lldb::SBTarget &target) const;
74
Johnny Chenc4f3ade2011-07-26 23:42:01 +000075 void
76 SetLoadAddress (lldb::addr_t load_addr,
77 lldb::SBTarget &target);
Greg Claytona3955062011-07-22 16:46:35 +000078
Johnny Chen3cfd5e82011-07-18 21:30:21 +000079 bool
80 OffsetAddress (addr_t offset);
81
82 bool
83 GetDescription (lldb::SBStream &description);
84
Greg Clayton3e8c25f2011-09-24 00:52:29 +000085 lldb::SBSection
86 GetSection ();
Johnny Chen3cfd5e82011-07-18 21:30:21 +000087
Greg Clayton1b925202012-01-29 06:07:39 +000088 lldb::addr_t
89 SBAddress::GetOffset ();
90
Greg Clayton39f54ea2012-02-04 02:58:17 +000091 void
92 SetAddress (lldb::SBSection section,
93 lldb::addr_t offset);
94
95
Greg Clayton7fb14302012-04-13 00:07:34 +000096 lldb::AddressClass
97 GetAddressClass ();
98
Johnny Chene4fd4402011-08-12 22:52:11 +000099 %feature("docstring", "
100 //------------------------------------------------------------------
101 /// GetSymbolContext() and the following can lookup symbol information for a given address.
102 /// An address might refer to code or data from an existing module, or it
103 /// might refer to something on the stack or heap. The following functions
104 /// will only return valid values if the address has been resolved to a code
105 /// or data address using 'void SBAddress::SetLoadAddress(...)' or
106 /// 'lldb::SBAddress SBTarget::ResolveLoadAddress (...)'.
107 //------------------------------------------------------------------
108 ") GetSymbolContext;
109 lldb::SBSymbolContext
110 GetSymbolContext (uint32_t resolve_scope);
111
112 %feature("docstring", "
113 //------------------------------------------------------------------
114 /// GetModule() and the following grab individual objects for a given address and
115 /// are less efficient if you want more than one symbol related objects.
116 /// Use one of the following when you want multiple debug symbol related
117 /// objects for an address:
118 /// lldb::SBSymbolContext SBAddress::GetSymbolContext (uint32_t resolve_scope);
119 /// lldb::SBSymbolContext SBTarget::ResolveSymbolContextForAddress (const SBAddress &addr, uint32_t resolve_scope);
120 /// One or more bits from the SymbolContextItem enumerations can be logically
121 /// OR'ed together to more efficiently retrieve multiple symbol objects.
122 //------------------------------------------------------------------
123 ") GetModule;
Johnny Chen3cfd5e82011-07-18 21:30:21 +0000124 lldb::SBModule
125 GetModule ();
Johnny Chene4fd4402011-08-12 22:52:11 +0000126
127 lldb::SBCompileUnit
128 GetCompileUnit ();
129
130 lldb::SBFunction
131 GetFunction ();
132
133 lldb::SBBlock
134 GetBlock ();
135
136 lldb::SBSymbol
137 GetSymbol ();
138
139 lldb::SBLineEntry
140 GetLineEntry ();
Greg Clayton1b925202012-01-29 06:07:39 +0000141
142 %pythoncode %{
Greg Claytonb302dff2012-02-01 08:09:32 +0000143 def __get_load_addr_property__ (self):
144 '''Get the load address for a lldb.SBAddress using the current target.'''
145 return self.GetLoadAddress (target)
146
147 def __set_load_addr_property__ (self, load_addr):
148 '''Set the load address for a lldb.SBAddress using the current target.'''
149 return self.SetLoadAddress (load_addr, target)
150
151 def __int__(self):
Greg Clayton2a94be12012-06-29 22:00:42 +0000152 '''Convert an address to a load address if there is a process and that process is alive, or to a file address otherwise.'''
Greg Claytonb302dff2012-02-01 08:09:32 +0000153 if process.is_alive:
154 return self.GetLoadAddress (target)
155 else:
156 return self.GetFileAddress ()
157
158 def __oct__(self):
Greg Clayton2a94be12012-06-29 22:00:42 +0000159 '''Convert the address to an octal string'''
Greg Claytonb302dff2012-02-01 08:09:32 +0000160 return '%o' % int(self)
161
162 def __hex__(self):
Greg Clayton2a94be12012-06-29 22:00:42 +0000163 '''Convert the address to an hex string'''
Greg Claytonb302dff2012-02-01 08:09:32 +0000164 return '0x%x' % int(self)
165
Greg Clayton1b925202012-01-29 06:07:39 +0000166 __swig_getmethods__["module"] = GetModule
Greg Clayton2a94be12012-06-29 22:00:42 +0000167 if _newclass: module = property(GetModule, None, doc='''A read only property that returns an lldb object that represents the module (lldb.SBModule) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000168
169 __swig_getmethods__["compile_unit"] = GetCompileUnit
Greg Clayton2a94be12012-06-29 22:00:42 +0000170 if _newclass: compile_unit = property(GetCompileUnit, None, doc='''A read only property that returns an lldb object that represents the compile unit (lldb.SBCompileUnit) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000171
172 __swig_getmethods__["line_entry"] = GetLineEntry
Greg Clayton2a94be12012-06-29 22:00:42 +0000173 if _newclass: line_entry = property(GetLineEntry, None, doc='''A read only property that returns an lldb object that represents the line entry (lldb.SBLineEntry) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000174
175 __swig_getmethods__["function"] = GetFunction
Greg Clayton2a94be12012-06-29 22:00:42 +0000176 if _newclass: function = property(GetFunction, None, doc='''A read only property that returns an lldb object that represents the function (lldb.SBFunction) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000177
178 __swig_getmethods__["block"] = GetBlock
Greg Clayton2a94be12012-06-29 22:00:42 +0000179 if _newclass: block = property(GetBlock, None, doc='''A read only property that returns an lldb object that represents the block (lldb.SBBlock) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000180
181 __swig_getmethods__["symbol"] = GetSymbol
Greg Clayton2a94be12012-06-29 22:00:42 +0000182 if _newclass: symbol = property(GetSymbol, None, doc='''A read only property that returns an lldb object that represents the symbol (lldb.SBSymbol) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000183
184 __swig_getmethods__["offset"] = GetOffset
Greg Clayton2a94be12012-06-29 22:00:42 +0000185 if _newclass: offset = property(GetOffset, None, doc='''A read only property that returns the section offset in bytes as an integer.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000186
187 __swig_getmethods__["section"] = GetSection
Greg Clayton2a94be12012-06-29 22:00:42 +0000188 if _newclass: section = property(GetSection, None, doc='''A read only property that returns an lldb object that represents the section (lldb.SBSection) that this address resides within.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000189
190 __swig_getmethods__["file_addr"] = GetFileAddress
Greg Clayton2a94be12012-06-29 22:00:42 +0000191 if _newclass: file_addr = property(GetFileAddress, None, doc='''A read only property that returns file address for the section as an integer. This is the address that represents the address as it is found in the object file that defines it.''')
Greg Clayton1b925202012-01-29 06:07:39 +0000192
Greg Claytonb302dff2012-02-01 08:09:32 +0000193 __swig_getmethods__["load_addr"] = __get_load_addr_property__
194 __swig_setmethods__["load_addr"] = __set_load_addr_property__
Greg Clayton2a94be12012-06-29 22:00:42 +0000195 if _newclass: load_addr = property(__get_load_addr_property__, __set_load_addr_property__, doc='''A read/write property that gets/sets the SBAddress using load address. The setter resolves SBAddress using the SBTarget from lldb.target.''')
Greg Claytonb302dff2012-02-01 08:09:32 +0000196
Greg Clayton1b925202012-01-29 06:07:39 +0000197 %}
198
Johnny Chen3cfd5e82011-07-18 21:30:21 +0000199};
200
201} // namespace lldb