@@ -157,7 +157,10 @@ mod imp { |
|
|
157 |
157 |
// going to be cross-lang LTOed anyway. However, using expose is shorter and |
158 |
158 |
// requires less unsafe. |
159 |
159 |
let addr: usize = ptr.expose_provenance(); |
|
160 |
+#[cfg(bootstrap)] |
160 |
161 |
let image_base = unsafe { addr_of!(__ImageBase) }.addr(); |
|
162 |
+#[cfg(not(bootstrap))] |
|
163 |
+let image_base = addr_of!(__ImageBase).addr(); |
161 |
164 |
let offset: usize = addr - image_base; |
162 |
165 |
Self(offset as u32) |
163 |
166 |
} |
@@ -250,7 +253,10 @@ extern "C" { |
|
|
250 |
253 |
// This is fine since the MSVC runtime uses string comparison on the type name |
251 |
254 |
// to match TypeDescriptors rather than pointer equality. |
252 |
255 |
static mut TYPE_DESCRIPTOR: _TypeDescriptor = _TypeDescriptor { |
|
256 |
+#[cfg(bootstrap)] |
253 |
257 |
pVFTable: unsafe { addr_of!(TYPE_INFO_VTABLE) } as *const _, |
|
258 |
+#[cfg(not(bootstrap))] |
|
259 |
+pVFTable: addr_of!(TYPE_INFO_VTABLE) as *const _, |
254 |
260 |
spare: core::ptr::null_mut(), |
255 |
261 |
name: TYPE_NAME, |
256 |
262 |
}; |