@@ -264,6 +264,7 @@ impl PacEnumItem {
264264 vectors
265265 }
266266
267+ #[ cfg( feature = "rt-v-trap" ) ]
267268 fn vector_table ( & self ) -> TokenStream2 {
268269 let align = match std:: env:: var ( "RISCV_MTVEC_ALIGN" ) {
269270 Ok ( x) => x. parse :: < u32 > ( ) . ok ( ) ,
@@ -280,7 +281,7 @@ impl PacEnumItem {
280281 } ;
281282 let mut asm = format ! (
282283 r#"
283- #[cfg(all(feature = "v-trap", any(target_arch = "riscv32", target_arch = "riscv64") ))]
284+ #[cfg(any(target_arch = "riscv32", target_arch = "riscv64"))]
284285core::arch::global_asm!("
285286 .section .trap.vector, \"ax\"
286287 .global _vector_table
@@ -328,8 +329,6 @@ core::arch::global_asm!("
328329 let max_discriminant = self . max_number ;
329330 let valid_matches = self . valid_matches ( ) ;
330331
331- let is_core_interrupt = matches ! ( attr, PacTrait :: Interrupt ( InterruptType :: Core ) ) ;
332-
333332 // Push the trait implementation
334333 res. push ( quote ! {
335334 unsafe impl riscv:: #trait_name for #name {
@@ -354,54 +353,51 @@ core::arch::global_asm!("
354353 res. push ( quote ! { unsafe impl riscv:: #marker_trait_name for #name { } } ) ;
355354 }
356355
356+ #[ cfg( feature = "rt" ) ]
357357 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 ( ) ) ;
378362 }
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+ } ) ;
399399 }
400- } ) ;
401- }
402-
403- if is_core_interrupt {
404- res. push ( self . vector_table ( ) ) ;
400+ }
405401 }
406402
407403 res
0 commit comments