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.  */

Reply via email to