On Mon, Aug 15, 2005 at 07:55:00PM +0200, Torsten Mohr wrote:
> I wonder now how to proceed, do i need to report this stuff officially
> somewhere?
I've taken the liberty of cleaning up the L_callt_save_interrupt
#ifdef, making it consistent with the following one for
L_callt_save_all_interrupt. (This not only removes the .text error, but
adopts the easier to handle layout of the latter.)
Would you mind applying the attached patch, and rebuilding v850e-gcc, to
check it works for you? I'd happily have a look at the elf generated
from a small test, if you'd like to send it off-list. (Just the
.call_table_data and .call_table_text sections would suffice.) Once
we're happy with it, I'll put the bug report and patch into bugzilla.
I'm happy to move over to a gcc mailing list, but am not currently
subscribed.
Erik
--- /mnt/usr/local/src/gcc-3.4.4/gcc/config/v850/lib1funcs.asm Thu Jan 1
04:22:33 2004
+++ /home/erik/tmp/lib1funcs.asm Tue Aug 16 12:05:36 2005
@@ -1428,7 +1428,7 @@
#ifdef L_callt_save_interrupt
- /* Put this functions into the call table area */
+ /* Put these functions into the call table area */
.call_table_text
/* Save registers r1, ep, gp, r10 on stack and load up with expected
values. */
@@ -1440,23 +1440,14 @@
st.w ep, 0[sp]
st.w gp, 4[sp]
st.w r1, 8[sp]
- /* R10 has alread been saved bofore callt ctoff(_save_interrupt). */
+ /* R10 has alread been saved before callt ctoff(_save_interrupt). */
/* st.w r10, 12[sp] */
mov hilo(__ep),ep
mov hilo(__gp),gp
ctret
- /* Place the offsets of the start of the routine into the call table.
*/
- .call_table_data
- .global __callt_save_interrupt
- .type __callt_save_interrupt,@function
-__callt_save_interrupt: .short ctoff(.L_save_interrupt)
-
- .call_table_text
-
/* Restore saved registers, deallocate stack and return from the
interrupt. */
- /* Called via: callt ctoff(__callt_restore_itnerrupt). */
- .text
+ /* Called via: callt ctoff(__callt_restore_interrupt). */
.align 2
.globl __return_interrupt
.type __return_interrupt,@function
@@ -1472,9 +1463,13 @@
addi 24, sp, sp
reti
- /* Place the offsets of the start of the routine into the call table.
*/
+ /* Place the offsets of the start of these routines into the call
table. */
.call_table_data
+ .global __callt_save_interrupt
+ .type __callt_save_interrupt,@function
+__callt_save_interrupt: .short ctoff(.L_save_interrupt)
+
.global __callt_return_interrupt
.type __callt_return_interrupt,@function
__callt_return_interrupt: .short ctoff(.L_return_interrupt)
@@ -1482,7 +1477,7 @@
#endif /* L_callt_save_interrupt */
#ifdef L_callt_save_all_interrupt
- /* Put this functions into the call table area. */
+ /* Put these functions into the call table area. */
.call_table_text
/* Save all registers except for those saved in __save_interrupt. */