@@ -31,10 +31,14 @@ macro_rules! segment_impl {
31
31
32
32
unsafe fn set_reg( sel: SegmentSelector ) {
33
33
#[ cfg( feature = "inline_asm" ) ]
34
- asm!( concat!( "mov " , $name, ", {0:x}" ) , in( reg) sel. 0 , options( nostack, preserves_flags) ) ;
34
+ unsafe {
35
+ asm!( concat!( "mov " , $name, ", {0:x}" ) , in( reg) sel. 0 , options( nostack, preserves_flags) ) ;
36
+ }
35
37
36
38
#[ cfg( not( feature = "inline_asm" ) ) ]
37
- crate :: asm:: $asm_load( sel. 0 ) ;
39
+ unsafe {
40
+ crate :: asm:: $asm_load( sel. 0 ) ;
41
+ }
38
42
}
39
43
}
40
44
} ;
@@ -59,10 +63,14 @@ macro_rules! segment64_impl {
59
63
60
64
unsafe fn write_base( base: VirtAddr ) {
61
65
#[ cfg( feature = "inline_asm" ) ]
62
- asm!( concat!( "wr" , $name, "base {}" ) , in( reg) base. as_u64( ) , options( nostack, preserves_flags) ) ;
66
+ unsafe {
67
+ asm!( concat!( "wr" , $name, "base {}" ) , in( reg) base. as_u64( ) , options( nostack, preserves_flags) ) ;
68
+ }
63
69
64
70
#[ cfg( not( feature = "inline_asm" ) ) ]
65
- crate :: asm:: $asm_wr( base. as_u64( ) ) ;
71
+ unsafe {
72
+ crate :: asm:: $asm_wr( base. as_u64( ) ) ;
73
+ }
66
74
}
67
75
}
68
76
} ;
@@ -81,19 +89,23 @@ impl Segment for CS {
81
89
/// for 64-bit far calls/jumps in long-mode, AMD does not.
82
90
unsafe fn set_reg ( sel : SegmentSelector ) {
83
91
#[ cfg( feature = "inline_asm" ) ]
84
- asm ! (
85
- "push {sel}" ,
86
- "lea {tmp}, [1f + rip]" ,
87
- "push {tmp}" ,
88
- "retfq" ,
89
- "1:" ,
90
- sel = in( reg) u64 :: from( sel. 0 ) ,
91
- tmp = lateout( reg) _,
92
- options( preserves_flags) ,
93
- ) ;
92
+ unsafe {
93
+ asm ! (
94
+ "push {sel}" ,
95
+ "lea {tmp}, [1f + rip]" ,
96
+ "push {tmp}" ,
97
+ "retfq" ,
98
+ "1:" ,
99
+ sel = in( reg) u64 :: from( sel. 0 ) ,
100
+ tmp = lateout( reg) _,
101
+ options( preserves_flags) ,
102
+ ) ;
103
+ }
94
104
95
105
#[ cfg( not( feature = "inline_asm" ) ) ]
96
- crate :: asm:: x86_64_asm_set_cs ( u64:: from ( sel. 0 ) ) ;
106
+ unsafe {
107
+ crate :: asm:: x86_64_asm_set_cs ( u64:: from ( sel. 0 ) ) ;
108
+ }
97
109
}
98
110
}
99
111
@@ -114,10 +126,14 @@ impl GS {
114
126
/// swap operation cannot lead to undefined behavior.
115
127
pub unsafe fn swap ( ) {
116
128
#[ cfg( feature = "inline_asm" ) ]
117
- asm ! ( "swapgs" , options( nostack, preserves_flags) ) ;
129
+ unsafe {
130
+ asm ! ( "swapgs" , options( nostack, preserves_flags) ) ;
131
+ }
118
132
119
133
#[ cfg( not( feature = "inline_asm" ) ) ]
120
- crate :: asm:: x86_64_asm_swapgs ( ) ;
134
+ unsafe {
135
+ crate :: asm:: x86_64_asm_swapgs ( ) ;
136
+ }
121
137
}
122
138
}
123
139
@@ -126,49 +142,49 @@ impl GS {
126
142
#[ allow( clippy:: missing_safety_doc) ]
127
143
#[ inline]
128
144
pub unsafe fn set_cs ( sel : SegmentSelector ) {
129
- CS :: set_reg ( sel)
145
+ unsafe { CS :: set_reg ( sel) }
130
146
}
131
147
/// Alias for [`SS::set_reg()`]
132
148
#[ deprecated( since = "0.14.4" , note = "use `SS::set_reg()` instead" ) ]
133
149
#[ allow( clippy:: missing_safety_doc) ]
134
150
#[ inline]
135
151
pub unsafe fn load_ss ( sel : SegmentSelector ) {
136
- SS :: set_reg ( sel)
152
+ unsafe { SS :: set_reg ( sel) }
137
153
}
138
154
/// Alias for [`DS::set_reg()`]
139
155
#[ deprecated( since = "0.14.4" , note = "use `DS::set_reg()` instead" ) ]
140
156
#[ allow( clippy:: missing_safety_doc) ]
141
157
#[ inline]
142
158
pub unsafe fn load_ds ( sel : SegmentSelector ) {
143
- DS :: set_reg ( sel)
159
+ unsafe { DS :: set_reg ( sel) }
144
160
}
145
161
/// Alias for [`ES::set_reg()`]
146
162
#[ deprecated( since = "0.14.4" , note = "use `ES::set_reg()` instead" ) ]
147
163
#[ allow( clippy:: missing_safety_doc) ]
148
164
#[ inline]
149
165
pub unsafe fn load_es ( sel : SegmentSelector ) {
150
- ES :: set_reg ( sel)
166
+ unsafe { ES :: set_reg ( sel) }
151
167
}
152
168
/// Alias for [`FS::set_reg()`]
153
169
#[ deprecated( since = "0.14.4" , note = "use `FS::set_reg()` instead" ) ]
154
170
#[ allow( clippy:: missing_safety_doc) ]
155
171
#[ inline]
156
172
pub unsafe fn load_fs ( sel : SegmentSelector ) {
157
- FS :: set_reg ( sel)
173
+ unsafe { FS :: set_reg ( sel) }
158
174
}
159
175
/// Alias for [`GS::set_reg()`]
160
176
#[ deprecated( since = "0.14.4" , note = "use `GS::set_reg()` instead" ) ]
161
177
#[ allow( clippy:: missing_safety_doc) ]
162
178
#[ inline]
163
179
pub unsafe fn load_gs ( sel : SegmentSelector ) {
164
- GS :: set_reg ( sel)
180
+ unsafe { GS :: set_reg ( sel) }
165
181
}
166
182
/// Alias for [`GS::swap()`]
167
183
#[ deprecated( since = "0.14.4" , note = "use `GS::swap()` instead" ) ]
168
184
#[ allow( clippy:: missing_safety_doc) ]
169
185
#[ inline]
170
186
pub unsafe fn swap_gs ( ) {
171
- GS :: swap ( )
187
+ unsafe { GS :: swap ( ) }
172
188
}
173
189
/// Alias for [`CS::get_reg()`]
174
190
#[ deprecated( since = "0.14.4" , note = "use `CS::get_reg()` instead" ) ]
@@ -184,7 +200,7 @@ pub fn cs() -> SegmentSelector {
184
200
#[ allow( clippy:: missing_safety_doc) ]
185
201
#[ inline]
186
202
pub unsafe fn wrfsbase ( val : u64 ) {
187
- FS :: write_base ( VirtAddr :: new ( val) )
203
+ unsafe { FS :: write_base ( VirtAddr :: new ( val) ) }
188
204
}
189
205
/// Alias for [`FS::read_base()`]
190
206
#[ deprecated( since = "0.14.4" , note = "use `FS::read_base()` instead" ) ]
@@ -200,7 +216,7 @@ pub unsafe fn rdfsbase() -> u64 {
200
216
#[ allow( clippy:: missing_safety_doc) ]
201
217
#[ inline]
202
218
pub unsafe fn wrgsbase ( val : u64 ) {
203
- GS :: write_base ( VirtAddr :: new ( val) )
219
+ unsafe { GS :: write_base ( VirtAddr :: new ( val) ) }
204
220
}
205
221
/// Alias for [`GS::read_base()`]
206
222
#[ deprecated( since = "0.14.4" , note = "use `GS::read_base()` instead" ) ]
0 commit comments