@@ -145,67 +145,61 @@ pub const ENTRY_TRAMPOLINE: Option<unsafe extern "C" fn() -> !> = Some(entry_tra
145
145
pub const ENTRY_TRAMPOLINE : Option < unsafe extern "C" fn ( ) -> !> = Some ( entry_trampoline) ;
146
146
147
147
#[ cfg( target_arch = "x86_64" ) ]
148
- #[ naked]
148
+ #[ unsafe ( naked) ]
149
149
unsafe extern "C" fn entry_trampoline ( ) -> ! {
150
- unsafe {
151
- core:: arch:: naked_asm!(
152
- "lea r10, [rip + {context}]" ,
153
- "mov r11, [r10 + {size} * 1]" , // .env_entry
154
- "test r11, r11" ,
155
- "jz 2f" ,
156
- "mov r10, [r10 + {size} * 2]" , // .env_string
157
- "mov [r11], r10" ,
158
- "2:" ,
159
- "jmp [rip + {context}]" ,
160
- context = sym TRAMPOLINE_CONTEXT ,
161
- size = const core:: mem:: size_of:: <* const u8 >( ) ,
162
- )
163
- }
150
+ core:: arch:: naked_asm!(
151
+ "lea r10, [rip + {context}]" ,
152
+ "mov r11, [r10 + {size} * 1]" , // .env_entry
153
+ "test r11, r11" ,
154
+ "jz 2f" ,
155
+ "mov r10, [r10 + {size} * 2]" , // .env_string
156
+ "mov [r11], r10" ,
157
+ "2:" ,
158
+ "jmp [rip + {context}]" ,
159
+ context = sym TRAMPOLINE_CONTEXT ,
160
+ size = const core:: mem:: size_of:: <* const u8 >( ) ,
161
+ )
164
162
}
165
163
166
164
#[ cfg( target_arch = "aarch64" ) ]
167
165
pub const ENTRY_TRAMPOLINE : Option < unsafe extern "C" fn ( ) -> !> = Some ( entry_trampoline) ;
168
166
169
167
#[ cfg( target_arch = "aarch64" ) ]
170
- #[ naked]
168
+ #[ unsafe ( naked) ]
171
169
unsafe extern "C" fn entry_trampoline ( ) -> ! {
172
- unsafe {
173
- core:: arch:: naked_asm!(
174
- "adrp x8, {context}" ,
175
- "ldr x9, [x8, {env_entry_off}]" , // .env_entry
176
- "cbz x9, 2f" ,
177
- "ldr x10, [x8, {env_string_off}]" , // .env_string
178
- "str x10, [x9]" ,
179
- "2:" ,
180
- "ldr x8, [x8]" ,
181
- "br x8" ,
182
- context = sym TRAMPOLINE_CONTEXT ,
183
- env_entry_off = const TrampolineContext :: ENV_ENTRY_OFFSET ,
184
- env_string_off = const TrampolineContext :: ENV_STRING_OFFSET ,
185
- )
186
- }
170
+ core:: arch:: naked_asm!(
171
+ "adrp x8, {context}" ,
172
+ "ldr x9, [x8, {env_entry_off}]" , // .env_entry
173
+ "cbz x9, 2f" ,
174
+ "ldr x10, [x8, {env_string_off}]" , // .env_string
175
+ "str x10, [x9]" ,
176
+ "2:" ,
177
+ "ldr x8, [x8]" ,
178
+ "br x8" ,
179
+ context = sym TRAMPOLINE_CONTEXT ,
180
+ env_entry_off = const TrampolineContext :: ENV_ENTRY_OFFSET ,
181
+ env_string_off = const TrampolineContext :: ENV_STRING_OFFSET ,
182
+ )
187
183
}
188
184
189
185
#[ cfg( target_arch = "riscv64" ) ]
190
- #[ naked]
186
+ #[ unsafe ( naked) ]
191
187
unsafe extern "C" fn entry_trampoline ( ) -> ! {
192
- unsafe {
193
- core:: arch:: naked_asm!(
194
- "1:" ,
195
- "auipc t0, %pcrel_hi({context})" ,
196
- "addi t0, t0, %pcrel_lo(1b)" ,
197
- "ld t1, {env_entry_off}(t0)" , // .env_entry
198
- "beqz t1, 2f" ,
199
- "ld t2, {env_string_off}(t0)" , // .env_string
200
- "sd t2, 0(t1)" ,
201
- "2:" ,
202
- "ld t0, 0(t0)" ,
203
- "jr t0" ,
204
- context = sym TRAMPOLINE_CONTEXT ,
205
- env_entry_off = const TrampolineContext :: ENV_ENTRY_OFFSET ,
206
- env_string_off = const TrampolineContext :: ENV_STRING_OFFSET ,
207
- )
208
- }
188
+ core:: arch:: naked_asm!(
189
+ "1:" ,
190
+ "auipc t0, %pcrel_hi({context})" ,
191
+ "addi t0, t0, %pcrel_lo(1b)" ,
192
+ "ld t1, {env_entry_off}(t0)" , // .env_entry
193
+ "beqz t1, 2f" ,
194
+ "ld t2, {env_string_off}(t0)" , // .env_string
195
+ "sd t2, 0(t1)" ,
196
+ "2:" ,
197
+ "ld t0, 0(t0)" ,
198
+ "jr t0" ,
199
+ context = sym TRAMPOLINE_CONTEXT ,
200
+ env_entry_off = const TrampolineContext :: ENV_ENTRY_OFFSET ,
201
+ env_string_off = const TrampolineContext :: ENV_STRING_OFFSET ,
202
+ )
209
203
}
210
204
211
205
// !!!!
0 commit comments