[sgen] Evacuate from emptier blocks to fuller ones
[mono.git] / mono / metadata / object-offsets.h
1 /*
2 This is a parameterized header. It's supposed/ok to be included multiple times.
3
4 Input defines: (those to be defined by the includer file)
5
6 Required:
7 DECL_OFFSET(struct,field)
8 DECL_OFFSET2(struct,field,offset)
9 DECL_ALIGN(name,type)
10 DECL_ALIGN2(name,alignment)
11
12 Optional:
13 USE_CROSS_COMPILE_OFFSETS - if defined, force the cross compiler offsets to be used, otherwise
14         they will only be used if MONO_CROSS_COMPILE is defined
15
16 Output defines:
17
18 HAS_CROSS_COMPILER_OFFSETS - if set, it means we found some cross offsets, it doesnt mean we'll use it.
19 USED_CROSS_COMPILER_OFFSETS - if set, it means we used the cross offsets
20 */
21
22
23 #undef HAS_CROSS_COMPILER_OFFSETS
24 #undef USED_CROSS_COMPILER_OFFSETS
25
26 #ifdef ENABLE_EXTENSION_MODULE
27 #include "../../../mono-extensions/mono/metadata/object-offsets.h"
28 #endif
29
30
31 #ifndef USED_CROSS_COMPILER_OFFSETS
32
33 DECL_ALIGN(gint8)
34 DECL_ALIGN(gint16)
35 DECL_ALIGN(gint32)
36 DECL_ALIGN(gint64)
37 DECL_ALIGN(float)
38 DECL_ALIGN(double)
39 DECL_ALIGN(gpointer)
40
41 DECL_SIZE(gint8)
42 DECL_SIZE(gint16)
43 DECL_SIZE(gint32)
44 DECL_SIZE(gint64)
45 DECL_SIZE(float)
46 DECL_SIZE(double)
47 DECL_SIZE(gpointer)
48
49 #ifndef DISABLE_METADATA_OFFSETS
50 //object offsets
51 DECL_OFFSET(MonoObject, vtable)
52 DECL_OFFSET(MonoObject, synchronisation)
53
54 DECL_OFFSET(MonoClass, interface_bitmap)
55 DECL_OFFSET(MonoClass, byval_arg)
56 DECL_OFFSET(MonoClass, cast_class)
57 DECL_OFFSET(MonoClass, element_class)
58 DECL_OFFSET(MonoClass, idepth)
59 DECL_OFFSET(MonoClass, instance_size)
60 DECL_OFFSET(MonoClass, interface_id)
61 DECL_OFFSET(MonoClass, max_interface_id)
62 DECL_OFFSET(MonoClass, parent)
63 DECL_OFFSET(MonoClass, rank)
64 DECL_OFFSET(MonoClass, sizes)
65 DECL_OFFSET(MonoClass, supertypes)
66
67 DECL_OFFSET(MonoVTable, klass)
68 DECL_OFFSET(MonoVTable, max_interface_id)
69 DECL_OFFSET(MonoVTable, interface_bitmap)
70 DECL_OFFSET(MonoVTable, vtable)
71 DECL_OFFSET(MonoVTable, rank)
72 DECL_OFFSET(MonoVTable, type)
73 DECL_OFFSET(MonoVTable, runtime_generic_context)
74
75 DECL_OFFSET(MonoDomain, stack_overflow_ex)
76
77 DECL_OFFSET(MonoDelegate, target)
78 DECL_OFFSET(MonoDelegate, method_ptr)
79 DECL_OFFSET(MonoDelegate, invoke_impl)
80 DECL_OFFSET(MonoDelegate, method)
81 DECL_OFFSET(MonoDelegate, method_code)
82 DECL_OFFSET(MonoDelegate, method_is_virtual)
83 DECL_OFFSET(MonoDelegate, extra_arg)
84
85 DECL_OFFSET(MonoInternalThread, tid)
86 DECL_OFFSET(MonoInternalThread, small_id)
87 DECL_OFFSET(MonoInternalThread, static_data)
88
89 DECL_OFFSET(MonoMulticastDelegate, delegates)
90
91 DECL_OFFSET(MonoTransparentProxy, rp)
92 DECL_OFFSET(MonoTransparentProxy, remote_class)
93 DECL_OFFSET(MonoTransparentProxy, custom_type_info)
94
95 DECL_OFFSET(MonoRealProxy, target_domain_id)
96 DECL_OFFSET(MonoRealProxy, context)
97 DECL_OFFSET(MonoRealProxy, unwrapped_server)
98
99 DECL_OFFSET(MonoRemoteClass, proxy_class)
100
101 DECL_OFFSET(MonoArray, vector)
102 DECL_OFFSET(MonoArray, max_length)
103 DECL_OFFSET(MonoArray, bounds)
104
105 DECL_OFFSET(MonoArrayBounds, lower_bound)
106 DECL_OFFSET(MonoArrayBounds, length)
107
108 DECL_OFFSET(MonoSafeHandle, handle)
109
110 DECL_OFFSET(MonoHandleRef, handle)
111
112 DECL_OFFSET(MonoComInteropProxy, com_object)
113
114 DECL_OFFSET(MonoString, length)
115 DECL_OFFSET(MonoString, chars)
116
117 DECL_OFFSET(MonoException, message)
118
119 DECL_OFFSET(MonoTypedRef, type)
120 DECL_OFFSET(MonoTypedRef, klass)
121 DECL_OFFSET(MonoTypedRef, value)
122
123 //Internal structs
124 DECL_OFFSET(MonoThreadsSync, status)
125 DECL_OFFSET(MonoThreadsSync, nest)
126
127 #if defined (HAVE_SGEN_GC) && !defined (HAVE_KW_THREAD)
128 DECL_OFFSET(SgenThreadInfo, tlab_next_addr)
129 DECL_OFFSET(SgenThreadInfo, tlab_temp_end)
130 #endif
131
132 #endif //DISABLE METADATA OFFSETS
133
134 #ifndef DISABLE_JIT_OFFSETS
135 DECL_OFFSET(MonoLMF, previous_lmf)
136
137 DECL_OFFSET(MonoMethodRuntimeGenericContext, class_vtable)
138
139 DECL_OFFSET(MonoJitTlsData, lmf)
140 DECL_OFFSET(MonoJitTlsData, class_cast_from)
141 DECL_OFFSET(MonoJitTlsData, class_cast_to)
142 DECL_OFFSET(MonoJitTlsData, handler_block_return_address)
143 DECL_OFFSET(MonoJitTlsData, restore_stack_prot)
144
145 DECL_OFFSET(MonoGSharedVtMethodRuntimeInfo, locals_size)
146 DECL_OFFSET(MonoGSharedVtMethodRuntimeInfo, entries) //XXX more to fix here
147
148 DECL_OFFSET(MonoContinuation, stack_used_size)
149 DECL_OFFSET(MonoContinuation, saved_stack)
150 DECL_OFFSET(MonoContinuation, return_sp)
151 DECL_OFFSET(MonoContinuation, lmf)
152 DECL_OFFSET(MonoContinuation, return_ip)
153
154 DECL_OFFSET(MonoDelegateTrampInfo, invoke_impl)
155 DECL_OFFSET(MonoDelegateTrampInfo, method_ptr)
156
157 // Architecture-specific offsets
158 // -----------------------------
159
160 #if defined(TARGET_X86)
161 DECL_OFFSET(MonoContext, eax)
162 DECL_OFFSET(MonoContext, ebx)
163 DECL_OFFSET(MonoContext, ecx)
164 DECL_OFFSET(MonoContext, edx)
165 DECL_OFFSET(MonoContext, edi)
166 DECL_OFFSET(MonoContext, esi)
167 DECL_OFFSET(MonoContext, esp)
168 DECL_OFFSET(MonoContext, ebp)
169 DECL_OFFSET(MonoContext, eip)
170
171 DECL_OFFSET(MonoLMF, method)
172 DECL_OFFSET(MonoLMF, lmf_addr)
173 DECL_OFFSET(MonoLMF, esp)
174 DECL_OFFSET(MonoLMF, ebx)
175 DECL_OFFSET(MonoLMF, edi)
176 DECL_OFFSET(MonoLMF, esi)
177 DECL_OFFSET(MonoLMF, ebp)
178 DECL_OFFSET(MonoLMF, eip)
179 #elif defined(TARGET_AMD64)
180 DECL_OFFSET(MonoContext, gregs)
181 DECL_OFFSET(MonoContext, fregs)
182
183 #ifdef TARGET_WIN32
184 DECL_OFFSET(MonoLMF, lmf_addr)
185 #endif
186
187 DECL_OFFSET(MonoLMF, rsp)
188 DECL_OFFSET(MonoLMF, rbp)
189 DECL_OFFSET(MonoLMF, rip)
190
191 DECL_OFFSET(DynCallArgs, res)
192
193 DECL_OFFSET(MonoLMFTramp, ctx)
194 DECL_OFFSET(MonoLMFTramp, lmf_addr)
195 #elif defined(TARGET_ARM)
196 DECL_OFFSET(MonoLMF, sp)
197 DECL_OFFSET(MonoLMF, fp)
198 DECL_OFFSET(MonoLMF, ip)
199 DECL_OFFSET(MonoLMF, iregs)
200 DECL_OFFSET(MonoLMF, fregs)
201 #elif defined(TARGET_ARM64)
202 DECL_OFFSET(MonoLMF, pc)
203 DECL_OFFSET(MonoLMF, gregs)
204 DECL_OFFSET(DynCallArgs, regs)
205 DECL_OFFSET(DynCallArgs, fpregs)
206 DECL_OFFSET(DynCallArgs, n_fpargs)
207 DECL_OFFSET(DynCallArgs, n_fpret)
208 #endif
209
210 // Shared architecture offfsets
211 // ----------------------------
212
213 #if defined(TARGET_ARM) || defined(TARGET_ARM64)
214 DECL_OFFSET (MonoContext, pc)
215 DECL_OFFSET (MonoContext, regs)
216 DECL_OFFSET (MonoContext, fregs)
217
218 DECL_OFFSET(MonoLMF, lmf_addr)
219
220 DECL_OFFSET(SeqPointInfo, ss_trigger_page)
221
222 DECL_OFFSET(DynCallArgs, res)
223 DECL_OFFSET(DynCallArgs, res2)
224 #endif
225
226 #if defined(TARGET_ARM)
227 DECL_OFFSET(MonoLMF, method)
228 #endif
229
230 #if defined(TARGET_AMD64) || defined(TARGET_ARM64)
231 DECL_OFFSET(SeqPointInfo, ss_tramp_addr)
232 #endif
233
234 #if defined(TARGET_AMD64) || defined(TARGET_ARM) || defined(TARGET_ARM64)
235 DECL_OFFSET(SeqPointInfo, bp_addrs)
236 #endif
237
238 #endif //DISABLE_JIT_OFFSETS
239
240 #endif //USED_CROSS_COMPILER_OFFSETS
241
242 #undef DECL_OFFSET
243 #undef DECL_OFFSET2
244 #undef DECL_ALIGN
245 #undef DECL_ALIGN2
246 #undef DECL_SIZE
247 #undef DECL_SIZE2
248 #undef USE_CROSS_COMPILE_OFFSETS