From c975de1534f4b4092ad75f85353eec32a9a31b92 Mon Sep 17 00:00:00 2001 From: Boris Gjenero Date: Mon, 22 Oct 2012 21:30:01 +0200 Subject: SH gcc 4.6.3 with link-time optimization, for Archos targets This is work from FS#12431 synced to current HEAD and slightly tweaked (gcc 4.6.2 -> 4.6.3, binutils 2.21.1 -> 2.22) Change-Id: I76af91e80ac2a9c16a776c7f0a33cc51603bbf9b --- firmware/target/sh/adc-sh.c | 2 +- firmware/target/sh/archos/audio-archos.c | 8 ++++---- firmware/target/sh/archos/timer-archos.c | 2 +- firmware/target/sh/kernel-sh.c | 2 +- firmware/target/sh/system-sh.c | 11 ++++++++--- 5 files changed, 15 insertions(+), 10 deletions(-) (limited to 'firmware/target') diff --git a/firmware/target/sh/adc-sh.c b/firmware/target/sh/adc-sh.c index 2e6d6407b8..17f829ad97 100644 --- a/firmware/target/sh/adc-sh.c +++ b/firmware/target/sh/adc-sh.c @@ -59,7 +59,7 @@ static void adc_tick(void) ADCSR = ADCSR_ADST | ADCSR_ADIE | ADCSR_SCAN | 3; } -void ADITI(void) __attribute__((interrupt_handler)); +void ADITI(void) __attribute__((interrupt_handler)) USED_ATTR; void ADITI(void) { if(ADCSR & ADCSR_ADF) diff --git a/firmware/target/sh/archos/audio-archos.c b/firmware/target/sh/archos/audio-archos.c index 2c2579bec5..207f26f250 100644 --- a/firmware/target/sh/archos/audio-archos.c +++ b/firmware/target/sh/archos/audio-archos.c @@ -153,7 +153,7 @@ static void play_tick(void) } } -void DEI3(void) __attribute__((interrupt_handler)); +void DEI3(void) __attribute__((interrupt_handler)) USED_ATTR; void DEI3(void) { const void* start; @@ -177,7 +177,7 @@ void DEI3(void) CHCR3 &= ~0x0002; /* Clear DMA interrupt */ } -void IMIA1(void) __attribute__((interrupt_handler)); +void IMIA1(void) __attribute__((interrupt_handler)) USED_ATTR; void IMIA1(void) /* Timer 1 interrupt */ { if(playing) @@ -189,14 +189,14 @@ void IMIA1(void) /* Timer 1 interrupt */ #endif } -void IRQ6(void) __attribute__((interrupt_handler)); +void IRQ6(void) __attribute__((interrupt_handler)) USED_ATTR; void IRQ6(void) /* PB14: MAS stop demand IRQ */ { SCR0 &= ~0x80; } #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) -void IRQ3(void) __attribute__((interrupt_handler)); +void IRQ3(void) __attribute__((interrupt_handler)) USED_ATTR; void IRQ3(void) /* PA15: MAS demand IRQ */ { /* Begin with setting the IRQ to edge sensitive */ diff --git a/firmware/target/sh/archos/timer-archos.c b/firmware/target/sh/archos/timer-archos.c index 98a3afb4b6..251d68638a 100644 --- a/firmware/target/sh/archos/timer-archos.c +++ b/firmware/target/sh/archos/timer-archos.c @@ -23,7 +23,7 @@ #include "system.h" #include "timer.h" -void IMIA4(void) __attribute__((interrupt_handler)); +void IMIA4(void) __attribute__((interrupt_handler)) USED_ATTR; void IMIA4(void) { if (pfn_timer != NULL) diff --git a/firmware/target/sh/kernel-sh.c b/firmware/target/sh/kernel-sh.c index 65b27e47f0..d4cfaaa724 100644 --- a/firmware/target/sh/kernel-sh.c +++ b/firmware/target/sh/kernel-sh.c @@ -55,7 +55,7 @@ void tick_start(unsigned int interval_in_ms) TSTR |= 0x01; /* Start timer 1 */ } -void IMIA0(void) __attribute__ ((interrupt_handler)); +void IMIA0(void) __attribute__ ((interrupt_handler)) USED_ATTR; void IMIA0(void) { /* Run through the list of tick tasks */ diff --git a/firmware/target/sh/system-sh.c b/firmware/target/sh/system-sh.c index e054801b57..921d08f7b4 100644 --- a/firmware/target/sh/system-sh.c +++ b/firmware/target/sh/system-sh.c @@ -180,6 +180,7 @@ asm ( * Must go into the same section as the UIE() handler */ "\t.text\n" + ".global\t_UIE4\n" "_UIE4:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" "_UIE5:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" "_UIE6:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" @@ -286,13 +287,17 @@ asm ( "_UIE107:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" "_UIE108:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" "_UIE109:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\n" - + "_UIE:\tmov.l\t__UIE_k,r0\n" + "jmp\t@r0\n" + "nop\n" + ".align\t4\n" + "__UIE_k:\t.long\t__UIE\n" ); extern void UIE4(void); /* needed for calculating the UIE number */ -void UIE (unsigned int pc) __attribute__((section(".text"))); -void UIE (unsigned int pc) /* Unexpected Interrupt or Exception */ +void _UIE (unsigned int pc) __attribute__((section(".text"))) USED_ATTR; +void _UIE (unsigned int pc) /* Unexpected Interrupt or Exception */ { unsigned int n; -- cgit v1.2.3