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-566-g890b7a4


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  890b7a4b33d482b5c768ab47d70758b80227e9bc (commit)
       via  fa4eeac73dd1c368bf06ef071fdf20d9f40c6c15 (commit)
       via  3fdc131c26fe7663360785d49d2c427b097742bb (commit)
      from  9aec6d2a2f2388b08db6af7c2369d8e694d82c9a (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=890b7a4b33d482b5c768ab47d70758b80227e9bc

commit 890b7a4b33d482b5c768ab47d70758b80227e9bc
Author: Stefan Liebler <stli@linux.vnet.ibm.com>
Date:   Tue Jul 7 16:11:14 2015 +0200

    S390: Fix "backtrace() returns infinitely deep stack frames with makecontext()" [BZ #18508].
    
    On s390/s390x backtrace(buffer, size) returns the series of called functions until
    "makecontext_ret" and additional entries (up to "size") with "makecontext_ret".
    GDB-backtrace is also warning:
    "Backtrace stopped: previous frame identical to this frame (corrupt stack?)"
    
    To reproduce this scenario you have to setup a new context with makecontext()
    and activate it with setcontext(). See e.g. cf() function in testcase stdlib/tst-makecontext.c.
    Or see bug in libgo "Bug 66303 - runtime.Caller() returns infinitely deep stack frames
    on s390x " (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66303).
    
    This patch omits the cfi_startproc/cfi_endproc directives in ENTRY/END macro of
    __makecontext_ret. Thus no frame information is generated in .eh_frame and backtrace
    stops after __makecontext_ret. There is also no .eh_frame info for _start or
    thread_start functions.
    
    ChangeLog:
    
    	[BZ #18508]
    	* stdlib/Makefile ($(objpfx)tst-makecontext3):
    	Depend on $(libdl).
    	* stdlib/tst-makecontext.c (cf): Test if _Unwind_Backtrace
    	is not called infinitely times.
    	(backtrace_helper): New function.
    	(trace_arg): New struct.
    	(st1): Enlarge stack size.
    	* sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S:
    	(__makecontext_ret): Omit cfi_startproc and cfi_endproc.
    	* sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S:
    	Likewise.

diff --git a/ChangeLog b/ChangeLog
index 2df417e..ff64fdc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2015-07-07  Stefan Liebler  <stli@linux.vnet.ibm.com>
 
+	[BZ #18508]
+	* stdlib/Makefile ($(objpfx)tst-makecontext3):
+	Depend on $(libdl).
+	* stdlib/tst-makecontext.c (cf): Test if _Unwind_Backtrace
+	is not called infinitely times.
+	(backtrace_helper): New function.
+	(trace_arg): New struct.
+	(st1): Enlarge stack size.
+	* sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S:
+	(__makecontext_ret): Omit cfi_startproc and cfi_endproc.
+	* sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S:
+	Likewise.
+
+2015-07-07  Stefan Liebler  <stli@linux.vnet.ibm.com>
+
 	* sysdeps/s390/fpu/libm-test-ulps: Regenerated.
 
 2015-07-07  Stefan Liebler  <stli@linux.vnet.ibm.com>
diff --git a/NEWS b/NEWS
index 569a7d6..07e8bd8 100644
--- a/NEWS
+++ b/NEWS
@@ -22,10 +22,11 @@ Version 2.22
   18211, 18217, 18219, 18220, 18221, 18234, 18244, 18245, 18247, 18287,
   18319, 18324, 18333, 18346, 18371, 18397, 18409, 18410, 18412, 18418,
   18422, 18434, 18435, 18444, 18468, 18469, 18470, 18479, 18483, 18495,
-  18496, 18497, 18498, 18502, 18507, 18512, 18513, 18519, 18520, 18522,
-  18527, 18528, 18529, 18530, 18532, 18533, 18534, 18536, 18539, 18540,
-  18542, 18544, 18545, 18546, 18547, 18549, 18553, 18558, 18569, 18583,
-  18585, 18586, 18592, 18593, 18594, 18602, 18612, 18613, 18619, 18633.
+  18496, 18497, 18498, 18502, 18507, 18508, 18512, 18513, 18519, 18520,
+  18522, 18527, 18528, 18529, 18530, 18532, 18533, 18534, 18536, 18539,
+  18540, 18542, 18544, 18545, 18546, 18547, 18549, 18553, 18558, 18569,
+  18583, 18585, 18586, 18592, 18593, 18594, 18602, 18612, 18613, 18619,
+  18633.
 
 * Cache information can be queried via sysconf() function on s390 e.g. with
   _SC_LEVEL1_ICACHE_SIZE as argument.
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 3300dd2..7fc5a80 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -164,3 +164,5 @@ $(objpfx)tst-setcontext3.out: tst-setcontext3.sh $(objpfx)tst-setcontext3
 		 '$(run-program-env)' '$(test-program-prefix-after-env)' \
 		 $(common-objpfx)stdlib/; \
 	$(evaluate-test)
+
+$(objpfx)tst-makecontext: $(libdl)
diff --git a/stdlib/tst-makecontext.c b/stdlib/tst-makecontext.c
index 29a588e..8170e8a 100644
--- a/stdlib/tst-makecontext.c
+++ b/stdlib/tst-makecontext.c
@@ -19,23 +19,62 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <ucontext.h>
+#include <assert.h>
+#include <unwind.h>
+#include <dlfcn.h>
+#include <gnu/lib-names.h>
 
 ucontext_t ucp;
-char st1[8192];
+char st1[16384];
 __thread int thr;
 
 int somevar = -76;
 long othervar = -78L;
 
+struct trace_arg
+{
+  int cnt, size;
+};
+
+static _Unwind_Reason_Code
+backtrace_helper (struct _Unwind_Context *ctx, void *a)
+{
+  struct trace_arg *arg = a;
+  if (++arg->cnt == arg->size)
+    return _URC_END_OF_STACK;
+  return _URC_NO_REASON;
+}
+
 void
 cf (int i)
 {
+  struct trace_arg arg = { .size = 100, .cnt = -1 };
+  void *handle;
+  _Unwind_Reason_Code (*unwind_backtrace) (_Unwind_Trace_Fn, void *);
+
   if (i != othervar || thr != 94)
     {
       printf ("i %d thr %d\n", i, thr);
       exit (1);
     }
 
+  /* Test if callback function of _Unwind_Backtrace is not called infinitely
+     times. See Bug 18508 or gcc bug "Bug 66303 - runtime.Caller() returns
+     infinitely deep stack frames on s390x.".
+     The go runtime calls backtrace_full() in
+     <gcc-src>/libbacktrace/backtrace.c, which uses _Unwind_Backtrace().  */
+  handle = dlopen (LIBGCC_S_SO, RTLD_LAZY);
+  if (handle != NULL)
+    {
+      unwind_backtrace = dlsym (handle, "_Unwind_Backtrace");
+      if (unwind_backtrace != NULL)
+	{
+	  unwind_backtrace (backtrace_helper, &arg);
+	  assert (arg.cnt != -1 && arg.cnt < 100);
+	}
+      dlclose (handle);
+    }
+
   /* Since uc_link below has been set to NULL, setcontext is supposed to
      terminate the process normally after this function returns.  */
 }
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
index e1f9347..ad39bb8 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/__makecontext_ret.S
@@ -17,6 +17,14 @@
 
 #include <sysdep.h>
 
+/* We do not want .eh_frame info so that __makecontext_ret stops unwinding
+   if backtrace was called within a context created by makecontext. (There
+   is also no .eh_frame info for _start or thread_start.)  */
+#undef cfi_startproc
+#define cfi_startproc
+#undef cfi_endproc
+#define cfi_endproc
+
 ENTRY(__makecontext_ret)
 	basr  %r14,%r7
 	ltr   %r8,%r8			/* Check whether uc_link is 0.  */
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
index 11a3cd3..8a8665c 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/__makecontext_ret.S
@@ -17,6 +17,14 @@
 
 #include <sysdep.h>
 
+/* We do not want .eh_frame info so that __makecontext_ret stops unwinding
+   if backtrace was called within a context created by makecontext. (There
+   is also no .eh_frame info for _start or thread_start.)  */
+#undef cfi_startproc
+#define cfi_startproc
+#undef cfi_endproc
+#define cfi_endproc
+
 ENTRY(__makecontext_ret)
 	basr	%r14,%r7
 	ltgr	%r8,%r8			/* Check whether uc_link is 0.  */

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=fa4eeac73dd1c368bf06ef071fdf20d9f40c6c15

commit fa4eeac73dd1c368bf06ef071fdf20d9f40c6c15
Author: Stefan Liebler <stli@linux.vnet.ibm.com>
Date:   Tue Jul 7 16:11:14 2015 +0200

    S390: Regenerate ULPs.
    
    Regenerated ulps after recent changes.
    Tested on s390/s390x.
    All math-tests passes on s390 after this patch.
    
    ChangeLog:
    
    	* sysdeps/s390/fpu/libm-test-ulps: Regenerated.

diff --git a/ChangeLog b/ChangeLog
index c8d8561..2df417e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2015-07-07  Stefan Liebler  <stli@linux.vnet.ibm.com>
 
+	* sysdeps/s390/fpu/libm-test-ulps: Regenerated.
+
+2015-07-07  Stefan Liebler  <stli@linux.vnet.ibm.com>
+
 	* sysdeps/unix/sysv/linux/s390/bits/sem.h:
 	Include sys/types.h instead of bits/types.h.
 	Remove inclusion of bits/wordsize.h.
diff --git a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps
index dbb93e5..b7a1c89 100644
--- a/sysdeps/s390/fpu/libm-test-ulps
+++ b/sysdeps/s390/fpu/libm-test-ulps
@@ -811,6 +811,54 @@ ifloat: 2
 ildouble: 1
 ldouble: 1
 
+Function: Real part of "cexp_downward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+Function: Imaginary part of "cexp_downward":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+ildouble: 2
+ldouble: 2
+
+Function: Real part of "cexp_towardzero":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 2
+ldouble: 2
+
+Function: Imaginary part of "cexp_towardzero":
+double: 1
+float: 3
+idouble: 1
+ifloat: 3
+ildouble: 2
+ldouble: 2
+
+Function: Real part of "cexp_upward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 3
+ldouble: 3
+
+Function: Imaginary part of "cexp_upward":
+double: 1
+float: 2
+idouble: 1
+ifloat: 2
+ildouble: 3
+ldouble: 3
+
 Function: Real part of "clog":
 double: 3
 float: 3
@@ -1108,9 +1156,9 @@ ildouble: 3
 ldouble: 3
 
 Function: Real part of "csin_upward":
-double: 1
+double: 2
 float: 3
-idouble: 1
+idouble: 2
 ifloat: 3
 ildouble: 2
 ldouble: 2
@@ -1138,10 +1186,10 @@ ildouble: 1
 ldouble: 1
 
 Function: Real part of "csinh_downward":
-double: 1
-float: 1
-idouble: 1
-ifloat: 1
+double: 2
+float: 2
+idouble: 2
+ifloat: 2
 ildouble: 3
 ldouble: 3
 
@@ -1671,6 +1719,30 @@ ifloat: 4
 ildouble: 7
 ldouble: 7
 
+Function: "jn_downward":
+double: 4
+float: 5
+idouble: 4
+ifloat: 5
+ildouble: 8
+ldouble: 8
+
+Function: "jn_towardzero":
+double: 4
+float: 5
+idouble: 4
+ifloat: 5
+ildouble: 8
+ldouble: 8
+
+Function: "jn_upward":
+double: 5
+float: 4
+idouble: 5
+ifloat: 4
+ildouble: 7
+ldouble: 7
+
 Function: "lgamma":
 double: 1
 float: 1
@@ -2043,6 +2115,30 @@ ifloat: 4
 ildouble: 4
 ldouble: 4
 
+Function: "tgamma_downward":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+ildouble: 5
+ldouble: 5
+
+Function: "tgamma_towardzero":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+ildouble: 5
+ldouble: 5
+
+Function: "tgamma_upward":
+double: 3
+float: 3
+idouble: 3
+ifloat: 3
+ildouble: 4
+ldouble: 4
+
 Function: "y0":
 double: 2
 float: 1

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=3fdc131c26fe7663360785d49d2c427b097742bb

commit 3fdc131c26fe7663360785d49d2c427b097742bb
Author: Stefan Liebler <stli@linux.vnet.ibm.com>
Date:   Tue Jul 7 16:11:14 2015 +0200

    S390: Fix sem.h conformance test failures.
    
    On s390 the following tests are failing due to unkown types time_t, pid_t:
    FAIL: conform/UNIX98/sys/sem.h/conform
    FAIL: conform/XOPEN2K/sys/sem.h/conform
    FAIL: conform/XOPEN2K8/sys/sem.h/conform
    FAIL: conform/XPG3/sys/sem.h/conform
    FAIL: conform/XPG4/sys/sem.h/conform
    
    This patch changes the s390 specific sem.h and includes sys/types.h instead
    of bits/types.h. All other archs include sys/types.h, too.
    Including bits/wordsize.h is obselete, because it is already inlcuded in
    sys/types.h -> bits/types.h.
    
    ChangeLog:
    
    	* sysdeps/unix/sysv/linux/s390/bits/sem.h:
    	Include sys/types.h instead of bits/types.h.
    	Remove inclusion of bits/wordsize.h.

diff --git a/ChangeLog b/ChangeLog
index e00fd0d..c8d8561 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-07-07  Stefan Liebler  <stli@linux.vnet.ibm.com>
+
+	* sysdeps/unix/sysv/linux/s390/bits/sem.h:
+	Include sys/types.h instead of bits/types.h.
+	Remove inclusion of bits/wordsize.h.
+
 2015-07-07  H.J. Lu  <hongjiu.lu@intel.com>
 
 	* sysdeps/x86_64/tst-auditmod10b.c (la_symbind32): New.
diff --git a/sysdeps/unix/sysv/linux/s390/bits/sem.h b/sysdeps/unix/sysv/linux/s390/bits/sem.h
index 9f8cd47..2e12eff 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/sem.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/sem.h
@@ -19,8 +19,7 @@
 # error "Never include <bits/sem.h> directly; use <sys/sem.h> instead."
 #endif
 
-#include <bits/types.h>
-#include <bits/wordsize.h>
+#include <sys/types.h>
 
 /* Flags for `semop'.  */
 #define SEM_UNDO	0x1000		/* undo the operation on exit */

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

Summary of changes:
 ChangeLog                                          |   25 +++++
 NEWS                                               |    9 +-
 stdlib/Makefile                                    |    2 +
 stdlib/tst-makecontext.c                           |   41 +++++++-
 sysdeps/s390/fpu/libm-test-ulps                    |  108 ++++++++++++++++++-
 sysdeps/unix/sysv/linux/s390/bits/sem.h            |    3 +-
 .../sysv/linux/s390/s390-32/__makecontext_ret.S    |    8 ++
 .../sysv/linux/s390/s390-64/__makecontext_ret.S    |    8 ++
 8 files changed, 191 insertions(+), 13 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]