Hello,

the set_vector() function yields this warning on SPARC:

[ 107/4376] Compiling bsps/sparc/leon3/start/setvec.c
../../../bsps/sparc/leon3/start/setvec.c: In function 'set_vector':
../../../bsps/sparc/leon3/start/setvec.c:51:43: warning: passing argument 2 of '_CPU_ISR_install_raw_handler' from incompatible pointer type [-Wincompatible-pointer-types]    51 |     _CPU_ISR_install_raw_handler( vector, handler, (void *)&previous_isr );
      |                                           ^~~~~~~
      |                                           |
      |                                           rtems_isr_entry {aka void (*)(unsigned int)}
In file included from ../../../cpukit/include/rtems/config.h:30,
                 from ../../../cpukit/include/rtems.h:56,
                 from ../../../bsps/include/bsp/default-initial-extension.h:26,
                 from ../../../bsps/sparc/leon3/include/bsp.h:32,
                 from ../../../bsps/sparc/leon3/start/setvec.c:36:
../../../cpukit/score/cpu/sparc/include/rtems/score/cpu.h:958:24: note: expected 'CPU_ISR_raw_handler' {aka 'void (*)(void)'} but argument is of type 'rtems_isr_entry' {aka 'void (*)(unsigned int)'}
  958 |   CPU_ISR_raw_handler  new_handler,
      |   ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~

I think this function is broken by design. It is always called with the third parameter set to 1 in the RTEMS code base:

bsps/sparc/erc32/start/bspsmp.c:  set_vector( bsp_inter_processor_interrupt, IPI_VECTOR, 1 );
bsps/sparc/erc32/start/setvec.c:/*  set_vector
bsps/sparc/erc32/start/setvec.c:rtems_isr_entry set_vector(                   /* returns old vector */ bsps/sparc/erc32/start/spurious.c: *  Install the spurious handler for most traps. Note that set_vector() bsps/sparc/erc32/start/spurious.c:    set_vector( (rtems_isr_entry) bsp_spurious_handler, bsps/sparc/erc32/console/erc32_console.c: set_vector(erc32_console_isr_a, CONSOLE_UART_A_TRAP, 1); bsps/sparc/erc32/console/erc32_console.c: set_vector(erc32_console_isr_b, CONSOLE_UART_B_TRAP, 1); bsps/sparc/erc32/console/erc32_console.c: set_vector(erc32_console_isr_error, CONSOLE_UART_ERROR_TRAP, 1);
bsps/sparc/erc32/clock/ckinit.c:  set_vector( _new, CLOCK_VECTOR, 1 )
bsps/sparc/erc32/include/bsp.h:rtems_isr_entry set_vector(                     /* returns old vector */
bsps/sparc/erc32/include/tm27.h:  set_vector( (handler), TEST_VECTOR, 1 );
bsps/sparc/erc32/include/tm27.h:  set_vector( (handler), TEST_VECTOR, 1 ); \
bsps/sparc/erc32/include/tm27.h:  set_vector( (handler), TEST_VECTOR2, 1 );
bsps/sparc/leon3/mpci/mpisr.c:  set_vector((rtems_isr_entry) Shm_isr, LEON_TRAP_TYPE(LEON3_mp_irq), 1); bsps/sparc/leon3/start/bspsmp.c: set_vector(bsp_inter_processor_interrupt, LEON_TRAP_TYPE(LEON3_mp_irq), 1); bsps/sparc/leon3/start/setvec.c:rtems_isr_entry set_vector(                   /* returns old vector */ bsps/sparc/leon3/start/spurious.c: *  Install the spurious handler for most traps. Note that set_vector()
bsps/sparc/leon3/start/spurious.c:    set_vector(
bsps/sparc/leon3/include/bsp.h:rtems_isr_entry set_vector(                     /* returns old vector */
bsps/sparc/leon3/include/tm27.h:  set_vector( (handler), TEST_VECTOR, 1 );
bsps/sparc/leon3/include/tm27.h:  set_vector( (handler), TEST_VECTOR, 1 ); \
bsps/sparc/leon3/include/tm27.h:  set_vector( (handler), TEST_VECTOR2, 1 );
bsps/sparc/leon2/start/setvec.c:/*  set_vector
bsps/sparc/leon2/start/setvec.c:rtems_isr_entry set_vector(                   /* returns old vector */ bsps/sparc/leon2/start/spurious.c: *  Install the spurious handler for most traps. Note that set_vector()
bsps/sparc/leon2/start/spurious.c:    set_vector(
bsps/sparc/leon2/console/console.c:  set_vector( console_isr_a, CONSOLE_UART_1_TRAP, 1 ); bsps/sparc/leon2/console/console.c:  set_vector( console_isr_b, CONSOLE_UART_2_TRAP, 1 );
bsps/sparc/leon2/clock/ckinit.c:  set_vector( _new, CLOCK_VECTOR, 1 )
bsps/sparc/leon2/include/bsp.h:rtems_isr_entry set_vector(                     /* returns old vector */
bsps/sparc/leon2/include/tm27.h:  set_vector( (handler), TEST_VECTOR, 1 );
bsps/sparc/leon2/include/tm27.h:  set_vector( (handler), TEST_VECTOR, 1 ); \
bsps/sparc/leon2/include/tm27.h:  set_vector( (handler), TEST_VECTOR2, 1 );
bsps/sparc/shared/gnatcommon.c: set_vector (__gnat_exception_handler, SPARC_SYNCHRONOUS_TRAP (trap), 1);

I suggest to remove this function and replace it with rtems_interrupt_catch() and add the interrupt enable to rtems_interrupt_catch().

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to