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