@@ -8,10 +8,6 @@ use std::mem;
8
8
9
9
use super :: * ;
10
10
11
- use tls:: MemoryExt ;
12
-
13
- use super :: memory:: MemoryKind ;
14
-
15
11
pub trait EvalContextExt < ' tcx , ' mir > {
16
12
/// Emulate calling a foreign item, fail if the item is not supported.
17
13
/// This function will handle `goto_block` if needed.
@@ -129,7 +125,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
129
125
self . write_null ( dest) ?;
130
126
} else {
131
127
let align = self . tcx . data_layout . pointer_align ;
132
- let ptr = self . memory . allocate ( Size :: from_bytes ( size) , align, MemoryKind :: C . into ( ) ) ?;
128
+ let ptr = self . memory . allocate ( Size :: from_bytes ( size) , align, MiriMemoryKind :: C . into ( ) ) ?;
133
129
self . write_scalar ( Scalar :: Ptr ( ptr) , dest) ?;
134
130
}
135
131
}
@@ -140,7 +136,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
140
136
self . memory . deallocate (
141
137
ptr. to_ptr ( ) ?,
142
138
None ,
143
- MemoryKind :: C . into ( ) ,
139
+ MiriMemoryKind :: C . into ( ) ,
144
140
) ?;
145
141
}
146
142
}
@@ -156,7 +152,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
156
152
}
157
153
let ptr = self . memory . allocate ( Size :: from_bytes ( size) ,
158
154
Align :: from_bytes ( align, align) . unwrap ( ) ,
159
- MemoryKind :: Rust . into ( ) ) ?;
155
+ MiriMemoryKind :: Rust . into ( ) ) ?;
160
156
self . write_scalar ( Scalar :: Ptr ( ptr) , dest) ?;
161
157
}
162
158
"__rust_alloc_zeroed" => {
@@ -170,7 +166,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
170
166
}
171
167
let ptr = self . memory . allocate ( Size :: from_bytes ( size) ,
172
168
Align :: from_bytes ( align, align) . unwrap ( ) ,
173
- MemoryKind :: Rust . into ( ) ) ?;
169
+ MiriMemoryKind :: Rust . into ( ) ) ?;
174
170
self . memory . write_repeat ( ptr. into ( ) , 0 , Size :: from_bytes ( size) ) ?;
175
171
self . write_scalar ( Scalar :: Ptr ( ptr) , dest) ?;
176
172
}
@@ -187,7 +183,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
187
183
self . memory . deallocate (
188
184
ptr,
189
185
Some ( ( Size :: from_bytes ( old_size) , Align :: from_bytes ( align, align) . unwrap ( ) ) ) ,
190
- MemoryKind :: Rust . into ( ) ,
186
+ MiriMemoryKind :: Rust . into ( ) ,
191
187
) ?;
192
188
}
193
189
"__rust_realloc" => {
@@ -207,7 +203,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
207
203
Align :: from_bytes ( align, align) . unwrap ( ) ,
208
204
Size :: from_bytes ( new_size) ,
209
205
Align :: from_bytes ( align, align) . unwrap ( ) ,
210
- MemoryKind :: Rust . into ( ) ,
206
+ MiriMemoryKind :: Rust . into ( ) ,
211
207
) ?;
212
208
self . write_scalar ( Scalar :: Ptr ( new_ptr) , dest) ?;
213
209
}
@@ -365,7 +361,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
365
361
}
366
362
if let Some ( old) = success {
367
363
if let Some ( var) = old {
368
- self . memory . deallocate ( var, None , MemoryKind :: Env . into ( ) ) ?;
364
+ self . memory . deallocate ( var, None , MiriMemoryKind :: Env . into ( ) ) ?;
369
365
}
370
366
self . write_null ( dest) ?;
371
367
} else {
@@ -391,7 +387,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
391
387
let value_copy = self . memory . allocate (
392
388
Size :: from_bytes ( ( value. len ( ) + 1 ) as u64 ) ,
393
389
Align :: from_bytes ( 1 , 1 ) . unwrap ( ) ,
394
- MemoryKind :: Env . into ( ) ,
390
+ MiriMemoryKind :: Env . into ( ) ,
395
391
) ?;
396
392
self . memory . write_bytes ( value_copy. into ( ) , & value) ?;
397
393
let trailing_zero_ptr = value_copy. offset ( Size :: from_bytes ( value. len ( ) as u64 ) , & self ) ?. into ( ) ;
@@ -401,7 +397,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
401
397
value_copy,
402
398
)
403
399
{
404
- self . memory . deallocate ( var, None , MemoryKind :: Env . into ( ) ) ?;
400
+ self . memory . deallocate ( var, None , MiriMemoryKind :: Env . into ( ) ) ?;
405
401
}
406
402
self . write_null ( dest) ?;
407
403
} else {
@@ -504,7 +500,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
504
500
let key_layout = self . layout_of ( key_type) ?;
505
501
506
502
// Create key and write it into the memory where key_ptr wants it
507
- let key = self . memory . create_tls_key ( dtor) as u128 ;
503
+ let key = self . machine . tls . create_tls_key ( dtor, * self . tcx ) as u128 ;
508
504
if key_layout. size . bits ( ) < 128 && key >= ( 1u128 << key_layout. size . bits ( ) as u128 ) {
509
505
return err ! ( OutOfTls ) ;
510
506
}
@@ -520,19 +516,19 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
520
516
}
521
517
"pthread_key_delete" => {
522
518
let key = self . read_scalar ( args[ 0 ] ) ?. to_bytes ( ) ?;
523
- self . memory . delete_tls_key ( key) ?;
519
+ self . machine . tls . delete_tls_key ( key) ?;
524
520
// Return success (0)
525
521
self . write_null ( dest) ?;
526
522
}
527
523
"pthread_getspecific" => {
528
524
let key = self . read_scalar ( args[ 0 ] ) ?. to_bytes ( ) ?;
529
- let ptr = self . memory . load_tls ( key) ?;
525
+ let ptr = self . machine . tls . load_tls ( key) ?;
530
526
self . write_scalar ( ptr, dest) ?;
531
527
}
532
528
"pthread_setspecific" => {
533
529
let key = self . read_scalar ( args[ 0 ] ) ?. to_bytes ( ) ?;
534
530
let new_ptr = self . read_scalar ( args[ 1 ] ) ?. not_undef ( ) ?;
535
- self . memory . store_tls ( key, new_ptr) ?;
531
+ self . machine . tls . store_tls ( key, new_ptr) ?;
536
532
537
533
// Return success (0)
538
534
self . write_null ( dest) ?;
@@ -607,7 +603,7 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
607
603
// This just creates a key; Windows does not natively support TLS dtors.
608
604
609
605
// Create key and return it
610
- let key = self . memory . create_tls_key ( None ) as u128 ;
606
+ let key = self . machine . tls . create_tls_key ( None , * self . tcx ) as u128 ;
611
607
612
608
// Figure out how large a TLS key actually is. This is c::DWORD.
613
609
if dest. layout . size . bits ( ) < 128 && key >= ( 1u128 << dest. layout . size . bits ( ) as u128 ) {
@@ -617,13 +613,13 @@ impl<'a, 'mir, 'tcx: 'mir + 'a> EvalContextExt<'tcx, 'mir> for EvalContext<'a, '
617
613
}
618
614
"TlsGetValue" => {
619
615
let key = self . read_scalar ( args[ 0 ] ) ?. to_bytes ( ) ?;
620
- let ptr = self . memory . load_tls ( key) ?;
616
+ let ptr = self . machine . tls . load_tls ( key) ?;
621
617
self . write_scalar ( ptr, dest) ?;
622
618
}
623
619
"TlsSetValue" => {
624
620
let key = self . read_scalar ( args[ 0 ] ) ?. to_bytes ( ) ?;
625
621
let new_ptr = self . read_scalar ( args[ 1 ] ) ?. not_undef ( ) ?;
626
- self . memory . store_tls ( key, new_ptr) ?;
622
+ self . machine . tls . store_tls ( key, new_ptr) ?;
627
623
628
624
// Return success (1)
629
625
self . write_scalar ( Scalar :: from_int ( 1 , dest. layout . size ) , dest) ?;
0 commit comments