Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86effd0d authored by Vineet Gupta's avatar Vineet Gupta
Browse files

ARC: dw2 unwind: enable cfi pseudo ops in string lib



This uses a new set of annoations viz. ENTRY_CFI/END_CFI to enabel cfi
ops generation.

Note that we didn't change the normal ENTRY/EXIT as we don't actually
want unwind info in the trap/exception/interrutp handlers which use
these, as unwinder then gets confused (it keeps recursing vs. stopping).
Semantically these are leaf routines and unwinding should stop when it
hits those routines.

Before
------

    28.52%     1.19%          9929  hackbench  libuClibc-1.0.17.so   [.] __write_nocancel
            |
            ---__write_nocancel
               |--8.95%--EV_Trap
               |           --8.25%--sys_write
               |                     |--3.93%--sock_write_iter
     ...
               |--2.62%--memset   <==== [LEAF entry as no unwind info]
                         ^^^^^^

After
-----

    29.46%     1.24%         13622  hackbench  libuClibc-1.0.17.so   [.] __write_nocancel
            |
            ---__write_nocancel
               |--9.31%--EV_Trap
               |           --8.62%--sys_write
               |                     |--4.17%--sock_write_iter
     ...
               |--6.19%--sys_write
               |           --6.19%--sock_write_iter
               |                     unix_stream_sendmsg
               |                     |--1.62%--sock_alloc_send_pskb
               |                     |--0.89%--sock_def_readable
               |                     |--0.88%--_raw_spin_unlock_irqrestore
               |                     |--0.69%--memset
               |                     |         ^^^^^^     <==== [now in proper callframe]
               |                     |
               |                      --0.52%--skb_copy_datagram_from_iter

Signed-off-by: default avatarVineet Gupta <vgupta@synopsys.com>
parent 5a205a32
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
	.global __switch_to
	.type   __switch_to, @function
__switch_to:
	CFI_STARTPROC

	/* Save regs on kernel mode stack of task */
	st.a    blink, [sp, -4]
@@ -59,4 +60,4 @@ __switch_to:
	ld.ab   blink, [sp, 4]
	j       [blink]

END(__switch_to)
END_CFI(__switch_to)
+2 −2
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#define SHIFT r2
#endif

ENTRY(memcmp)
ENTRY_CFI(memcmp)
	or	r12,r0,r1
	asl_s	r12,r12,30
	sub	r3,r2,1
@@ -149,4 +149,4 @@ ENTRY(memcmp)
.Lnil:
	j_s.d	[blink]
	mov	r0,0
END(memcmp)
END_CFI(memcmp)
+2 −2
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@

#include <linux/linkage.h>

ENTRY(memcpy)
ENTRY_CFI(memcpy)
	or	r3,r0,r1
	asl_s	r3,r3,30
	mov_s	r5,r0
@@ -63,4 +63,4 @@ ENTRY(memcpy)
.Lendbloop:
	j_s.d	[blink]
	stb	r12,[r5,0]
END(memcpy)
END_CFI(memcpy)
+2 −2
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@
# define ZOLAND			0xF
#endif

ENTRY(memcpy)
ENTRY_CFI(memcpy)
	prefetch [r1]		; Prefetch the read location
	prefetchw [r0]		; Prefetch the write location
	mov.f	0, r2
@@ -233,4 +233,4 @@ ENTRY(memcpy)
.Lcopybytewise_3:
	j	[blink]

END(memcpy)
END_CFI(memcpy)
+4 −4
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@

#undef PREALLOC_NOT_AVAIL

ENTRY(memset)
ENTRY_CFI(memset)
	prefetchw [r0]		; Prefetch the write location
	mov.f	0, r2
;;; if size is zero
@@ -112,11 +112,11 @@ ENTRY(memset)

	j	[blink]

END(memset)
END_CFI(memset)

ENTRY(memzero)
ENTRY_CFI(memzero)
    ; adjust bzero args to memset args
    mov r2, r1
    b.d  memset    ;tail call so need to tinker with blink
    mov r1, 0
END(memzero)
END_CFI(memzero)
Loading