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.27.9000-180-g9aa5c22


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  9aa5c222b9e0409143410a02b6364a3b25dbf028 (commit)
      from  e921c89e01389161c036ec09112da6e18aeaa688 (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=9aa5c222b9e0409143410a02b6364a3b25dbf028

commit 9aa5c222b9e0409143410a02b6364a3b25dbf028
Author: Aurelien Jarno <aurelien@aurel32.net>
Date:   Fri Mar 9 00:14:27 2018 +0100

    sparc32: Add nop before __startcontext to stop unwinding [BZ #22919]
    
    On sparc32 tst-makecontext fails, as backtrace called within a context
    created by makecontext to yield infinite backtrace.
    
    Fix that the same way than nios2 by adding a nop just before
    __startcontext. This is needed as otherwise FDE lookup just repeatedly
    finds __setcontext's FDE in an infinite loop, due to the convention of
    using 'address - 1' for FDE lookup.
    
    Changelog:
    	[BZ #22919]
    	* sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S (__startcontext):
    	Add nop before __startcontext, add explaining comments.

diff --git a/ChangeLog b/ChangeLog
index dfb96aa..054d004 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2018-03-09  Aurelien Jarno  <aurelien@aurel32.net>
+
+	[BZ #22919]
+	* sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S (__startcontext):
+	Add nop before __startcontext, add explaining comments.
+
 2018-03-07  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	[BZ #22926]
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S
index 695f172..283aef1 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S
@@ -95,6 +95,19 @@ END(__setcontext)
 
 weak_alias (__setcontext, setcontext)
 
+/* We add an NOP here to separate between __setcontext/__startcontext. The
+   wanted behavior that happens is: when unwinding from a function called
+   inside a makecontext() context, FDE lookup will use '&__startcontext - 1',
+   then returns NULL for no FDE found, and immediately ends the unwind, in
+   a normal fashion.
+
+   If this NOP word does not exist, FDE lookup just repeatedly finds
+   __setcontext's FDE in an infinite loop, due to the convention of using
+   'address - 1' for FDE lookup. Modifiying/deleting the below
+   __startcontext's FDE has no help on this.  */
+
+	nop
+
 /* This is the helper code which gets called if a function which is
    registered with 'makecontext' returns.  In this case we have to
    install the context listed in the uc_link element of the context

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

Summary of changes:
 ChangeLog                                          |    6 ++++++
 sysdeps/unix/sysv/linux/sparc/sparc32/setcontext.S |   13 +++++++++++++
 2 files changed, 19 insertions(+), 0 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]