GCC alias para funcionar fuera de la unidad de traducción -AKA- ¿es esta incluso la herramienta adecuada para el trabajo?

Estoy trabajando con FreeRTOS en un STM32 (Cortex-M3) y estoy usando la biblioteca CMSIS de ST para arrancar todo.

La biblioteca CMSIS define el símbolo débilSVC_Handler en el archivo de inicio ".s". Debe anularse en algún lugar para obtener su ISR en la tabla de vectores de interrupción. FreeRTOS definevPortSVCHandler, que es el ISR que quiero que maneje la interrupción SVC.

Me gustaría "pegar" los dos juntos usando mi código de aplicación (es decir, sin modificar FreeRTOS o el código fuente de CMSIS). Pensé que un alias sería la herramienta adecuada para el trabajo, así que intenté esto (en un archivo fuente separado, main.c):

void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));

Eso da como resultado:error: 'SVC_Handler' aliased to undefined symbol 'vPortSVCHandler'

Resulta, de acuerdo con la documentación de GCC aquíhttp: //gcc.gnu.org/onlinedocs/gcc/Function-Attributes.htm, para utilizar laalias atributo, no puede alias un símbolo fuera de la unidad de traducción. Entonces pensé que intentaríaextern el símbolo en main.c así:

extern void vPortSVCHandler( void ) __attribute__ (( naked ));
void SVC_Handler(void) __attribute__ ((alias ("vPortSVCHandler")));

Esto genera el mismo error. ¿¿¿Alguna sugerencia??

Realmente me gustaría evitar modificar cualquiera de las bibliotecas. Sé que podría escribir una funciónSVC_Handler que simplemente llama avPortSVCHandler, pero eso podría agregar una sobrecarga innecesaria al ISR (posiblemente dependiendo de la configuración de optimización). Nota: Los ejemplos de FreeRTOS logran esto a través de un archivo de inicio personalizado. Estoy buscando una manera de hacer esto desde C mi script de enlazador.

Versión del compilador: gcc versión 4.5.2 (Sourcery G ++ Lite 2011.03-42)Target: arm-none-eabi

Respuestas a la pregunta(4)

Su respuesta a la pregunta