@@ -125,6 +125,39 @@ impl fmt::Debug for Frame {
125
125
}
126
126
}
127
127
128
+ #[ cfg( all( target_env = "sgx" , target_vendor = "fortanix" , not( feature = "std" ) ) ) ]
129
+ mod sgx_no_std_image_base {
130
+ use core:: ffi:: c_void;
131
+ use core:: sync:: atomic:: { AtomicUsize , Ordering :: SeqCst } ;
132
+
133
+ static IMAGE_BASE : AtomicUsize = AtomicUsize :: new ( 0 ) ;
134
+
135
+ /// Set the image base address. This is only available for Fortanix SGX
136
+ /// target when the `std` feature is not enabled. This can be used in the
137
+ /// standard library to set the correct base address.
138
+ #[ doc( hidden) ]
139
+ pub fn set_image_base ( base_addr : * mut c_void ) {
140
+ IMAGE_BASE . store ( base_addr as _ , SeqCst ) ;
141
+ }
142
+
143
+ pub ( crate ) fn get_image_base ( ) -> * mut c_void {
144
+ IMAGE_BASE . load ( SeqCst ) as _
145
+ }
146
+ }
147
+
148
+ #[ cfg( all( target_env = "sgx" , target_vendor = "fortanix" , not( feature = "std" ) ) ) ]
149
+ pub use self :: sgx_no_std_image_base:: set_image_base;
150
+
151
+ #[ cfg( all( target_env = "sgx" , target_vendor = "fortanix" , not( feature = "std" ) ) ) ]
152
+ #[ deny( unused) ]
153
+ pub ( crate ) use self :: sgx_no_std_image_base:: get_image_base;
154
+
155
+ #[ cfg( all( target_env = "sgx" , target_vendor = "fortanix" , feature = "std" ) ) ]
156
+ #[ deny( unused) ]
157
+ pub ( crate ) fn get_image_base ( ) -> * mut c_void {
158
+ std:: os:: fortanix_sgx:: mem:: image_base ( ) as _
159
+ }
160
+
128
161
cfg_if:: cfg_if! {
129
162
// This needs to come first, to ensure that
130
163
// Miri takes priority over the host platform
0 commit comments