@@ -264,6 +264,7 @@ impl PacEnumItem {
264
264
vectors
265
265
}
266
266
267
+ #[ cfg( feature = "rt-v-trap" ) ]
267
268
fn vector_table ( & self ) -> TokenStream2 {
268
269
let align = match std:: env:: var ( "RISCV_MTVEC_ALIGN" ) {
269
270
Ok ( x) => x. parse :: < u32 > ( ) . ok ( ) ,
@@ -280,7 +281,7 @@ impl PacEnumItem {
280
281
} ;
281
282
let mut asm = format ! (
282
283
r#"
283
- #[cfg(all(feature = "v-trap", any(target_arch = "riscv32", target_arch = "riscv64") ))]
284
+ #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
284
285
core::arch::global_asm!("
285
286
.section .trap.vector, \"ax\"
286
287
.global _vector_table
@@ -328,8 +329,6 @@ core::arch::global_asm!("
328
329
let max_discriminant = self . max_number ;
329
330
let valid_matches = self . valid_matches ( ) ;
330
331
331
- let is_core_interrupt = matches ! ( attr, PacTrait :: Interrupt ( InterruptType :: Core ) ) ;
332
-
333
332
// Push the trait implementation
334
333
res. push ( quote ! {
335
334
unsafe impl riscv:: #trait_name for #name {
@@ -354,54 +353,51 @@ core::arch::global_asm!("
354
353
res. push ( quote ! { unsafe impl riscv:: #marker_trait_name for #name { } } ) ;
355
354
}
356
355
356
+ #[ cfg( feature = "rt" ) ]
357
357
if let Some ( trap_config) = attr. trap_config ( ) {
358
- let default_handler = & trap_config. default_handler ;
359
- let extern_signature = trap_config. extern_signature ( ) ;
360
- let handler_input = trap_config. handler_input ( ) ;
361
- let array_signature = trap_config. array_signature ( ) ;
362
- let dispatch_fn_name = & trap_config. dispatch_fn_name ;
363
- let dispatch_fn_args = & trap_config. dispatch_fn_signature ( ) ;
364
- let vector_table = & trap_config. handlers_array_name ;
365
-
366
- let handlers = self . handlers ( & trap_config) ;
367
- let interrupt_array = self . handlers_array ( ) ;
368
- let cfg_v_trap = match is_core_interrupt {
369
- true => Some ( quote ! ( #[ cfg( not( feature = "v-trap" ) ) ] ) ) ,
370
- false => None ,
371
- } ;
372
-
373
- // Push the interrupt handler functions and the interrupt array
374
- res. push ( quote ! {
375
- #cfg_v_trap
376
- extern "C" {
377
- #( #handlers; ) *
358
+ match attr {
359
+ #[ cfg( feature = "rt-v-trap" ) ]
360
+ PacTrait :: Interrupt ( InterruptType :: Core ) => {
361
+ res. push ( self . vector_table ( ) ) ;
378
362
}
379
-
380
- #cfg_v_trap
381
- #[ doc( hidden) ]
382
- #[ no_mangle]
383
- pub static #vector_table: [ Option <unsafe extern "C" fn ( #( #array_signature) , * ) >; #max_discriminant + 1 ] = [
384
- #( #interrupt_array) , *
385
- ] ;
386
-
387
- #cfg_v_trap
388
- #[ inline]
389
- #[ no_mangle]
390
- unsafe extern "C" fn #dispatch_fn_name( #( #dispatch_fn_args) , * ) {
391
- extern "C" {
392
- fn #default_handler( #( #extern_signature) , * ) ;
393
- }
394
-
395
- match #vector_table. get( code) {
396
- Some ( Some ( handler) ) => handler( #( #handler_input) , * ) ,
397
- _ => #default_handler( #( #handler_input) , * ) ,
398
- }
363
+ _ => {
364
+ let default_handler = & trap_config. default_handler ;
365
+ let extern_signature = trap_config. extern_signature ( ) ;
366
+ let handler_input = trap_config. handler_input ( ) ;
367
+ let array_signature = trap_config. array_signature ( ) ;
368
+ let dispatch_fn_name = & trap_config. dispatch_fn_name ;
369
+ let dispatch_fn_args = & trap_config. dispatch_fn_signature ( ) ;
370
+ let vector_table = & trap_config. handlers_array_name ;
371
+
372
+ let handlers = self . handlers ( & trap_config) ;
373
+ let interrupt_array = self . handlers_array ( ) ;
374
+
375
+ res. push ( quote ! {
376
+ extern "C" {
377
+ #( #handlers; ) *
378
+ }
379
+
380
+ #[ doc( hidden) ]
381
+ #[ no_mangle]
382
+ pub static #vector_table: [ Option <unsafe extern "C" fn ( #( #array_signature) , * ) >; #max_discriminant + 1 ] = [
383
+ #( #interrupt_array) , *
384
+ ] ;
385
+
386
+ #[ inline]
387
+ #[ no_mangle]
388
+ unsafe extern "C" fn #dispatch_fn_name( #( #dispatch_fn_args) , * ) {
389
+ extern "C" {
390
+ fn #default_handler( #( #extern_signature) , * ) ;
391
+ }
392
+
393
+ match #vector_table. get( code) {
394
+ Some ( Some ( handler) ) => handler( #( #handler_input) , * ) ,
395
+ _ => #default_handler( #( #handler_input) , * ) ,
396
+ }
397
+ }
398
+ } ) ;
399
399
}
400
- } ) ;
401
- }
402
-
403
- if is_core_interrupt {
404
- res. push ( self . vector_table ( ) ) ;
400
+ }
405
401
}
406
402
407
403
res
0 commit comments