This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.21-626-g0ac4f1d


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  0ac4f1dab3e5778c79994a89111b4eb1d247ab12 (commit)
      from  f30d94a74a30b832354d4b87c23a4909ed24b929 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0ac4f1dab3e5778c79994a89111b4eb1d247ab12

commit 0ac4f1dab3e5778c79994a89111b4eb1d247ab12
Author: Chris Metcalf <cmetcalf@ezchip.com>
Date:   Tue Jul 21 12:04:52 2015 -0400

    tile: Fix BZ #18508 (makecontext yield infinite backtrace)
    
    It turns out tile suffered from the same problem as S390.  However,
    disabling CFI information for the __startcontext on tile was not
    sufficient to fix the problem; I think the backtracer will just
    blindly try to follow the link register (lr) in that case.
    
    Instead, the change adds a cfi_undefined directive for "lr"
    and then arranges to call __startcontext directly when the new
    context starts, rather than just synthesizing a return to it.
    In addition to being a bit easier now to understand the control
    flow, this also allows the cfi_undefined directive to be placed in
    a way that causes it to be in force at the address that the "lr"
    from the called function points to.

diff --git a/ChangeLog b/ChangeLog
index 490c0ac..d855f76 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2015-07-21  Chris Metcalf  <cmetcalf@ezchip.com>
+
+	* sysdeps/unix/sysv/linux/tile/makecontext.c (__makecontext): Call
+	__startcontext to initialize the new context.
+	* sysdeps/unix/sysv/linux/tile/setcontext.S (__startcontext): Set
+	up CFI directive to forbid further backtracing.
+
 2015-07-21  Marko Myllynen  <myllynen@redhat.com>
 
 	* charmaps/ANSI_X3.110-1983: Remove obsolete repertoire map
diff --git a/sysdeps/unix/sysv/linux/tile/makecontext.c b/sysdeps/unix/sysv/linux/tile/makecontext.c
index b14b8d5..c77d005 100644
--- a/sysdeps/unix/sysv/linux/tile/makecontext.c
+++ b/sysdeps/unix/sysv/linux/tile/makecontext.c
@@ -52,14 +52,14 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...)
     }
   va_end (ap);
 
-  /* Pass (*func) to __startcontext in pc.  */
-  ucp->uc_mcontext.pc = (long) func;
+  /* Start in the trampoline.  */
+  ucp->uc_mcontext.pc = (long) __startcontext;
 
   /* Set stack pointer.  */
   ucp->uc_mcontext.sp = (long) sp;
 
-  /* Set the return address to trampoline.  */
-  ucp->uc_mcontext.lr = (long) __startcontext;
+  /* Pass FUNC to __startcontext in r31.  */
+  ucp->uc_mcontext.gregs[31] = (long) func;
 
   /* Pass ucp->uc_link to __startcontext in r30.  */
   ucp->uc_mcontext.gregs[30] = (long) ucp->uc_link;
diff --git a/sysdeps/unix/sysv/linux/tile/setcontext.S b/sysdeps/unix/sysv/linux/tile/setcontext.S
index ee9edbe..02d6a15 100644
--- a/sysdeps/unix/sysv/linux/tile/setcontext.S
+++ b/sysdeps/unix/sysv/linux/tile/setcontext.S
@@ -190,7 +190,9 @@ END (__setcontext)
 weak_alias (__setcontext, setcontext)
 
 ENTRY (__startcontext)
+	cfi_undefined (lr)
 	FEEDBACK_ENTER(__startcontext)
+	jalr r31
 	BEQZ r30, 1f
 	{
 	 move r0, r30

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                  |    7 +++++++
 sysdeps/unix/sysv/linux/tile/makecontext.c |    8 ++++----
 sysdeps/unix/sysv/linux/tile/setcontext.S  |    2 ++
 3 files changed, 13 insertions(+), 4 deletions(-)


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]