]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
m68k: add cfi directives
authorAndreas Schwab <schwab@linux-m68k.org>
Thu, 5 Jan 2012 13:52:48 +0000 (14:52 +0100)
committerAndreas Schwab <schwab@linux-m68k.org>
Thu, 5 Jan 2012 13:52:48 +0000 (14:52 +0100)
23 files changed:
ChangeLog.m68k
sysdeps/m68k/dl-trampoline.S
sysdeps/m68k/m680x0/add_n.S
sysdeps/m68k/m680x0/lshift.S
sysdeps/m68k/m680x0/m68020/addmul_1.S
sysdeps/m68k/m680x0/m68020/mul_1.S
sysdeps/m68k/m680x0/m68020/submul_1.S
sysdeps/m68k/m680x0/rshift.S
sysdeps/m68k/m680x0/sub_n.S
sysdeps/m68k/memchr.S
sysdeps/m68k/rawmemchr.S
sysdeps/m68k/strchr.S
sysdeps/m68k/strchrnul.S
sysdeps/m68k/sysdep.h
sysdeps/unix/sysv/linux/m68k/clone.S
sysdeps/unix/sysv/linux/m68k/coldfire/m68k-helpers.S
sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helpers.S
sysdeps/unix/sysv/linux/m68k/nptl/sysdep-cancel.h
sysdeps/unix/sysv/linux/m68k/semtimedop.S
sysdeps/unix/sysv/linux/m68k/socket.S
sysdeps/unix/sysv/linux/m68k/sysdep.S
sysdeps/unix/sysv/linux/m68k/sysdep.h
sysdeps/unix/sysv/linux/m68k/vfork.S

index a234cfae619a71a1a944c6f1b48bdaeca4e601ce..8f62c71509fe704386ebc5cb74cc124e1bd84796 100644 (file)
@@ -1,3 +1,32 @@
+2012-01-05  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * sysdeps/m68k/dl-trampoline.S: Add cfi directives.
+       * sysdeps/m68k/memchr.S: Likewise.
+       * sysdeps/m68k/rawmemchr.S: Likewise.
+       * sysdeps/m68k/strchr.S: Likewise.
+       * sysdeps/m68k/strchrnul.S: Likewise.
+       * sysdeps/m68k/m680x0/add_n.S: Likewise.
+       * sysdeps/m68k/m680x0/lshift.S: Likewise.
+       * sysdeps/m68k/m680x0/rshift.S: Likewise.
+       * sysdeps/m68k/m680x0/sub_n.S: Likewise.
+       * sysdeps/m68k/m680x0/m68020/addmul_1.S: Likewise.
+       * sysdeps/m68k/m680x0/m68020/mul_1.S: Likewise.
+       * sysdeps/m68k/m680x0/m68020/submul_1.S: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/clone.S: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/semtimedop.S: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/socket.S: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/sysdep.S: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/vfork.S: Likewise.
+       * sysdeps/m68k/sysdep.h (CALL_MCOUNT): Likewise.
+       (ENTRY): Add cfi_startproc.
+       (END): Add cfi_endproc.
+       * sysdeps/unix/sysv/linux/m68k/coldfire/m68k-helpers.S: Remove
+       cfi_startproc/cfi_endproc.
+       * sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helpers.S: Likewise.
+       * sysdeps/unix/sysv/linux/m68k/nptl/sysdep-cancel.h (PSEUDO):
+       Likewise.
+
 2011-12-23  Andreas Schwab  <schwab@linux-m68k.org>
 
        * sysdeps/m68k/bits/byteswap.h (__bswap_constant_64): Protect long
index 0f4148b43ff83337900759550d2eaeea4e458a90..bdf3974e8c894bb900d5f08c4f7f4bdad2469f06 100644 (file)
@@ -1,5 +1,5 @@
 /* PLT trampolines.  m68k version.
-   Copyright (C) 2005, 2011 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2011, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
        .globl _dl_runtime_resolve
        .type _dl_runtime_resolve, @function
 _dl_runtime_resolve:
+       cfi_startproc
+       cfi_adjust_cfa_offset (8)
        | Save %a0 (struct return address) and %a1.
        move.l %a0, -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l %a1, -(%sp)
+       cfi_adjust_cfa_offset (4)
        | Call the real address resolver.
        jbsr _dl_fixup
        | Restore register %a0 and %a1.
        move.l (%sp)+, %a1
+       cfi_adjust_cfa_offset (-4)
        move.l (%sp)+, %a0
+       cfi_adjust_cfa_offset (-4)
        | Pop parameters
        addq.l #8, %sp
+       cfi_adjust_cfa_offset (-8)
        | Call real function.
 #ifdef __mcoldfire__
        move.l %d0,-(%sp)
+       cfi_adjust_cfa_offset (4)
        rts
 #else
        jmp (%d0)
 #endif
+       cfi_endproc
        .size _dl_runtime_resolve, . - _dl_runtime_resolve
 
        .text
        .globl _dl_runtime_profile
        .type _dl_runtime_profile, @function
 _dl_runtime_profile:
+       cfi_startproc
+       cfi_adjust_cfa_offset (8)
        pea 8(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l %a1, -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l %a0, -(%sp)
+       cfi_adjust_cfa_offset (4)
        pea -1.w
+       cfi_adjust_cfa_offset (4)
        | Push parameters for _dl_profile_fixup
        pea (%sp)
+       cfi_adjust_cfa_offset (4)
        pea 8(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 32(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 32(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 32(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
        subq.l #8, %sp
+       cfi_adjust_cfa_offset (8)
        | Call the real address resolver.
        jbsr _dl_profile_fixup
        | Pop parameters
        lea 28(%sp), %sp
+       cfi_adjust_cfa_offset (-28)
        move.l (%sp), %d1
        jpl 1f
        addq.l #4, %sp
+       cfi_adjust_cfa_offset (-4)
        | Restore register %a0 and %a1.
        move.l (%sp)+, %a0
+       cfi_adjust_cfa_offset (-4)
        move.l (%sp)+, %a1
+       cfi_adjust_cfa_offset (-4)
        lea 12(%sp), %sp
+       cfi_adjust_cfa_offset (-12)
        | Call real function.
 #ifdef __mcoldfire__
        move.l %d0,-(%sp)
+       cfi_adjust_cfa_offset (4)
        rts
 #else
        jmp (%d0)
@@ -85,7 +112,13 @@ _dl_runtime_profile:
            +4      %a0
           %sp      free
        */
+#ifdef __mcoldfire__
+       cfi_adjust_cfa_offset (20)
+#else
+       cfi_adjust_cfa_offset (24)
+#endif
 1:     move.l %a2, (%sp)
+       cfi_rel_offset (%a2, 0)
        move.l %sp, %a2
        move.l %sp, %a0
        lea 28(%sp), %a1
@@ -94,6 +127,7 @@ _dl_runtime_profile:
        and.l #-3, %d1
        sub.l %d1, %a0
        move.l %a0, %sp
+       cfi_def_cfa_register (%a2)
 #ifdef __mcoldfire__
        tst.l %d1
        beq 2f
@@ -129,7 +163,10 @@ _dl_runtime_profile:
        jsr (%d0)
 #endif
        move.l %a2, %sp
+       cfi_def_cfa_register (%sp)
        move.l (%sp)+, %a2
+       cfi_adjust_cfa_offset (4)
+       cfi_restore (%a2)
        /*
            +20     return address
            +16     PLT1
@@ -140,32 +177,52 @@ _dl_runtime_profile:
        */
 #ifdef __mcoldfire__
        fmove.d %fp0, -(%sp)
+       cfi_adjust_cfa_offset (8)
 #else
        fmove.x %fp0, -(%sp)
+       cfi_adjust_cfa_offset (12)
 #endif
        move.l %a0, -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l %d1, -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l %d0, -(%sp)
+       cfi_adjust_cfa_offset (4)
        pea (%sp)
+       cfi_adjust_cfa_offset (4)
 #ifdef __mcoldfire__
        pea 24(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 40(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 40(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
 #else
        pea 28(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 44(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l 44(%sp), -(%sp)
+       cfi_adjust_cfa_offset (4)
 #endif
        jbsr _dl_call_pltexit
        lea 16(%sp), %sp
+       cfi_adjust_cfa_offset (-16)
        move.l (%sp)+, %d0
+       cfi_adjust_cfa_offset (-4)
        move.l (%sp)+, %d1
+       cfi_adjust_cfa_offset (-4)
        move.l (%sp)+, %a0
+       cfi_adjust_cfa_offset (-4)
 #ifdef __mcoldfire__
        fmove.d (%sp)+, %fp0
+       cfi_adjust_cfa_offset (-8)
 #else
        fmove.x (%sp)+, %fp0
+       cfi_adjust_cfa_offset (-12)
 #endif
        lea 20(%sp), %sp
+       cfi_adjust_cfa_offset (-20)
        rts
+       cfi_endproc
        .size _dl_runtime_profile, . - _dl_runtime_profile
index a9558491e8651011539457461ee719cfe998e6b5..3011de6afc528a6083dd8e40355b439507eff319 100644 (file)
@@ -1,7 +1,7 @@
 /* mc68020 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
    sum in a third limb vector.
 
-Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -35,7 +35,11 @@ MA 02111-1307, USA. */
 ENTRY(__mpn_add_n)
 /* Save used registers on the stack.  */
        movel   R(d2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(a2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (R(d2), 4)
+       cfi_rel_offset (R(a2), 0)
 
 /* Copy the arguments to registers.  Better use movem?  */
        movel   MEM_DISP(sp,12),R(a2)
@@ -70,7 +74,11 @@ L(L2:)
 
 /* Restore used registers from stack frame.  */
        movel   MEM_POSTINC(sp),R(a2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(a2))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
 
        rts
 END(__mpn_add_n)
index 434b344bd46781418ffded1d00a68b37068de27f..047241ff5a99b61f4541072fdc9b13296efaeaa1 100644 (file)
@@ -1,6 +1,6 @@
 /* mc68020 __mpn_lshift -- Shift left a low-level natural-number integer.
 
-Copyright (C) 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -40,6 +40,13 @@ ENTRY(__mpn_lshift)
 
 /* Save used registers on the stack.  */
        moveml  R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (6*4)
+       cfi_rel_offset (R(d2), 0)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 8)
+       cfi_rel_offset (R(d5), 12)
+       cfi_rel_offset (R(d6), 16)
+       cfi_rel_offset (R(a2), 20)
 
 /* Copy the arguments to registers.  */
        movel   MEM_DISP(sp,28),R(res_ptr)
@@ -111,12 +118,21 @@ L(Lend:)
 
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
+       cfi_remember_state
+       cfi_adjust_cfa_offset (-6*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
+       cfi_restore (R(d5))
+       cfi_restore (R(d6))
+       cfi_restore (R(a2))
        rts
 
 /* We loop from least significant end of the arrays, which is only
    permissible if the source and destination don't overlap, since the
    function is documented to work for overlapping source and destination.  */
 
+       cfi_restore_state
 L(Lspecial:)
        clrl    R(d0)                   /* initialize carry */
        eorw    #1,R(s_size)
@@ -143,5 +159,12 @@ L(LL1:)
 L(LLend:)
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
+       cfi_adjust_cfa_offset (-6*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
+       cfi_restore (R(d5))
+       cfi_restore (R(d6))
+       cfi_restore (R(a2))
        rts
 END(__mpn_lshift)
index 05d1d8a804b7ed7d7f403b49d3b00980a3a066b8..478bff3dce9bd5e18b007bb66d16411106b527f7 100644 (file)
@@ -1,7 +1,7 @@
 /* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add
    the result to a second limb vector.
 
-Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -41,6 +41,11 @@ ENTRY(__mpn_addmul_1)
 
 /* Save used registers on the stack.  */
        moveml  R(d2)-R(d5),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4*4)
+       cfi_rel_offset (R(d2), 0)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 8)
+       cfi_rel_offset (R(d5), 12)
 
 /* Copy the arguments to registers.  Better use movem?  */
        movel   MEM_DISP(sp,20),R(res_ptr)
@@ -75,6 +80,11 @@ L(L1:)       movel   MEM_POSTINC(s1_ptr),R(d3)
 
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d5)
+       cfi_adjust_cfa_offset (-4*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
+       cfi_restore (R(d5))
 
        rts
 END(__mpn_addmul_1)
index f3e450ed93dc841fceb8f756e102fbab4c1f8158..6f68500210e9556e19415b51e0adc51aee8bd895 100644 (file)
@@ -1,7 +1,7 @@
 /* mc68020 __mpn_mul_1 -- Multiply a limb vector with a limb and store
    the result in a second limb vector.
 
-Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -41,11 +41,10 @@ ENTRY(__mpn_mul_1)
 
 /* Save used registers on the stack.  */
        moveml  R(d2)-R(d4),MEM_PREDEC(sp)
-#if 0
-       movel   R(d2),MEM_PREDEC(sp)
-       movel   R(d3),MEM_PREDEC(sp)
-       movel   R(d4),MEM_PREDEC(sp)
-#endif
+       cfi_adjust_cfa_offset (3*4)
+       cfi_rel_offset (R(d2), 0)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 8)
 
 /* Copy the arguments to registers.  Better use movem?  */
        movel   MEM_DISP(sp,16),R(res_ptr)
@@ -78,10 +77,9 @@ L(L1:)       movel   MEM_POSTINC(s1_ptr),R(d3)
 
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d4)
-#if 0
-       movel   MEM_POSTINC(sp),R(d4)
-       movel   MEM_POSTINC(sp),R(d3)
-       movel   MEM_POSTINC(sp),R(d2)
-#endif
+       cfi_adjust_cfa_offset (-3*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
        rts
 END(__mpn_mul_1)
index 7522046b431bdd9c196354cc7abaaf913cc87abf..bc1fd3aa635eb200fbb057e352a0485bca716bca 100644 (file)
@@ -1,7 +1,7 @@
 /* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract
    the result from a second limb vector.
 
-Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -41,6 +41,11 @@ ENTRY(__mpn_submul_1)
 
 /* Save used registers on the stack.  */
        moveml  R(d2)-R(d5),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4*4)
+       cfi_rel_offset (R(d2), 0)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 8)
+       cfi_rel_offset (R(d5), 12)
 
 /* Copy the arguments to registers.  Better use movem?  */
        movel   MEM_DISP(sp,20),R(res_ptr)
@@ -75,6 +80,11 @@ L(L1:)       movel   MEM_POSTINC(s1_ptr),R(d3)
 
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d5)
+       cfi_adjust_cfa_offset (-4*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
+       cfi_restore (R(d5))
 
        rts
 END(__mpn_submul_1)
index 5e6abceb9798dda1e0d1558cd4ce77099e880736..c6c720ae89eed2929206c3c50fae249c0c0794a3 100644 (file)
@@ -1,6 +1,6 @@
 /* mc68020 __mpn_rshift -- Shift right a low-level natural-number integer.
 
-Copyright (C) 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -39,6 +39,13 @@ MA 02111-1307, USA. */
 ENTRY(__mpn_rshift)
 /* Save used registers on the stack.  */
        moveml  R(d2)-R(d6)/R(a2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (6*4)
+       cfi_rel_offset (R(d2), 0)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 8)
+       cfi_rel_offset (R(d5), 12)
+       cfi_rel_offset (R(d6), 16)
+       cfi_rel_offset (R(a2), 20)
 
 /* Copy the arguments to registers.  */
        movel   MEM_DISP(sp,28),R(res_ptr)
@@ -100,12 +107,21 @@ L(Lend:)
 
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
+       cfi_remember_state
+       cfi_adjust_cfa_offset (-6*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
+       cfi_restore (R(d5))
+       cfi_restore (R(d6))
+       cfi_restore (R(a2))
        rts
 
 /* We loop from most significant end of the arrays, which is only
    permissible if the source and destination don't overlap, since the
    function is documented to work for overlapping source and destination.  */
 
+       cfi_restore_state
 L(Lspecial:)
 #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020))
        lea     MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr)
@@ -142,5 +158,12 @@ L(LL1:)
 L(LLend:)
 /* Restore used registers from stack frame.  */
        moveml  MEM_POSTINC(sp),R(d2)-R(d6)/R(a2)
+       cfi_adjust_cfa_offset (-6*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
+       cfi_restore (R(d5))
+       cfi_restore (R(d6))
+       cfi_restore (R(a2))
        rts
 END(__mpn_rshift)
index 5833dd27196bd378cb3c2930a668c1770d0052da..ab42743feec3a6c2880a7fbd99dac27a61651272 100644 (file)
@@ -1,7 +1,7 @@
 /* mc68020 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
    store difference in a third limb vector.
 
-Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc.
+Copyright (C) 1992, 1994, 1996, 1998, 2012 Free Software Foundation, Inc.
 
 This file is part of the GNU MP Library.
 
@@ -35,7 +35,11 @@ MA 02111-1307, USA. */
 ENTRY(__mpn_sub_n)
 /* Save used registers on the stack.  */
        movel   R(d2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(a2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (R(d2), 4)
+       cfi_rel_offset (R(a2), 0)
 
 /* Copy the arguments to registers.  Better use movem?  */
        movel   MEM_DISP(sp,12),R(a2)
@@ -70,7 +74,11 @@ L(L2:)
 
 /* Restore used registers from stack frame.  */
        movel   MEM_POSTINC(sp),R(a2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(a2))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
 
        rts
 END(__mpn_sub_n)
index 77e86a32bd62d70035466f365f42fed105b44137..e5c767759b2cf4890ef190e6082553be001b2c70 100644 (file)
@@ -1,7 +1,7 @@
 /* memchr (str, ch, n) -- Return pointer to first occurrence of CH in the
    first N bytes of STR.
    For Motorola 68000.
-   Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2003, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab <schwab@gnu.org>.
 
@@ -28,10 +28,20 @@ ENTRY(__memchr)
        /* Save the callee-saved registers we use.  */
 #ifdef __mcoldfire__
        movel   R(d2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(d3),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(d4),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (R(d2), 8)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 0)
 #else
        moveml  R(d2)-R(d4),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (3*4)
+       cfi_rel_offset (R(d2), 0)
+       cfi_rel_offset (R(d3), 4)
+       cfi_rel_offset (R(d4), 8)
 #endif
 
        /* Get string pointer, character and length.  */
@@ -234,13 +244,26 @@ L(L7:)
        movel   R(d0),R(a0)
 #ifdef __mcoldfire__
        movel   MEM_POSTINC(sp),R(d4)
+       cfi_remember_state
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d4))
        movel   MEM_POSTINC(sp),R(d3)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d3))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
 #else
        moveml  MEM_POSTINC(sp),R(d2)-R(d4)
+       cfi_remember_state
+       cfi_adjust_cfa_offset (-3*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
 #endif
        rts
 
+       cfi_restore_state
 L(L8:)
        /* We have a hit.  Check to see which byte it was.  First
           compensate for the autoincrement in the loop.  */
@@ -263,10 +286,20 @@ L(L9:)
        movel   R(a0),R(d0)
 #ifdef __mcoldfire__
        movel   MEM_POSTINC(sp),R(d4)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d4))
        movel   MEM_POSTINC(sp),R(d3)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d3))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
 #else
        moveml  MEM_POSTINC(sp),R(d2)-R(d4)
+       cfi_adjust_cfa_offset (-3*4)
+       cfi_restore (R(d2))
+       cfi_restore (R(d3))
+       cfi_restore (R(d4))
 #endif
        rts
 END(__memchr)
index 97735f669dff1daea4ae5a60ec48fe0f034b7cb6..dd446cf798882455e482e525da27d0e1ad27e1ca 100644 (file)
@@ -1,6 +1,6 @@
 /* rawmemchr (str, ch) -- Return pointer to first occurrence of CH in STR.
    For Motorola 68000.
-   Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab <schwab@gnu.org>.
 
 ENTRY(__rawmemchr)
        /* Save the callee-saved registers we use.  */
        movel   R(d2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(d3),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (R(d2), 4)
+       cfi_rel_offset (R(d3), 0)
 
        /* Get string pointer and character.  */
        movel   MEM_DISP(sp,12),R(a0)
@@ -182,7 +186,11 @@ L(L8:)
 L(L9:)
        movel   R(a0),R(d0)
        movel   MEM_POSTINC(sp),R(d3)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d3))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
        rts
 END(__rawmemchr)
 
index 2e1e3249f6c185044a5cd8aa407c230a5d3c59e9..6c6a08fe2aefc5498733957a89fd571c55a38b49 100644 (file)
@@ -1,6 +1,6 @@
 /* strchr (str, ch) -- Return pointer to first occurrence of CH in STR.
    For Motorola 68000.
-   Copyright (C) 1999, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2003, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab <schwab@gnu.org>.
 
 ENTRY(strchr)
        /* Save the callee-saved registers we use.  */
        movel   R(d2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(d3),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (R(d2),4)
+       cfi_rel_offset (R(d3),0)
 
        /* Get string pointer and character.  */
        movel   MEM_DISP(sp,12),R(a0)
@@ -227,9 +231,15 @@ L(L3:)
        clrl    R(d0)
        movel   R(d0),R(a0)
        movel   MEM_POSTINC(sp),R(d3)
+       cfi_remember_state
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d3))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
        rts
 
+       cfi_restore_state
 L(L8:)
        /* We have a hit.  Check to see which byte it was.  First
           compensate for the autoincrement in the loop.  */
@@ -260,7 +270,11 @@ L(L8:)
 L(L9:)
        movel   R(a0),R(d0)
        movel   MEM_POSTINC(sp),R(d3)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d3))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
        rts
 END(strchr)
 
index 9d13ec16a0d30e14aa91acd5595eba47acaffdd6..e31cb0c4d31bf82e8107f7b62f691e0871ac6dce 100644 (file)
 ENTRY(__strchrnul)
        /* Save the callee-saved registers we use.  */
        movel   R(d2),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
        movel   R(d3),MEM_PREDEC(sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (R(d2), 4)
+       cfi_rel_offset (R(d3), 0)
 
        /* Get string pointer and character.  */
        movel   MEM_DISP(sp,12),R(a0)
@@ -253,7 +257,11 @@ L(L8:)
 L(L9:)
        movel   R(a0),R(d0)
        movel   MEM_POSTINC(sp),R(d3)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d3))
        movel   MEM_POSTINC(sp),R(d2)
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (R(d2))
        rts
 END(__strchrnul)
 
index ce70a0dfaa5a5045452d4df621cd198b3bda7059..2b0e936bded7d1c8043ac3de4668a662ebe09495 100644 (file)
@@ -1,5 +1,5 @@
 /* Assembler macros for m68k.
-   Copyright (C) 1998, 2003, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2003, 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
   ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function);                        \
   .align ALIGNARG(2);                                                        \
   C_LABEL(name)                                                                      \
+  cfi_startproc;                                                             \
   CALL_MCOUNT
 
 # undef END
-# define END(name) ASM_SIZE_DIRECTIVE(name)
+# define END(name)                                                           \
+  cfi_endproc;                                                               \
+  ASM_SIZE_DIRECTIVE(name)
 
 
 /* If compiled for profiling, call `_mcount' at the start of each function.  */
 /* The mcount code relies on a normal frame pointer being on the stack
    to locate our caller, so push one just for its benefit.  */
 #  define CALL_MCOUNT \
-  move.l %fp, -(%sp); move.l %sp, %fp;                                       \
+  move.l %fp, -(%sp);                                                        \
+  cfi_adjust_cfa_offset (4);  cfi_rel_offset (%fp, 0);                       \
+  move.l %sp, %fp;                                                           \
   jbsr JUMPTARGET (mcount);                                                  \
-  move.l (%sp)+, %fp;
+  move.l (%sp)+, %fp;                                                        \
+  cfi_adjust_cfa_offset (-4); cfi_restore (%fp);
 # else
 #  define CALL_MCOUNT          /* Do nothing.  */
 # endif
index 401e2ef3ac8b9a6dc5a2d5ce42e31ae7d9531a26..fa1b6b3877549a36bb662e0f3d96924a9e745059 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,97,98,2002,2010 Free Software Foundation, Inc.
+/* Copyright (C) 1996,97,98,2002,2010,2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab (schwab@issan.informatik.uni-dortmund.de)
 
@@ -52,22 +52,36 @@ ENTRY (__clone)
        movel   12+0(%sp), %d1          /* get flags */
        movel   %d3, -(%a1)             /* save %d3 and get parent_tidptr */
        movel   %d3, -(%sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (%d3, 0)
        movel   20+4(%sp), %d3
        movel   %d4, -(%a1)             /* save %d4 and get child_tidptr */
        movel   %d4, -(%sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (%d4, 0)
        movel   28+8(%sp), %d4
        movel   %d5, -(%a1)             /* save %d5 and get tls */
        movel   %d5, -(%sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (%d5, 0)
        movel   24+12(%sp), %d5
        /* save %d2 and get stack pointer */
 #ifdef __mcoldfire__
        movel   %d2, -(%a1)
        movel   %d2, -(%sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (%d2, 0)
        movel   %a1, %d2
 #else
        exg     %d2, %a1                /* save %d2 and get stack pointer */
+       cfi_register (%d2, %a1)
 #endif
        movel   #SYS_ify (clone), %d0
+
+       /* End FDE now, because in the child the unwind info will be
+          wrong.  */
+       cfi_endproc
+
        trap    #0
 #ifdef __mcoldfire__
        movel   (%sp)+, %d2
@@ -115,6 +129,7 @@ donepid:
        trap    #0
        cfi_endproc
 
+       cfi_startproc
 PSEUDO_END (__clone)
 
 weak_alias (__clone, clone)
index 242d23d3901ca9c49cffda5a963a857c050d7822..91f697bd829bf58c0d26d57f4e0afbacb9bb3cc8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
 
 
        .hidden __vdso_read_tp_stub
 ENTRY (__vdso_read_tp_stub)
-       cfi_startproc
        move.l  #__NR_get_thread_area, %d0
        trap    #0
        move.l  %d0, %a0
        rts
-       cfi_endproc
 END (__vdso_read_tp_stub)
 
 # ifdef SHARED
@@ -59,13 +57,11 @@ END (__vdso_read_tp_stub)
        .hidden __m68k_read_tp
 # endif
 ENTRY (__m68k_read_tp)
-       cfi_startproc
        move.l  #_GLOBAL_OFFSET_TABLE_@GOTPC, %a0
        lea     (-6, %pc, %a0), %a0
        move.l  M68K_VDSO_SYMBOL (__vdso_read_tp)@GOT(%a0), %a0
        move.l  (%a0), %a0
        jmp     (%a0)
-       cfi_endproc
 END (__m68k_read_tp)
 
 /* The following two stubs are for macros in atomic.h, they can't
@@ -73,7 +69,6 @@ END (__m68k_read_tp)
 
        .hidden __vdso_atomic_cmpxchg_32_stub
 ENTRY (__vdso_atomic_cmpxchg_32_stub)
-       cfi_startproc
        move.l  %d2, -(%sp)
        cfi_adjust_cfa_offset (4)
        cfi_rel_offset (%d2, 0)
@@ -84,12 +79,10 @@ ENTRY (__vdso_atomic_cmpxchg_32_stub)
        cfi_adjust_cfa_offset (-4)
        cfi_restore (%d2)
        rts
-       cfi_endproc
 END (__vdso_atomic_cmpxchg_32_stub)
 
        .hidden __vdso_atomic_barrier_stub
 ENTRY (__vdso_atomic_barrier_stub)
-       cfi_startproc
        move.l  %d0, -(%sp)
        cfi_adjust_cfa_offset (4)
        move.l  #SYS_ify (atomic_barrier), %d0
@@ -97,7 +90,6 @@ ENTRY (__vdso_atomic_barrier_stub)
        move.l  (%sp)+, %d0
        cfi_adjust_cfa_offset (-4)
        rts
-       cfi_endproc
 END (__vdso_atomic_barrier_stub)
 # else /* !SHARED */
 /* If the vDSO is not available, use a syscall to get TP.  */
index 83ce56423a66a7dec7ca2281217933da171212ea..46e117633e85712e5f2768d0c0be45f78bac21e6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
 
 
        .hidden __vdso_read_tp_stub
 ENTRY (__vdso_read_tp_stub)
-       cfi_startproc
        move.l  #__NR_get_thread_area, %d0
        trap    #0
        move.l  %d0, %a0
        rts
-       cfi_endproc
 END (__vdso_read_tp_stub)
 
 # ifdef SHARED
@@ -59,11 +57,9 @@ END (__vdso_read_tp_stub)
        .hidden __m68k_read_tp
 # endif
 ENTRY (__m68k_read_tp)
-       cfi_startproc
        lea     _GLOBAL_OFFSET_TABLE_@GOTPC(%pc), %a0
        move.l  M68K_VDSO_SYMBOL (__vdso_read_tp)@GOT(%a0), %a0
        jmp     ([%a0])
-       cfi_endproc
 END (__m68k_read_tp)
 
 /* The following two stubs are for macros in atomic.h, they can't
@@ -71,7 +67,6 @@ END (__m68k_read_tp)
 
        .hidden __vdso_atomic_cmpxchg_32_stub
 ENTRY (__vdso_atomic_cmpxchg_32_stub)
-       cfi_startproc
        move.l  %d2, -(%sp)
        cfi_adjust_cfa_offset (4)
        cfi_rel_offset (%d2, 0)
@@ -82,12 +77,10 @@ ENTRY (__vdso_atomic_cmpxchg_32_stub)
        cfi_adjust_cfa_offset (-4)
        cfi_restore (%d2)
        rts
-       cfi_endproc
 END (__vdso_atomic_cmpxchg_32_stub)
 
        .hidden __vdso_atomic_barrier_stub
 ENTRY (__vdso_atomic_barrier_stub)
-       cfi_startproc
        move.l  %d0, -(%sp)
        cfi_adjust_cfa_offset (4)
        move.l  #SYS_ify (atomic_barrier), %d0
@@ -95,7 +88,6 @@ ENTRY (__vdso_atomic_barrier_stub)
        move.l  (%sp)+, %d0
        cfi_adjust_cfa_offset (-4)
        rts
-       cfi_endproc
 END (__vdso_atomic_barrier_stub)
 # else /* !SHARED */
 /* If the vDSO is not available, use a syscall to get TP.  */
index 87e2d55ee9db14807f11050e6cb3f8921f7a1c03..f52b0fe2d764448a0edc7497ac5344f3d7e6cfdb 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2010 Free Software Foundation, Inc.
+/* Copyright (C) 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
 
@@ -40,7 +40,6 @@
     rts;                                                                     \
   .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;           \
   .Lpseudo_cancel:                                                           \
-    cfi_startproc;                                                           \
     CENABLE;                                                                 \
     DOCARGS_##args                                                           \
     move.l %d0, -(%sp); /* Save result of CENABLE.  */                       \
@@ -54,8 +53,7 @@
     move.l %d2, %d0;                                                         \
     UNDOCARGS_##args                                                         \
     cmp.l &-4095, %d0;                                                       \
-    jcc SYSCALL_ERROR_LABEL;                                                 \
-    cfi_endproc
+    jcc SYSCALL_ERROR_LABEL
 
 /* Note: we use D2 to save syscall's return value as D0 will be clobbered in
    CDISABLE.  */
index 2775c124c6cc84149493b52fa78e692afe2f3141..9da88b90a2aa8fecd6918cef46efc6c94a601b1f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab <schwab@suse.de>, 2003.
 
@@ -34,7 +34,12 @@ ENTRY (semtimedop)
        /* Save registers.  */
        move.l  %d2, %a1
        move.l  %d3, -(%sp)
+       cfi_adjust_cfa_offset (4)
        move.l  %d5, -(%sp)
+       cfi_adjust_cfa_offset (4)
+       cfi_register (%d2, %a1)
+       cfi_rel_offset (%d3, 0)
+       cfi_rel_offset (%d5, 4)
 
        move.l  #SYSOP_semtimedop, %d1
        move.l  SEMID(%sp), %d2
@@ -47,8 +52,13 @@ ENTRY (semtimedop)
 
        /* Restore registers.  */
        move.l  (%sp)+, %d5
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (%d5)
        move.l  (%sp)+, %d3
+       cfi_adjust_cfa_offset (-4)
+       cfi_restore (%d3)
        move.l  %a1, %d2
+       cfi_restore (%d2)
 
        /* Check for error.  */
        tst.l   %d0
index 147a3b2d48c17d8bfe36a750801baad1455c75f0..38aaa17196fca950b57f4c0870522ef4e5d7ade8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -51,6 +51,7 @@ ENTRY (__socket)
 
        /* Save registers.  */
        move.l %d2, %a0
+       cfi_register (%d2, %a0)
 
        move.l #SYS_ify (socketcall), %d0 /* System call number in %d0.  */
 
@@ -64,6 +65,7 @@ ENTRY (__socket)
 
        /* Restore registers.  */
        move.l %a0, %d2
+       cfi_restore (%d2)
 
        /* %d0 is < 0 if there was an error.  */
        tst.l %d0
@@ -73,8 +75,7 @@ ENTRY (__socket)
        rts
 
 #ifdef NEED_CANCELLATION
-1:     cfi_startproc
-       /* Enable asynchronous cancellation.  */
+1:     /* Enable asynchronous cancellation.  */
        CENABLE
 
        /* Save D2.  */
@@ -110,7 +111,6 @@ ENTRY (__socket)
        /* %d0 is < 0 if there was an error.  */
        tst.l %d0
        jmi SYSCALL_ERROR_LABEL
-       cfi_endproc
 
        /* Successful; return the syscall's value.  */
        rts
index e4ec92d836bd4fe4c42f8b7fb0886e6aa8078826..2277aab6b424a967211d81dd5b15713fc004ac4b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 2002 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 2002, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -37,8 +37,10 @@ ENTRY (__syscall_error)
        move.l %d0, errno
 #else
        move.l %d0, -(%sp)
+       cfi_adjust_cfa_offset (4)
        jbsr __errno_location
        move.l (%sp)+, (%a0)
+       cfi_adjust_cfa_offset (-4)
 #endif
        move.l #-1, %d0
        /* Copy return value to %a0 for syscalls that are declared to
index 28113ac5cb2e9829bcf9cf6cdbc0b236a808a240..1e2755493bafddcf6273c95cfd0b9f39e4f7345f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 2000, 2003, 2004, 2006, 2010
+/* Copyright (C) 1996, 1997, 1998, 2000, 2003, 2004, 2006, 2010, 2012
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Andreas Schwab, <schwab@issan.informatik.uni-dortmund.de>,
@@ -116,10 +116,12 @@ SYSCALL_ERROR_LABEL:                                                            \
 SYSCALL_ERROR_LABEL:                                                         \
     neg.l %d0;                                                               \
     move.l %d0, -(%sp);                                                              \
+    cfi_adjust_cfa_offset (4);                                               \
     jbsr __m68k_read_tp@PLTPC;                                               \
     SYSCALL_ERROR_LOAD_GOT (%a1);                                            \
     add.l (SYSCALL_ERROR_ERRNO@TLSIE, %a1), %a0;                             \
     move.l (%sp)+, (%a0);                                                    \
+    cfi_adjust_cfa_offset (-4);                                                      \
     move.l &-1, %d0;                                                         \
     /* Copy return value to %a0 for syscalls that are declared to return      \
        a pointer (e.g., mmap).  */                                           \
@@ -184,24 +186,35 @@ SYSCALL_ERROR_LABEL:                                                            \
 #define        UNDOARGS_1      UNDOARGS_0
 
 #define        DOARGS_2        _DOARGS_2 (8)
-#define        _DOARGS_2(n)    move.l %d2, %a0; move.l n(%sp), %d2; _DOARGS_1 (n-4)
-#define        UNDOARGS_2      UNDOARGS_1; move.l %a0, %d2
+#define        _DOARGS_2(n)    move.l %d2, %a0; cfi_register (%d2, %a0);             \
+                       move.l n(%sp), %d2; _DOARGS_1 (n-4)
+#define        UNDOARGS_2      UNDOARGS_1; move.l %a0, %d2; cfi_restore (%d2)
 
 #define DOARGS_3       _DOARGS_3 (12)
-#define _DOARGS_3(n)   move.l %d3, %a1; move.l n(%sp), %d3; _DOARGS_2 (n-4)
-#define UNDOARGS_3     UNDOARGS_2; move.l %a1, %d3
+#define _DOARGS_3(n)   move.l %d3, %a1; cfi_register (%d3, %a1);             \
+                       move.l n(%sp), %d3; _DOARGS_2 (n-4)
+#define UNDOARGS_3     UNDOARGS_2; move.l %a1, %d3; cfi_restore (%d3)
 
 #define DOARGS_4       _DOARGS_4 (16)
-#define _DOARGS_4(n)   move.l %d4, -(%sp); move.l n+4(%sp), %d4; _DOARGS_3 (n)
-#define UNDOARGS_4     UNDOARGS_3; move.l (%sp)+, %d4
+#define _DOARGS_4(n)   move.l %d4, -(%sp);                                   \
+                       cfi_adjust_cfa_offset (4); cfi_rel_offset (%d4, 0);   \
+                       move.l n+4(%sp), %d4; _DOARGS_3 (n)
+#define UNDOARGS_4     UNDOARGS_3; move.l (%sp)+, %d4;                       \
+                       cfi_adjust_cfa_offset (-4); cfi_restore (%d4)
 
 #define DOARGS_5       _DOARGS_5 (20)
-#define _DOARGS_5(n)   move.l %d5, -(%sp); move.l n+4(%sp), %d5; _DOARGS_4 (n)
-#define UNDOARGS_5     UNDOARGS_4; move.l (%sp)+, %d5
+#define _DOARGS_5(n)   move.l %d5, -(%sp);                                   \
+                       cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0);   \
+                       move.l n+4(%sp), %d5; _DOARGS_4 (n)
+#define UNDOARGS_5     UNDOARGS_4; move.l (%sp)+, %d5;                       \
+                       cfi_adjust_cfa_offset (-4); cfi_restore (%d5)
 
 #define DOARGS_6       _DOARGS_6 (24)
-#define _DOARGS_6(n)   _DOARGS_5 (n-4); move.l %a0, -(%sp); move.l n+12(%sp), %a0;
-#define UNDOARGS_6     move.l (%sp)+, %a0; UNDOARGS_5
+#define _DOARGS_6(n)   _DOARGS_5 (n-4); move.l %a0, -(%sp);                  \
+                       cfi_adjust_cfa_offset (4);                            \
+                       move.l n+12(%sp), %a0;
+#define UNDOARGS_6     move.l (%sp)+, %a0; cfi_adjust_cfa_offset (-4);       \
+                       UNDOARGS_5
 
 
 #define        ret     rts
index 4def7e3b4a720a2a253302aecf05c6ad6a5ff850..9747302995c949c88d768bccd9538095d3cb5fc9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2002, 2003, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2002, 2003, 2010, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Schwab <schwab@gnu.org>.
 
@@ -46,6 +46,8 @@ ENTRY (__vfork)
 
        /* Pop the return PC value into A0.  */
        movel   %sp@+, %a0
+       cfi_adjust_cfa_offset (-4)
+       cfi_register (%pc, %a0)
 
        /* Stuff the syscall number in D0 and trap into the kernel.  */
        movel   #SYS_ify (vfork), %d0
@@ -62,6 +64,8 @@ ENTRY (__vfork)
 .Lerror:
        /* Push back the return PC.  */
        movel   %a0,%sp@-
+       cfi_adjust_cfa_offset (4)
+       cfi_rel_offset (%pc, 0)
 
 # ifdef __ASSUME_VFORK_SYSCALL
 #  ifndef PIC