]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blame - glibc/patches/glibc-fedora.patch
glibc: Update to 2.14.90 (development version).
[people/ms/ipfire-3.x.git] / glibc / patches / glibc-fedora.patch
CommitLineData
70963a51
MT
1diff -Nur a/ChangeLog b/ChangeLog
2--- a/ChangeLog 2011-12-22 16:50:52.000000000 +0000
3+++ b/ChangeLog 2011-12-22 18:00:44.158145149 +0000
4@@ -2416,6 +2416,11 @@
5
6 * sysdeps/mach/hurd/sys/param.h (DEV_BSIZE): New macro.
7
8+2011-09-02 Andreas Schwab <schwab@redhat.com>
9+
10+ * nscd/selinux.c (avc_create_thread): Set PR_SET_KEEPCAPS before
11+ spawning AVC thread.
12+
13 2011-09-08 Andreas Schwab <schwab@redhat.com>
14
15 * elf/dl-load.c (lose): Check for non-null L.
16@@ -2678,6 +2683,11 @@
17 * sysdeps/i386/dl-trampoline.S (_dl_runtime_profile): Fix cfi
18 directive.
19
20+2011-08-31 Andreas Schwab <schwab@redhat.com>
21+
22+ * include/link.h (FORCED_DYNAMIC_TLS_OFFSET) [NO_TLS_OFFSET == 0]:
23+ Change to -1.
24+
25 2011-08-24 David S. Miller <davem@davemloft.net>
26
27 * sysdeps/sparc/sparc64/strcmp.S: Rewrite.
28@@ -3483,6 +3493,14 @@
29 * config.make.in: Likewise.
30 * malloc/Makefile: Likewise.
4fb11761
MT
31
32+2011-06-28 Andreas Schwab <schwab@redhat.com>
33+
34+ * iconvdata/gb18030.c: Update tables.
35+ (BODY for FROM_LOOP): Handle non-BMP characters specially.
eae7d017 36+
4fb11761
MT
37+ * sysdeps/posix/getaddrinfo.c (gaih_inet): Don't use gethostbyaddr
38+ to determine canonical name.
eae7d017 39+
4fb11761 40 2011-06-27 Andreas Schwab <schwab@redhat.com>
ba8de1f5 41
4fb11761 42 * iconvdata/gb18030.c (BODY for TO_LOOP): Fix encoding of non-BMP
70963a51
MT
43@@ -3614,6 +3632,10 @@
44
45 * inet/getnetgrent_r.c: Use DL_CALL_FCT in several places.
d9a1ddc1 46
4fb11761
MT
47+2011-06-21 Andreas Schwab <schwab@redhat.com>
48+
49+ * iconvdata/gb18030.c: Regenerate tables.
50+
70963a51 51 2011-06-20 David S. Miller <davem@davemloft.net>
4fb11761 52
70963a51
MT
53 * sysdeps/sparc/sparc32/dl-plt.h: Protect against multiple
54@@ -4236,6 +4258,13 @@
eae7d017
MT
55 * libio/Makefile (tests): Add bug-fclose1.
56 * libio/bug-fclose1.c: New file.
57
58+2011-05-13 Andreas Schwab <schwab@redhat.com>
d9a1ddc1 59+
eae7d017
MT
60+ * elf/dl-load.c (is_dst): Remove parameter secure, all callers
61+ changed. Move check for valid use of $ORIGIN ...
62+ (_dl_dst_substitute): ... here. Reset check_for_trusted when a
63+ path element is skipped.
d9a1ddc1 64+
eae7d017 65 2011-05-12 Ulrich Drepper <drepper@gmail.com>
d9a1ddc1 66
eae7d017 67 [BZ #12511]
70963a51 68@@ -4513,13 +4542,6 @@
4fb11761
MT
69 * stdlib/bug-getcontext.c: New file.
70 * stdlib/Makefile: Add rules to build and run bug-getcontext.
71
72-2011-04-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
73-
74- * sysdeps/s390/s390-64/utf16-utf32-z9.c: Wrap the z9-109
75- instructions into .machine "z9-109".
76- * sysdeps/s390/s390-64/utf8-utf16-z9.c: Likewise.
77- * sysdeps/s390/s390-64/utf8-utf32-z9.c: Likewise.
78-
79 2011-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
80
81 * sysdeps/s390/s390-32/elf/start.S (_start): Skip extra zeroes
70963a51 82@@ -4757,6 +4779,31 @@
eae7d017
MT
83 * sysdeps/unix/sysv/linux/Versions [GLIBC_2.14] (clock_adjtime):
84 Export.
d9a1ddc1 85
eae7d017
MT
86+2011-04-06 Andreas Schwab <schwab@redhat.com>
87+
88+ * scripts/check-local-headers.sh: Ignore systemtap headers.
89+
90+2011-02-21 Roland McGrath <roland@redhat.com>
ba8de1f5 91+
eae7d017
MT
92+ * sysdeps/x86_64/__longjmp.S: Add a static probe here.
93+ * sysdeps/x86_64/setjmp.S: Likewise.
94+ * sysdeps/i386/bsd-setjmp.S: Likewise.
95+ * sysdeps/i386/bsd-_setjmp.S: Likewise.
96+ * sysdeps/i386/setjmp.S: Likewise.
97+ * sysdeps/i386/__longjmp.S: Likewise.
98+ * sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S: Likewise.
99+ * sysdeps/unix/sysv/linux/i386/____longjmp_chk.S: Likewise.
ba8de1f5 100+
eae7d017
MT
101+2011-02-08 Roland McGrath <roland@redhat.com>
102+
103+ * include/stap-probe.h: New file.
104+ * configure.in: Handle --enable-systemtap.
105+ * configure: Regenerated.
106+ * config.h.in (USE_STAP_PROBE): New #undef.
107+ * extra-lib.mk (CPPFLAGS-$(lib)): Add -DIN_LIB=$(lib).
108+ * elf/Makefile (CPPFLAGS-.os): Add -DIN_LIB=rtld.
109+ * elf/rtld-Rules (rtld-CPPFLAGS): Likewise.
110+
111 2011-03-22 Ulrich Drepper <drepper@gmail.com>
d9a1ddc1 112
eae7d017 113 * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Increment
70963a51 114@@ -4817,6 +4864,16 @@
eae7d017
MT
115 $LDFLAGS and -nostdlib -nostartfiles to linking step. Change main
116 to _start.
117
118+2011-03-18 Andreas Schwab <schwab@redhat.com>
119+
120+ * elf/ldd.bash.in: Never run file directly.
121+
122+2011-03-07 Andreas Schwab <schwab@redhat.com>
123+
124+ * include/link.h (struct link_map): Remove l_orig_initfini.
125+ * elf/dl-close.c (_dl_close_worker): Revert its use.
126+ * elf/dl-deps.c (_dl_map_object_deps): Likewise.
127+
128 2011-03-06 Ulrich Drepper <drepper@gmail.com>
129
130 * elf/dl-load.c (_dl_map_object): If we are looking for the first
70963a51 131@@ -5033,6 +5090,12 @@
eae7d017
MT
132 * shadow/sgetspent.c: Check return value of __sgetspent_r instead
133 of errno.
134
135+2011-02-03 Andreas Schwab <schwab@redhat.com>
ba8de1f5 136+
eae7d017
MT
137+ * login/programs/pt_chown.c (main): Check for valid file
138+ descriptor instead of privileges. Be careful to drop all
139+ capabilities when not needed.
ba8de1f5 140+
eae7d017
MT
141 2011-01-19 Ulrich Drepper <drepper@gmail.com>
142
143 [BZ #11724]
70963a51 144@@ -5720,6 +5783,26 @@
eae7d017
MT
145 * sysdeps/unix/sysv/linux/internal_statvfs.c (INTERNAL_STATVFS):
146 Mask out sign-bit copies when constructing f_fsid.
147
ba8de1f5
MT
148+2010-09-27 Andreas Schwab <schwab@redhat.com>
149+
150+ * include/link.h (struct link_map): Add l_free_initfini.
151+ * elf/dl-deps.c (_dl_map_object_deps): Set it when assigning
152+ l_initfini.
153+ * elf/rtld.c (dl_main): Clear it on all objects loaded on startup.
154+ * elf/dl-libc.c (free_mem): Free l_initfini if l_free_initfini is
155+ set.
156+
157+ [BZ #11561]
158+ * posix/regcomp.c (parse_bracket_exp): When looking up collating
159+ elements compare against the byte sequence of it, not its name.
160+
161+ [BZ #6530]
162+ * stdio-common/vfprintf.c (process_string_arg): Revert 2000-07-22
163+ change.
164+
165+ * nss/nss_files/files-XXX.c (internal_getent): Declare linebuflen
166+ as size_t.
ba8de1f5
MT
167+
168 2010-09-24 Petr Baudis <pasky@suse.cz>
169
170 * debug/stack_chk_fail_local.c: Add missing licence exception.
70963a51 171@@ -6512,6 +6595,17 @@
ba8de1f5
MT
172 call returning > 0 value.
173 * sysdeps/unix/sysv/linux/getlogin.c (getlogin): Likewise.
174
175+2010-07-01 Andreas Schwab <schwab@redhat.com>
176+
177+ * include/sys/resource.h (__getrlimit): Add hidden proto.
178+ * sysdeps/unix/sysv/linux/i386/getrlimit.c: Add libc_hidden_weak.
179+ * sysdeps/mach/hurd/getrlimit.c: Add libc_hidden_def.
180+ * resource/getrlimit.c: Likewise.
181+
d9a1ddc1
MT
182+2010-06-21 Andreas Schwab <schwab@redhat.com>
183+
184+ * sysdeps/i386/i686/Makefile: Don't pass -mtune to assembler.
185+
ba8de1f5
MT
186 2010-06-07 Andreas Schwab <schwab@redhat.com>
187
188 * dlfcn/Makefile: Remove explicit dependencies on libc.so and
70963a51 189@@ -6564,6 +6658,21 @@
ba8de1f5
MT
190 * hurd/hurd/fd.h (__file_name_lookup_at): Update comment.
191 * sysdeps/mach/hurd/linkat.c (linkat): Pass O_NOLINK in FLAGS.
192
193+2010-06-11 Andreas Schwab <schwab@redhat.com>
194+
195+ * elf/rtld.c (_dl_starting_up): Always define.
196+ (dl_main): Always set _dl_starting_up.
197+ * elf/dl-support.c (_dl_starting_up): Always define.
198+ * elf/dl-init.c (_dl_init): Always clear _dl_starting_up.
199+
200+2010-06-10 Andreas Schwab <schwab@redhat.com>
201+
ba8de1f5
MT
202+ * sysdeps/unix/sysv/linux/i386/Versions: Export __uname under
203+ GLIBC_PRIVATE.
204+ * nptl/Versions: Export __getrlimit under GLIBC_PRIVATE.
205+ * sysdeps/unix/sysv/linux/i386/smp.h: Call __uname instead of uname.
206+ * nptl/nptl-init.c: Call __getrlimit instead of getrlimit.
207+
208 2010-05-28 Luis Machado <luisgpm@br.ibm.com>
d9a1ddc1 209
ba8de1f5 210 * sysdeps/powerpc/powerpc32/power7/memcpy.S: Exchange srdi for srwi.
70963a51
MT
211diff -Nur a/ChangeLog.15 b/ChangeLog.15
212--- a/ChangeLog.15 2011-12-22 16:50:52.000000000 +0000
213+++ b/ChangeLog.15 2011-12-22 17:59:24.542119295 +0000
e5ad540d
MT
214@@ -477,6 +477,14 @@
215
216 2004-11-26 Jakub Jelinek <jakub@redhat.com>
217
218+ * posix/Makefile (generated: Add getconf.speclist.
219+ ($(inst_libexecdir)/getconf): Use getconf.speclist instead of
220+ getconf output.
221+ ($(objpfx)getconf.speclist): New rule.
222+ * posix/getconf.speclist.h: New file.
223+
224+2004-11-26 Jakub Jelinek <jakub@redhat.com>
225+
226 * sysdeps/generic/unsecvars.h (UNSECURE_ENVVARS): Add GETCONF_DIR.
227
228 2004-11-26 Kaz Kojima <kkojima@rr.iij4u.or.jp>
229@@ -1103,6 +1111,13 @@
230 * sysdeps/generic/tempname.c (__path_search): Add missing argument
231 TRY_TMPDIR.
232
233+2004-11-02 Jakub Jelinek <jakub@redhat.com>
234+
235+ * include/features.h (__USE_FORTIFY_LEVEL): Also set for Red Hat
236+ GCC 3.4.x-RH >= 3.4.2-8.
237+ * debug/tst-chk1.c (do_test): Deal with GCC 3.4.x-RH not
238+ being able to recognize subobjects.
239+
240 2004-10-31 Mariusz Mazur <mmazur@kernel.pl>
241
242 * sysdeps/unix/sysv/linux/alpha/setregid.c: New file.
243@@ -1443,6 +1458,11 @@
244 * sysdeps/generic/readonly-area.c (__readonly_str): Renamed to ...
245 (__readonly_area): ... this.
246
247+2004-10-19 Jakub Jelinek <jakub@redhat.com>
248+
249+ * include/features.h (__USE_FORTIFY_LEVEL): Enable even with
250+ Red Hat gcc4 4.0.0 and above.
251+
252 2004-10-18 Jakub Jelinek <jakub@redhat.com>
253
254 * sysdeps/generic/strcpy_chk.c (__strcpy_chk): Speed up by checking
255@@ -3182,6 +3202,23 @@
256 before return type.
257 * locale/localename.c (__current_locale_name): Likewise.
258
259+2004-08-31 Jakub Jelinek <jakub@redhat.com>
260+
261+ * elf/ldconfig.c (parse_conf): Add prefix argument, prepend it
262+ before arguments to add_dir and pass to parse_conf_include.
263+ (parse_conf_include): Add prefix argument, pass it down to
264+ parse_conf.
265+ (main): Call arch_startup. Adjust parse_conf caller.
266+ Call add_arch_dirs.
267+ * sysdeps/generic/dl-cache.h (arch_startup, add_arch_dirs): Define.
268+ * sysdeps/unix/sysv/linux/i386/dl-cache.h: New file.
269+ * sysdeps/unix/sysv/linux/ia64/dl-cache.h (EMUL_HACK, arch_startup,
270+ add_arch_dirs): Define.
271+ * sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed: Prepend
272+ /emul/ia32-linux before the 32-bit ld.so pathname.
273+ * sysdeps/unix/sysv/linux/ia64/dl-procinfo.c: New file.
274+ * sysdeps/unix/sysv/linux/ia64/dl-procinfo.h: New file.
275+
276 2004-08-30 Roland McGrath <roland@frob.com>
277
278 * scripts/extract-abilist.awk: If `lastversion' variable defined, omit
70963a51
MT
279diff -Nur a/ChangeLog.16 b/ChangeLog.16
280--- a/ChangeLog.16 2011-12-22 16:50:52.000000000 +0000
281+++ b/ChangeLog.16 2011-12-22 17:59:24.545119296 +0000
e5ad540d
MT
282@@ -2042,6 +2042,9 @@
283 (__MATHDECL_2): Use __REDIRECT_NTH instead of __REDIRECT
284 followed by __THROW.
285
286+ * sysdeps/unix/sysv/linux/futimesat.c (futimesat): If
287+ file == NULL, use __futimes unconditionally.
288+
289 2006-02-02 Ulrich Drepper <drepper@redhat.com>
290
291 * sysdeps/unix/sysv/linux/futimesat.c [__NR_futimesat]
292@@ -2101,6 +2104,11 @@
293 * sysdeps/ieee754/ldbl-128/s_llrintl.c (__llrintl): Fix a typo.
294 * sysdeps/s390/fpu/libm-test-ulps: Remove llrint ulps.
295
296+2006-01-30 Jakub Jelinek <jakub@redhat.com>
297+
298+ * include/bits/stdlib-ldbl.h: New file.
299+ * include/bits/wchar-ldbl.h: New file.
300+
301 2006-01-19 Thomas Schwinge <tschwinge@gnu.org>
302
303 * libio/genops.c: Include <stdbool.h>.
70963a51
MT
304diff -Nur a/ChangeLog.17 b/ChangeLog.17
305--- a/ChangeLog.17 2011-12-22 16:50:52.000000000 +0000
306+++ b/ChangeLog.17 2011-12-22 17:59:24.549119296 +0000
d9a1ddc1
MT
307@@ -256,6 +256,12 @@
308
309 * Makerules (libc-abis): Fix search for libc-abis in add-ons.
310
311+2010-04-06 Ulrich Drepper <drepper@redhat.com>
312+
313+ * sysdeps/posix/getaddrinfo.c (default_scopes): Assign global
314+ scope to RFC 1918 addresses.
315+ * posix/gai.conf: Document difference from RFC 3484.
316+
317 2010-04-05 Thomas Schwinge <thomas@schwinge.name>
318
319 * sysdeps/gnu/unwind-resume.c: New, moved from nptl/sysdeps/pthread/.
70963a51 320@@ -2953,6 +2959,11 @@
d9a1ddc1
MT
321 * sysdeps/generic/ldsodefs.h (struct rtld_global): The map element in
322 the unique symbol hash table should not be const.
323
324+2009-07-22 Jakub Jelinek <jakub@redhat.com>
325+
326+ * Makeconfig (ASFLAGS): Append $(sysdep-ASFLAGS).
327+ * sysdeps/i386/Makefile (sysdep-ASFLAGS): Add -U__i686.
328+
329 2009-07-21 Ulrich Drepper <drepper@redhat.com>
330
331 * sysdeps/x86_64/multiarch/strstr.c: Minor cleanups. Remove
70963a51 332@@ -3218,6 +3229,11 @@
d9a1ddc1
MT
333 out common code into new function get_common_indeces. Determine
334 extended family and model for Intel processors.
335
336+2009-06-26 Andreas Schwab <aschwab@redhat.com>
337+
338+ * timezone/zic.c (stringzone): Don't try to generate a POSIX TZ
339+ string when the timezone ends in DST.
340+
341 2009-06-26 Ulrich Drepper <drepper@redhat.com>
342
343 * resolv/resolv.h: Define RES_SNGLKUPREOP.
70963a51 344@@ -11818,6 +11834,10 @@
d9a1ddc1
MT
345 [BZ #4368]
346 * stdlib/stdlib.h: Remove obsolete part of comment for realpath.
347
348+2007-04-16 Jakub Jelinek <jakub@redhat.com>
349+
350+ * locale/programs/locarchive.c (add_alias, insert_name): Remove static.
351+
352 2007-04-16 Ulrich Drepper <drepper@redhat.com>
353
354 [BZ #4364]
70963a51 355@@ -13075,6 +13095,15 @@
d9a1ddc1
MT
356 separators also if no non-zero digits found.
357 * stdlib/Makefile (tests): Add tst-strtod3.
358
359+2006-12-10 Jakub Jelinek <jakub@redhat.com>
360+
361+ * sysdeps/unix/sysv/linux/netlinkaccess.h: Include linux/if_addr.h
362+ if IFA_MAX is not defined.
363+ (IFA_RTA, IFA_PAYLOAD, IFLA_RTA, IFLA_PAYLOAD): Define if not
364+ defined.
365+ * sysdeps/unix/sysv/linux/check_pf.c: Include netlinkaccess.h
366+ instead of asm/types.h, linux/netlink.h and linux/rtnetlink.h.
367+
368 2006-12-09 Ulrich Drepper <drepper@redhat.com>
369
370 [BZ #3632]
70963a51
MT
371diff -Nur a/Makeconfig b/Makeconfig
372--- a/Makeconfig 2011-12-22 16:50:52.000000000 +0000
373+++ b/Makeconfig 2011-12-22 17:59:24.551119298 +0000
374@@ -803,12 +803,12 @@
e5ad540d
MT
375 # The assembler can generate debug information too.
376 ifndef ASFLAGS
377 ifeq ($(have-cpp-asm-debuginfo),yes)
378-ASFLAGS := $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
379+ASFLAGS = $(filter -g% -fdebug-prefix-map=%,$(CFLAGS))
380 else
381-ASFLAGS :=
382+ASFLAGS =
383 endif
384 endif
385-ASFLAGS += $(ASFLAGS-config) $(asflags-cpu)
386+ASFLAGS += $(ASFLAGS-config) $(asflags-cpu) $(sysdep-ASFLAGS)
387
388 ifndef BUILD_CC
389 BUILD_CC = $(CC)
70963a51
MT
390diff -Nur a/NEWS b/NEWS
391--- a/NEWS 2011-12-22 16:50:52.000000000 +0000
392+++ b/NEWS 2011-12-22 17:59:24.552119299 +0000
393@@ -83,16 +83,6 @@
4fb11761
MT
394 12724, 12734, 12738, 12746, 12766, 12775, 12777, 12782, 12788, 12792,
395 12795, 12811, 12813, 12814, 12841
396
eae7d017
MT
397-* The RPC implementation in libc is obsoleted. Old programs keep working
398- but new programs cannot be linked with the routines in libc anymore.
399- Programs in need of RPC functionality must be linked against TI-RPC.
400- The TI-RPC implementation is IPv6 enabled and there are other benefits.
401-
402- Visible changes of this change include (obviously) the inability to link
403- programs using RPC functions without referencing the TI-RPC library and the
404- removal of the RPC headers from the glibc headers.
405- Implemented by Ulrich Drepper.
4fb11761 406-
eae7d017
MT
407 * New Linux interfaces: clock_adjtime, name_to_handle_at, open_by_handle_at,
408 syncfs, setns, sendmmsg
4fb11761 409
70963a51
MT
410diff -Nur a/config.h.in b/config.h.in
411--- a/config.h.in 2011-12-22 16:50:52.000000000 +0000
412+++ b/config.h.in 2011-12-22 17:59:24.552119299 +0000
413@@ -187,6 +187,9 @@
eae7d017
MT
414 /* Define if `.ctors' and `.dtors' sections shouldn't be used. */
415 #undef NO_CTORS_DTORS_SECTIONS
416
417+/* Define if Systemtap <sys/sdt.h> probes should be defined. */
418+#undef USE_STAP_PROBE
419+
420 /*
421 \f */
422
70963a51
MT
423diff -Nur a/configure b/configure
424--- a/configure 2011-12-22 18:00:26.275139344 +0000
425+++ b/configure 2011-12-22 17:59:24.706119348 +0000
426@@ -791,6 +791,7 @@
427 enable_all_warnings
eae7d017 428 enable_multi_arch
eae7d017
MT
429 enable_nss_crypt
430+enable_systemtap
431 with_cpu
432 '
433 ac_precious_vars='build_alias
70963a51
MT
434@@ -1450,6 +1451,7 @@
435 --enable-multi-arch enable single DSO with optimizations for multiple
436 architectures
eae7d017
MT
437 --enable-nss-crypt enable libcrypt to use nss
438+ --enable-systemtap enable systemtap static probe points [default=no]
439
440 Optional Packages:
441 --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
70963a51 442@@ -3804,6 +3806,51 @@
eae7d017
MT
443 fi
444
445
446+# Check whether --enable-systemtap was given.
447+if test "${enable_systemtap+set}" = set; then :
448+ enableval=$enable_systemtap; systemtap=$enableval
449+else
450+ systemtap=no
451+fi
452+
453+if test x$systemtap != xno; then
454+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemtap static probe support" >&5
455+$as_echo_n "checking for systemtap static probe support... " >&6; }
456+if test "${libc_cv_sdt+set}" = set; then :
457+ $as_echo_n "(cached) " >&6
458+else
459+ old_CFLAGS="$CFLAGS"
460+ CFLAGS="-std=gnu99 $CFLAGS"
461+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
462+/* end confdefs.h. */
463+#include <sys/sdt.h>
464+void foo (int i, void *p)
465+{
466+ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
467+ :: STAP_PROBE_ASM_OPERANDS (2, i, p));
468+}
469+_ACEOF
470+if ac_fn_c_try_compile "$LINENO"; then :
471+ libc_cv_sdt=yes
472+else
473+ libc_cv_sdt=no
474+fi
475+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
476+ CFLAGS="$old_CFLAGS"
477+fi
478+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sdt" >&5
479+$as_echo "$libc_cv_sdt" >&6; }
480+ if test $libc_cv_sdt = yes; then
481+ $as_echo "#define USE_STAP_PROBE 1" >>confdefs.h
482+
483+ else
484+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
485+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
486+as_fn_error $? "systemtap support needs sys/sdt.h with asm support
487+See \`config.log' for more details" "$LINENO" 5; }
488+ fi
489+fi
490+
491 # The way shlib-versions is used to generate soversions.mk uses a
492 # fairly simplistic model for name recognition that can't distinguish
493 # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
70963a51
MT
494diff -Nur a/configure.in b/configure.in
495--- a/configure.in 2011-12-22 16:50:52.000000000 +0000
496+++ b/configure.in 2011-12-22 17:59:24.555119299 +0000
497@@ -290,6 +290,29 @@
eae7d017
MT
498 fi
499 AC_SUBST(libc_cv_nss_crypt)
500
501+AC_ARG_ENABLE([systemtap],
502+ [AS_HELP_STRING([--enable-systemtap],
503+ [enable systemtap static probe points @<:@default=no@:>@])],
504+ [systemtap=$enableval],
505+ [systemtap=no])
506+if test x$systemtap != xno; then
507+ AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl
508+ old_CFLAGS="$CFLAGS"
509+ CFLAGS="-std=gnu99 $CFLAGS"
510+ AC_COMPILE_IFELSE([#include <sys/sdt.h>
511+void foo (int i, void *p)
512+{
513+ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) ""
514+ :: STAP_PROBE_ASM_OPERANDS (2, i, p));
515+}], [libc_cv_sdt=yes], [libc_cv_sdt=no])
516+ CFLAGS="$old_CFLAGS"])
517+ if test $libc_cv_sdt = yes; then
518+ AC_DEFINE([USE_STAP_PROBE])
519+ else
520+ AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support])
521+ fi
522+fi
523+
524 # The way shlib-versions is used to generate soversions.mk uses a
525 # fairly simplistic model for name recognition that can't distinguish
526 # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os
70963a51
MT
527diff -Nur a/csu/Makefile b/csu/Makefile
528--- a/csu/Makefile 2011-12-22 16:50:52.000000000 +0000
529+++ b/csu/Makefile 2011-12-22 17:59:24.556119299 +0000
530@@ -93,7 +93,8 @@
e5ad540d
MT
531 $(crtstuff:%=$(objpfx)%.o): %.o: %.S $(objpfx)defs.h
532 $(compile.S) -g0 $(ASFLAGS-.os) -o $@
533
534-CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time)
535+CFLAGS-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \
536+ -fno-asynchronous-unwind-tables
537
538 vpath initfini.c $(sysdirs)
539
70963a51
MT
540diff -Nur a/csu/elf-init.c b/csu/elf-init.c
541--- a/csu/elf-init.c 2011-12-22 16:50:52.000000000 +0000
542+++ b/csu/elf-init.c 2011-12-22 17:59:24.557119299 +0000
543@@ -64,6 +64,23 @@
e5ad540d
MT
544 extern void (*__fini_array_start []) (void) attribute_hidden;
545 extern void (*__fini_array_end []) (void) attribute_hidden;
546
547+#if defined HAVE_VISIBILITY_ATTRIBUTE \
548+ && (defined SHARED || defined LIBC_NONSHARED)
549+# define hidden_undef_2(x) #x
550+# define hidden_undef_1(x) hidden_undef_2 (x)
551+# define hidden_undef(x) \
552+ __asm (hidden_undef_1 (ASM_GLOBAL_DIRECTIVE) " " #x); \
553+ __asm (".hidden " #x);
554+#else
555+# define hidden_undef(x)
556+#endif
557+
558+hidden_undef (__preinit_array_start)
559+hidden_undef (__preinit_array_end)
560+hidden_undef (__init_array_start)
561+hidden_undef (__init_array_end)
562+hidden_undef (__fini_array_start)
563+hidden_undef (__fini_array_end)
564
565 /* These function symbols are provided for the .init/.fini section entry
566 points automagically by the linker. */
70963a51
MT
567diff -Nur a/debug/tst-chk1.c b/debug/tst-chk1.c
568--- a/debug/tst-chk1.c 2011-12-22 16:50:52.000000000 +0000
569+++ b/debug/tst-chk1.c 2011-12-22 17:59:24.557119299 +0000
e5ad540d
MT
570@@ -17,6 +17,9 @@
571 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
572 02111-1307 USA. */
573
574+/* Hack: make sure GCC doesn't know __chk_fail () will not return. */
575+#define __noreturn__
576+
577 #include <assert.h>
578 #include <fcntl.h>
579 #include <locale.h>
70963a51 580@@ -243,7 +246,7 @@
e5ad540d
MT
581 if (memcmp (a.buf1, "aabcdabcjj", 10))
582 FAIL ();
583
584-#if __USE_FORTIFY_LEVEL < 2
585+#if __USE_FORTIFY_LEVEL < 2 || !__GNUC_PREREQ (4, 0)
586 /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2
587 and sufficient GCC support, as the string operations overflow
588 from a.buf1 into a.buf2. */
70963a51 589@@ -358,7 +361,7 @@
e5ad540d
MT
590 memset (a.buf1 + 9, 'j', l0 + 2);
591 CHK_FAIL_END
592
593-# if __USE_FORTIFY_LEVEL >= 2
594+# if __USE_FORTIFY_LEVEL >= 2 && __GNUC_PREREQ (4, 0)
595 # define O 0
596 # else
597 # define O 1
70963a51
MT
598diff -Nur a/elf/Makefile b/elf/Makefile
599--- a/elf/Makefile 2011-12-22 16:50:52.000000000 +0000
600+++ b/elf/Makefile 2011-12-22 17:59:24.558119299 +0000
601@@ -135,6 +135,7 @@
ba8de1f5
MT
602 ifeq ($(unwind-find-fde),yes)
603 routines += unwind-dw2-fde-glibc
604 shared-only-routines += unwind-dw2-fde-glibc
eae7d017 605+CFLAGS-unwind-dw2-fde-glibc.c += -fno-strict-aliasing
ba8de1f5
MT
606 endif
607
608 before-compile = $(objpfx)trusted-dirs.h
70963a51 609@@ -505,7 +506,8 @@
eae7d017
MT
610 CFLAGS-dl-cache.c = $(SYSCONF-FLAGS)
611 CFLAGS-cache.c = $(SYSCONF-FLAGS)
612
613-CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1)
614+CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
615+ -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld)
616
617 test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names))))
618 generated += $(addsuffix .so,$(strip $(modules-names)))
70963a51
MT
619diff -Nur a/elf/dl-close.c b/elf/dl-close.c
620--- a/elf/dl-close.c 2011-12-22 16:50:52.000000000 +0000
621+++ b/elf/dl-close.c 2011-12-22 17:59:24.559119299 +0000
622@@ -119,17 +119,8 @@
eae7d017
MT
623 if (map->l_direct_opencount > 0 || map->l_type != lt_loaded
624 || dl_close_state != not_pending)
625 {
626- if (map->l_direct_opencount == 0)
627- {
628- if (map->l_type == lt_loaded)
629- dl_close_state = rerun;
630- else if (map->l_type == lt_library)
631- {
632- struct link_map **oldp = map->l_initfini;
633- map->l_initfini = map->l_orig_initfini;
634- _dl_scope_free (oldp);
635- }
636- }
637+ if (map->l_direct_opencount == 0 && map->l_type == lt_loaded)
638+ dl_close_state = rerun;
639
640 /* There are still references to this object. Do nothing more. */
641 if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
70963a51
MT
642diff -Nur a/elf/dl-deps.c b/elf/dl-deps.c
643--- a/elf/dl-deps.c 2011-12-22 16:50:52.000000000 +0000
644+++ b/elf/dl-deps.c 2011-12-22 17:59:24.559119299 +0000
645@@ -489,6 +489,7 @@
ba8de1f5
MT
646 nneeded * sizeof needed[0]);
647 atomic_write_barrier ();
648 l->l_initfini = l_initfini;
649+ l->l_free_initfini = 1;
650 }
651
652 /* If we have no auxiliary objects just go on to the next map. */
70963a51 653@@ -689,6 +690,7 @@
ba8de1f5
MT
654 l_initfini[nlist] = NULL;
655 atomic_write_barrier ();
656 map->l_initfini = l_initfini;
657+ map->l_free_initfini = 1;
658 if (l_reldeps != NULL)
659 {
660 atomic_write_barrier ();
70963a51 661@@ -697,7 +699,7 @@
eae7d017
MT
662 _dl_scope_free (old_l_reldeps);
663 }
664 if (old_l_initfini != NULL)
665- map->l_orig_initfini = old_l_initfini;
666+ _dl_scope_free (old_l_initfini);
4fb11761
MT
667
668 if (errno_reason)
669 _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname,
70963a51
MT
670diff -Nur a/elf/dl-init.c b/elf/dl-init.c
671--- a/elf/dl-init.c 2011-12-22 16:50:52.000000000 +0000
672+++ b/elf/dl-init.c 2011-12-22 17:59:24.560119299 +0000
ba8de1f5
MT
673@@ -24,11 +24,9 @@
674 /* Type of the initializer. */
675 typedef void (*init_t) (int, char **, char **);
676
677-#ifndef HAVE_INLINED_SYSCALLS
678 /* Flag, nonzero during startup phase. */
679 extern int _dl_starting_up;
680 extern int _dl_starting_up_internal attribute_hidden;
681-#endif
682
683
684 static void
70963a51 685@@ -133,9 +131,7 @@
ba8de1f5
MT
686 while (i-- > 0)
687 call_init (main_map->l_initfini[i], argc, argv, env);
688
689-#ifndef HAVE_INLINED_SYSCALLS
690 /* Finished starting up. */
691 INTUSE(_dl_starting_up) = 0;
692-#endif
693 }
694 INTDEF (_dl_init)
70963a51
MT
695diff -Nur a/elf/dl-libc.c b/elf/dl-libc.c
696--- a/elf/dl-libc.c 2011-12-22 16:50:52.000000000 +0000
697+++ b/elf/dl-libc.c 2011-12-22 17:59:24.560119299 +0000
698@@ -270,13 +270,13 @@
ba8de1f5
MT
699
700 for (Lmid_t ns = 0; ns < GL(dl_nns); ++ns)
701 {
702- /* Remove all additional names added to the objects. */
703 for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next)
704 {
705 struct libname_list *lnp = l->l_libname->next;
706
707 l->l_libname->next = NULL;
708
709+ /* Remove all additional names added to the objects. */
710 while (lnp != NULL)
711 {
712 struct libname_list *old = lnp;
70963a51 713@@ -284,6 +284,10 @@
ba8de1f5
MT
714 if (! old->dont_free)
715 free (old);
716 }
717+
718+ /* Free the initfini dependency list. */
719+ if (l->l_free_initfini)
720+ free (l->l_initfini);
721 }
722
723 if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
70963a51
MT
724diff -Nur a/elf/dl-load.c b/elf/dl-load.c
725--- a/elf/dl-load.c 2011-12-22 16:50:52.000000000 +0000
726+++ b/elf/dl-load.c 2011-12-22 17:59:24.561119300 +0000
727@@ -250,8 +250,7 @@
d9a1ddc1 728
eae7d017
MT
729
730 static size_t
731-is_dst (const char *start, const char *name, const char *str,
732- int is_path, int secure)
733+is_dst (const char *start, const char *name, const char *str, int is_path)
734 {
735 size_t len;
736 bool is_curly = false;
70963a51 737@@ -280,12 +279,6 @@
eae7d017
MT
738 && (!is_path || name[len] != ':'))
739 return 0;
740
741- if (__builtin_expect (secure, 0)
742- && ((name[len] != '\0' && name[len] != '/'
743- && (!is_path || name[len] != ':'))
744- || (name != start + 1 && (!is_path || name[-2] != ':'))))
745- return 0;
746-
747 return len;
d9a1ddc1 748 }
eae7d017 749
70963a51 750@@ -300,13 +293,10 @@
eae7d017
MT
751 {
752 size_t len;
753
754- /* $ORIGIN is not expanded for SUID/GUID programs (except if it
755- is $ORIGIN alone) and it must always appear first in path. */
756 ++name;
757- if ((len = is_dst (start, name, "ORIGIN", is_path,
758- INTUSE(__libc_enable_secure))) != 0
759- || (len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0
760- || (len = is_dst (start, name, "LIB", is_path, 0)) != 0)
761+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0
762+ || (len = is_dst (start, name, "PLATFORM", is_path)) != 0
763+ || (len = is_dst (start, name, "LIB", is_path)) != 0)
764 ++cnt;
765
766 name = strchr (name + len, '$');
70963a51 767@@ -339,9 +329,16 @@
eae7d017
MT
768 size_t len;
769
770 ++name;
771- if ((len = is_dst (start, name, "ORIGIN", is_path,
772- INTUSE(__libc_enable_secure))) != 0)
773+ if ((len = is_dst (start, name, "ORIGIN", is_path)) != 0)
774 {
775+ /* For SUID/GUID programs $ORIGIN must always appear
776+ first in a path element. */
777+ if (__builtin_expect (INTUSE(__libc_enable_secure), 0)
778+ && ((name[len] != '\0' && name[len] != '/'
779+ && (!is_path || name[len] != ':'))
780+ || (name != start + 1 && (!is_path || name[-2] != ':'))))
781+ repl = (const char *) -1;
782+ else
783 #ifndef SHARED
784 if (l == NULL)
785 repl = _dl_get_origin ();
70963a51 786@@ -352,9 +349,9 @@
eae7d017
MT
787 check_for_trusted = (INTUSE(__libc_enable_secure)
788 && l->l_type == lt_executable);
789 }
790- else if ((len = is_dst (start, name, "PLATFORM", is_path, 0)) != 0)
791+ else if ((len = is_dst (start, name, "PLATFORM", is_path)) != 0)
792 repl = GLRO(dl_platform);
793- else if ((len = is_dst (start, name, "LIB", is_path, 0)) != 0)
794+ else if ((len = is_dst (start, name, "LIB", is_path)) != 0)
795 repl = DL_DST_LIB;
796
797 if (repl != NULL && repl != (const char *) -1)
70963a51 798@@ -374,6 +371,7 @@
eae7d017
MT
799 element, but keep an empty element at the end. */
800 if (wp == result && is_path && *name == ':' && name[1] != '\0')
801 ++name;
802+ check_for_trusted = false;
803 }
804 else
805 /* No DST we recognize. */
70963a51
MT
806diff -Nur a/elf/dl-support.c b/elf/dl-support.c
807--- a/elf/dl-support.c 2011-12-22 16:50:52.000000000 +0000
808+++ b/elf/dl-support.c 2011-12-22 17:59:24.561119300 +0000
809@@ -82,10 +82,8 @@
ba8de1f5
MT
810 create a fake scope containing nothing. */
811 struct r_scope_elem _dl_initial_searchlist;
812
813-#ifndef HAVE_INLINED_SYSCALLS
814 /* Nonzero during startup. */
815 int _dl_starting_up = 1;
816-#endif
817
818 /* Random data provided by the kernel. */
819 void *_dl_random;
70963a51
MT
820diff -Nur a/elf/ldconfig.c b/elf/ldconfig.c
821--- a/elf/ldconfig.c 2011-12-22 16:50:52.000000000 +0000
822+++ b/elf/ldconfig.c 2011-12-22 17:59:24.562119301 +0000
823@@ -1034,17 +1034,19 @@
e5ad540d
MT
824
825
826 static void parse_conf_include (const char *config_file, unsigned int lineno,
827- bool do_chroot, const char *pattern);
828+ const char *prefix, bool do_chroot,
829+ const char *pattern);
830
831 /* Parse configuration file. */
832 static void
833-parse_conf (const char *filename, bool do_chroot)
834+parse_conf (const char *filename, const char *prefix, bool do_chroot)
835 {
836 FILE *file = NULL;
837 char *line = NULL;
838 const char *canon;
839 size_t len = 0;
840 unsigned int lineno;
841+ size_t prefix_len = prefix ? strlen (prefix) : 0;
842
843 if (do_chroot && opt_chroot)
844 {
70963a51 845@@ -1105,7 +1107,14 @@
e5ad540d
MT
846 cp += 8;
847 while ((dir = strsep (&cp, " \t")) != NULL)
848 if (dir[0] != '\0')
849- parse_conf_include (filename, lineno, do_chroot, dir);
850+ parse_conf_include (filename, lineno, prefix, do_chroot, dir);
851+ }
852+ else if (prefix != NULL)
853+ {
854+ size_t cp_len = strlen (cp);
855+ char new_cp [prefix_len + cp_len + 1];
856+ memcpy (mempcpy (new_cp, prefix, prefix_len), cp, cp_len + 1);
857+ add_dir (new_cp);
858 }
859 else if (!strncasecmp (cp, "hwcap", 5) && isblank (cp[5]))
860 {
70963a51 861@@ -1168,7 +1177,7 @@
e5ad540d
MT
862 config files to read. */
863 static void
864 parse_conf_include (const char *config_file, unsigned int lineno,
865- bool do_chroot, const char *pattern)
866+ const char *prefix, bool do_chroot, const char *pattern)
867 {
868 if (opt_chroot && pattern[0] != '/')
869 error (EXIT_FAILURE, 0,
70963a51 870@@ -1200,7 +1209,7 @@
e5ad540d
MT
871 {
872 case 0:
873 for (size_t i = 0; i < gl.gl_pathc; ++i)
874- parse_conf (gl.gl_pathv[i], false);
875+ parse_conf (gl.gl_pathv[i], prefix, false);
876 globfree64 (&gl);
877 break;
878
70963a51 879@@ -1243,6 +1252,8 @@
e5ad540d
MT
880 /* Set the text message domain. */
881 textdomain (_libc_intl_domainname);
882
883+ arch_startup (argc, argv);
884+
885 /* Parse and process arguments. */
886 int remaining;
887 argp_parse (&argp, argc, argv, 0, &remaining, NULL);
70963a51 888@@ -1352,12 +1363,14 @@
e5ad540d
MT
889
890 if (!opt_only_cline)
891 {
892- parse_conf (config_file, true);
893+ parse_conf (config_file, NULL, true);
894
895 /* Always add the standard search paths. */
896 add_system_dir (SLIBDIR);
897 if (strcmp (SLIBDIR, LIBDIR))
898 add_system_dir (LIBDIR);
899+
900+ add_arch_dirs (config_file);
901 }
902
d9a1ddc1 903 const char *aux_cache_file = _PATH_LDCONFIG_AUX_CACHE;
70963a51
MT
904diff -Nur a/elf/ldd.bash.in b/elf/ldd.bash.in
905--- a/elf/ldd.bash.in 2011-12-22 16:50:52.000000000 +0000
906+++ b/elf/ldd.bash.in 2011-12-22 17:59:24.563119302 +0000
907@@ -167,18 +167,6 @@
eae7d017
MT
908 fi
909 done
910 case $ret in
911- 0)
912- # If the program exits with exit code 5, it means the process has been
913- # invoked with __libc_enable_secure. Fall back to running it through
914- # the dynamic linker.
915- try_trace "$file"
916- rc=$?
917- if [ $rc = 5 ]; then
918- try_trace "$RTLD" "$file"
919- rc=$?
920- fi
921- [ $rc = 0 ] || result=1
922- ;;
923 1)
924 # This can be a non-ELF binary or no binary at all.
925 nonelf "$file" || {
70963a51 926@@ -186,7 +174,7 @@
eae7d017
MT
927 result=1
928 }
929 ;;
930- 2)
931+ 0|2)
932 try_trace "$RTLD" "$file" || result=1
933 ;;
934 *)
70963a51
MT
935diff -Nur a/elf/rtld-Rules b/elf/rtld-Rules
936--- a/elf/rtld-Rules 2011-12-22 16:50:52.000000000 +0000
937+++ b/elf/rtld-Rules 2011-12-22 17:59:24.563119302 +0000
eae7d017
MT
938@@ -1,7 +1,7 @@
939 # Subroutine makefile for compiling libc modules linked into dynamic linker.
940
941 # Copyright (C) 2002,2003,2005,2006,2008,2010,2011
942-# Free Software Foundation, Inc.
943+# Free Software Foundation, Inc.
944 # This file is part of the GNU C Library.
945
946 # The GNU C Library is free software; you can redistribute it and/or
70963a51 947@@ -131,6 +131,6 @@
eae7d017
MT
948 endif
949
950 # This here is the whole point of all the shenanigans.
951-rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1
952+rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld
953
954 endif
70963a51
MT
955diff -Nur a/elf/rtld.c b/elf/rtld.c
956--- a/elf/rtld.c 2011-12-22 16:50:52.000000000 +0000
957+++ b/elf/rtld.c 2011-12-22 17:59:24.564119303 +0000
958@@ -107,7 +107,6 @@
ba8de1f5
MT
959 struct audit_list *next;
960 } *audit_list;
961
962-#ifndef HAVE_INLINED_SYSCALLS
963 /* Set nonzero during loading and initialization of executable and
964 libraries, cleared before the executable's entry point runs. This
965 must not be initialized to nonzero, because the unused dynamic
70963a51 966@@ -117,7 +116,6 @@
ba8de1f5
MT
967 never be called. */
968 int _dl_starting_up = 0;
969 INTVARDEF(_dl_starting_up)
970-#endif
971
972 /* This is the structure which defines all variables global to ld.so
973 (except those which cannot be added for some reason). */
70963a51 974@@ -929,10 +927,8 @@
ba8de1f5
MT
975 /* Process the environment variable which control the behaviour. */
976 process_envvars (&mode);
977
978-#ifndef HAVE_INLINED_SYSCALLS
979 /* Set up a flag which tells we are just starting. */
980 INTUSE(_dl_starting_up) = 1;
981-#endif
982
983 if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
984 {
70963a51
MT
985@@ -1397,7 +1393,9 @@
986 char *copy = malloc (len);
987 if (copy == NULL)
988 _dl_fatal_printf ("out of memory\n");
989- l->l_libname->name = l->l_name = memcpy (copy, dsoname, len);
990+ l->l_libname->name = memcpy (copy, dsoname, len);
991+ if (GLRO(dl_debug_mask))
992+ l->l_name = copy;
993 }
994
995 /* Add the vDSO to the object list. */
996@@ -2276,6 +2274,7 @@
ba8de1f5
MT
997 lnp->dont_free = 1;
998 lnp = lnp->next;
999 }
1000+ l->l_free_initfini = 0;
1001
1002 if (l != &GL(dl_rtld_map))
1003 _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
70963a51 1004@@ -2327,7 +2326,6 @@
ba8de1f5 1005
eae7d017
MT
1006 /* Make sure no new search directories have been added. */
1007 assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs));
ba8de1f5
MT
1008-
1009 if (! prelinked && rtld_multiple_ref)
1010 {
1011 /* There was an explicit ref to the dynamic linker as a shared lib.
70963a51
MT
1012diff -Nur a/extra-lib.mk b/extra-lib.mk
1013--- a/extra-lib.mk 2011-12-22 16:50:52.000000000 +0000
1014+++ b/extra-lib.mk 2011-12-22 17:59:24.564119303 +0000
1015@@ -101,4 +101,4 @@
eae7d017
MT
1016 include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
1017 endif
1018
1019-CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1
1020+CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -DIN_LIB=$(lib)
70963a51
MT
1021diff -Nur a/include/bits/stdlib-ldbl.h b/include/bits/stdlib-ldbl.h
1022--- a/include/bits/stdlib-ldbl.h 1970-01-01 00:00:00.000000000 +0000
1023+++ b/include/bits/stdlib-ldbl.h 2011-12-22 17:59:24.565119304 +0000
e5ad540d
MT
1024@@ -0,0 +1 @@
1025+#include <stdlib/bits/stdlib-ldbl.h>
70963a51
MT
1026diff -Nur a/include/bits/wchar-ldbl.h b/include/bits/wchar-ldbl.h
1027--- a/include/bits/wchar-ldbl.h 1970-01-01 00:00:00.000000000 +0000
1028+++ b/include/bits/wchar-ldbl.h 2011-12-22 17:59:24.565119304 +0000
e5ad540d
MT
1029@@ -0,0 +1 @@
1030+#include <wcsmbs/bits/wchar-ldbl.h>
70963a51
MT
1031diff -Nur a/include/features.h b/include/features.h
1032--- a/include/features.h 2011-12-22 16:50:52.000000000 +0000
1033+++ b/include/features.h 2011-12-22 17:59:24.565119304 +0000
eae7d017 1034@@ -310,8 +310,13 @@
e5ad540d
MT
1035 #endif
1036
1037 #if defined _FORTIFY_SOURCE && _FORTIFY_SOURCE > 0 \
1038- && __GNUC_PREREQ (4, 1) && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
1039-# if _FORTIFY_SOURCE > 1
1040+ && defined __OPTIMIZE__ && __OPTIMIZE__ > 0
1041+# if !__GNUC_PREREQ (4, 1)
1042+# ifdef __GNUC_RH_RELEASE__
1043+# warning _FORTIFY_SOURCE supported only with GCC 4.1 and later
1044+# endif
1045+# define __USE_FORTIFY_LEVEL 0
1046+# elif _FORTIFY_SOURCE > 1
1047 # define __USE_FORTIFY_LEVEL 2
1048 # else
1049 # define __USE_FORTIFY_LEVEL 1
70963a51
MT
1050diff -Nur a/include/libc-symbols.h b/include/libc-symbols.h
1051--- a/include/libc-symbols.h 2011-12-22 16:50:52.000000000 +0000
1052+++ b/include/libc-symbols.h 2011-12-22 17:59:24.566119304 +0000
1053@@ -626,7 +626,7 @@
eae7d017
MT
1054 # define libc_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
1055 # define libc_hidden_def(name) hidden_def (name)
1056 # define libc_hidden_weak(name) hidden_weak (name)
1057-# define libc_hidden_nolink(name, version) hidden_nolink (name, libc, version)
1058+# define libc_hidden_nolink(name, version) hidden_def (name)
1059 # define libc_hidden_ver(local, name) hidden_ver (local, name)
1060 # define libc_hidden_data_def(name) hidden_data_def (name)
1061 # define libc_hidden_data_weak(name) hidden_data_weak (name)
70963a51
MT
1062diff -Nur a/include/link.h b/include/link.h
1063--- a/include/link.h 2011-12-22 16:50:52.000000000 +0000
1064+++ b/include/link.h 2011-12-22 17:59:24.567119304 +0000
eae7d017
MT
1065@@ -1,6 +1,6 @@
1066 /* Data structure for communication from the run-time dynamic linker for
1067 loaded ELF shared objects.
1068- Copyright (C) 1995-2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
1069+ Copyright (C) 1995-2006, 2007, 2009, 2010 Free Software Foundation, Inc.
1070 This file is part of the GNU C Library.
1071
1072 The GNU C Library is free software; you can redistribute it and/or
70963a51 1073@@ -192,6 +192,9 @@
ba8de1f5
MT
1074 during LD_TRACE_PRELINKING=1
1075 contains any DT_SYMBOLIC
1076 libraries. */
1077+ unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be
1078+ freed, ie. not allocated with
1079+ the dummy malloc in ld.so. */
1080
1081 /* Collected information about own RPATH directories. */
1082 struct r_search_path_struct l_rpath_dirs;
70963a51 1083@@ -240,9 +243,6 @@
eae7d017
MT
1084
1085 /* List of object in order of the init and fini calls. */
1086 struct link_map **l_initfini;
1087- /* The init and fini list generated at startup, saved when the
1088- object is also loaded dynamically. */
1089- struct link_map **l_orig_initfini;
1090
1091 /* List of the dependencies introduced through symbol binding. */
1092 struct link_map_reldeps
70963a51
MT
1093@@ -290,7 +290,7 @@
1094 #endif
1095 #ifndef FORCED_DYNAMIC_TLS_OFFSET
1096 # if NO_TLS_OFFSET == 0
1097-# define FORCED_DYNAMIC_TLS_OFFSET 1
1098+# define FORCED_DYNAMIC_TLS_OFFSET -1
1099 # elif NO_TLS_OFFSET == -1
1100 # define FORCED_DYNAMIC_TLS_OFFSET -2
1101 # else
1102diff -Nur a/include/stap-probe.h b/include/stap-probe.h
1103--- a/include/stap-probe.h 1970-01-01 00:00:00.000000000 +0000
1104+++ b/include/stap-probe.h 2011-12-22 17:59:24.567119304 +0000
eae7d017
MT
1105@@ -0,0 +1,140 @@
1106+/* Macros for defining Systemtap <sys/sdt.h> static probe points.
1107+ Copyright (C) 2011 Free Software Foundation, Inc.
1108+ This file is part of the GNU C Library.
1109+
1110+ The GNU C Library is free software; you can redistribute it and/or
1111+ modify it under the terms of the GNU Lesser General Public
1112+ License as published by the Free Software Foundation; either
1113+ version 2.1 of the License, or (at your option) any later version.
1114+
1115+ The GNU C Library is distributed in the hope that it will be useful,
1116+ but WITHOUT ANY WARRANTY; without even the implied warranty of
1117+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1118+ Lesser General Public License for more details.
1119+
1120+ You should have received a copy of the GNU Lesser General Public
1121+ License along with the GNU C Library; if not, write to the Free
1122+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
1123+ 02111-1307 USA. */
1124+
1125+#ifndef _STAP_PROBE_H
1126+#define _STAP_PROBE_H 1
1127+
1128+#ifdef USE_STAP_PROBE
1129+
1130+# include <sys/sdt.h>
1131+
1132+/* Our code uses one macro LIBC_PROBE (name, n, arg1, ..., argn).
1133+
1134+ Without USE_STAP_PROBE, that does nothing but evaluates all
1135+ its arguments (to prevent bit rot, unlike e.g. assert).
1136+
1137+ Systemtap's header defines the macros STAP_PROBE (provider, name) and
1138+ STAP_PROBEn (provider, name, arg1, ..., argn). For "provider" we paste
1139+ in the IN_LIB name (libc, libpthread, etc.) automagically. */
1140+
1141+# ifndef NOT_IN_libc
1142+# define IN_LIB libc
1143+# elif !defined IN_LIB
1144+/* This is intentionally defined with extra unquoted commas in it so
1145+ that macro substitution will bomb out when it is used. We don't
1146+ just use #error here, so that this header can be included by
1147+ other headers that use LIBC_PROBE inside their own macros. We
1148+ only want such headers to fail to compile if those macros are
1149+ actually used in a context where IN_LIB has not been defined. */
1150+# define IN_LIB ,,,missing -DIN_LIB=... -- not extra-lib.mk?,,,
1151+# endif
1152+
1153+# define LIBC_PROBE(name, n, ...) \
1154+ LIBC_PROBE_1 (IN_LIB, name, n, ## __VA_ARGS__)
1155+
1156+# define LIBC_PROBE_1(lib, name, n, ...) \
1157+ STAP_PROBE##n (lib, name, ## __VA_ARGS__)
1158+
1159+# define STAP_PROBE0 STAP_PROBE
1160+
1161+# define LIBC_PROBE_ASM(name, template) \
1162+ STAP_PROBE_ASM (IN_LIB, name, template)
1163+
1164+# define LIBC_PROBE_ASM_OPERANDS STAP_PROBE_ASM_OPERANDS
1165+
1166+#else /* Not USE_STAP_PROBE. */
1167+
1168+# ifndef __ASSEMBLER__
1169+# define LIBC_PROBE(name, n, ...) DUMMY_PROBE##n (__VA_ARGS__)
1170+# else
1171+# define LIBC_PROBE(name, n, ...) /* Nothing. */
1172+# endif
1173+
1174+# define LIBC_PROBE_ASM(name, template) /* Nothing. */
1175+# define LIBC_PROBE_ASM_OPERANDS(n, ...) /* Nothing. */
1176+
1177+/* This silliness lets us evaluate all the arguments for each arity
1178+ of probe. My kingdom for a real macro system. */
1179+
1180+# define DUMMY_PROBE0() do {} while (0)
1181+# define DUMMY_PROBE1(a1) do {} while ((void) (a1), 0)
1182+# define DUMMY_PROBE2(a1, a2) do {} while ((void) (a1), \
1183+ (void) (a2), 0)
1184+# define DUMMY_PROBE3(a1, a2, a3) do {} while ((void) (a1), \
1185+ (void) (a2), \
1186+ (void) (a3), 0)
1187+# define DUMMY_PROBE4(a1, a2, a3, a4) do {} while ((void) (a1), \
1188+ (void) (a2), \
1189+ (void) (a3), \
1190+ (void) (a4), 0)
1191+# define DUMMY_PROBE5(a1, a2, a3, a4, a5) \
1192+ do {} while ((void) (a1), \
1193+ (void) (a2), \
1194+ (void) (a3), \
1195+ (void) (a4), \
1196+ (void) (a5), 0)
1197+# define DUMMY_PROBE6(a1, a2, a3, a4, a5, a6) \
1198+ do {} while ((void) (a1), \
1199+ (void) (a2), \
1200+ (void) (a3), \
1201+ (void) (a4), \
1202+ (void) (a5), \
1203+ (void) (a6), 0)
1204+# define DUMMY_PROBE7(a1, a2, a3, a4, a5, a6, a7) \
1205+ do {} while ((void) (a1), \
1206+ (void) (a2), \
1207+ (void) (a3), \
1208+ (void) (a4), \
1209+ (void) (a5), \
1210+ (void) (a6), \
1211+ (void) (a7), 0)
1212+# define DUMMY_PROBE8(a1, a2, a3, a4, a5, a6, a7, a8) \
1213+ do {} while ((void) (a1), \
1214+ (void) (a2), \
1215+ (void) (a3), \
1216+ (void) (a4), \
1217+ (void) (a5), \
1218+ (void) (a6), \
1219+ (void) (a7), \
1220+ (void) (a8), 0)
1221+# define DUMMY_PROBE9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \
1222+ do {} while ((void) (a1), \
1223+ (void) (a2), \
1224+ (void) (a3), \
1225+ (void) (a4), \
1226+ (void) (a5), \
1227+ (void) (a6), \
1228+ (void) (a7), \
1229+ (void) (a8), \
1230+ (void) (a9), 0)
1231+# define DUMMY_PROBE10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \
1232+ do {} while ((void) (a1), \
1233+ (void) (a2), \
1234+ (void) (a3), \
1235+ (void) (a4), \
1236+ (void) (a5), \
1237+ (void) (a6), \
1238+ (void) (a7), \
1239+ (void) (a8), \
1240+ (void) (a9), \
1241+ (void) (a10), 0)
1242+
1243+#endif /* USE_STAP_PROBE. */
1244+
1245+#endif /* stap-probe.h */
70963a51
MT
1246diff -Nur a/include/sys/resource.h b/include/sys/resource.h
1247--- a/include/sys/resource.h 2011-12-22 16:50:52.000000000 +0000
1248+++ b/include/sys/resource.h 2011-12-22 17:59:24.567119304 +0000
1249@@ -13,4 +13,5 @@
ba8de1f5
MT
1250
1251 extern int __setrlimit (enum __rlimit_resource __resource,
1252 const struct rlimit *__rlimits);
1253+libc_hidden_proto (__getrlimit)
1254 #endif
70963a51
MT
1255diff -Nur a/inet/Makefile b/inet/Makefile
1256--- a/inet/Makefile 2011-12-22 16:50:52.000000000 +0000
1257+++ b/inet/Makefile 2011-12-22 17:59:24.568119304 +0000
1258@@ -57,6 +57,8 @@
ba8de1f5
MT
1259
1260 include ../Rules
1261
eae7d017 1262+CFLAGS-tst-inet6_rth.c += -fno-strict-aliasing
ba8de1f5
MT
1263+
1264 ifeq ($(have-thread-library),yes)
1265
1266 CFLAGS-gethstbyad_r.c = -DUSE_NSCD=1 -fexceptions
70963a51
MT
1267diff -Nur a/intl/locale.alias b/intl/locale.alias
1268--- a/intl/locale.alias 2011-12-22 16:50:52.000000000 +0000
1269+++ b/intl/locale.alias 2011-12-22 17:59:24.568119304 +0000
1270@@ -57,8 +57,6 @@
e5ad540d
MT
1271 korean.euc ko_KR.eucKR
1272 ko_KR ko_KR.eucKR
1273 lithuanian lt_LT.ISO-8859-13
1274-no_NO nb_NO.ISO-8859-1
1275-no_NO.ISO-8859-1 nb_NO.ISO-8859-1
1276 norwegian nb_NO.ISO-8859-1
1277 nynorsk nn_NO.ISO-8859-1
1278 polish pl_PL.ISO-8859-2
70963a51
MT
1279diff -Nur a/libio/stdio.h b/libio/stdio.h
1280--- a/libio/stdio.h 2011-12-22 16:50:52.000000000 +0000
1281+++ b/libio/stdio.h 2011-12-22 17:59:24.569119304 +0000
1282@@ -169,10 +169,12 @@
e5ad540d
MT
1283 extern struct _IO_FILE *stdin; /* Standard input stream. */
1284 extern struct _IO_FILE *stdout; /* Standard output stream. */
1285 extern struct _IO_FILE *stderr; /* Standard error output stream. */
1286+#ifdef __STDC__
1287 /* C89/C99 say they're macros. Make them happy. */
1288 #define stdin stdin
1289 #define stdout stdout
1290 #define stderr stderr
1291+#endif
1292
1293 __BEGIN_NAMESPACE_STD
1294 /* Remove file FILENAME. */
70963a51
MT
1295diff -Nur a/locale/iso-4217.def b/locale/iso-4217.def
1296--- a/locale/iso-4217.def 2011-12-22 16:50:52.000000000 +0000
1297+++ b/locale/iso-4217.def 2011-12-22 17:59:24.569119304 +0000
e5ad540d
MT
1298@@ -8,6 +8,7 @@
1299 *
1300 * !!! The list has to be sorted !!!
1301 */
1302+DEFINE_INT_CURR("ADP") /* Andorran Peseta -> EUR */
1303 DEFINE_INT_CURR("AED") /* United Arab Emirates Dirham */
1304 DEFINE_INT_CURR("AFN") /* Afghanistan Afgani */
1305 DEFINE_INT_CURR("ALL") /* Albanian Lek */
70963a51 1306@@ -15,12 +16,14 @@
e5ad540d
MT
1307 DEFINE_INT_CURR("ANG") /* Netherlands Antilles */
1308 DEFINE_INT_CURR("AOA") /* Angolan Kwanza */
1309 DEFINE_INT_CURR("ARS") /* Argentine Peso */
1310+DEFINE_INT_CURR("ATS") /* Austrian Schilling -> EUR */
1311 DEFINE_INT_CURR("AUD") /* Australian Dollar */
1312 DEFINE_INT_CURR("AWG") /* Aruba Guilder */
1313 DEFINE_INT_CURR("AZM") /* Azerbaijan Manat */
1314 DEFINE_INT_CURR("BAM") /* Bosnian and Herzegovina Convertible Mark */
1315 DEFINE_INT_CURR("BBD") /* Barbados Dollar */
1316 DEFINE_INT_CURR("BDT") /* Bangladesh Taka */
1317+DEFINE_INT_CURR("BEF") /* Belgian Franc -> EUR */
1318 DEFINE_INT_CURR("BGN") /* Bulgarian Lev */
1319 DEFINE_INT_CURR("BHD") /* Bahraini Dinar */
1320 DEFINE_INT_CURR("BIF") /* Burundi Franc */
70963a51 1321@@ -44,6 +47,7 @@
e5ad540d
MT
1322 DEFINE_INT_CURR("CVE") /* Cape Verde Escudo */
1323 DEFINE_INT_CURR("CYP") /* Cypriot Pound */
1324 DEFINE_INT_CURR("CZK") /* Czech Koruna */
1325+DEFINE_INT_CURR("DEM") /* German Mark -> EUR */
1326 DEFINE_INT_CURR("DJF") /* Djibouti Franc */
1327 DEFINE_INT_CURR("DKK") /* Danish Krone (Faroe Islands, Greenland) */
1328 DEFINE_INT_CURR("DOP") /* Dominican Republic */
70963a51 1329@@ -51,16 +55,20 @@
e5ad540d
MT
1330 DEFINE_INT_CURR("EEK") /* Estonian Kroon */
1331 DEFINE_INT_CURR("EGP") /* Egyptian Pound */
1332 DEFINE_INT_CURR("ERN") /* Eritrean Nakfa */
1333+DEFINE_INT_CURR("ESP") /* Spanish Peseta -> EUR */
1334 DEFINE_INT_CURR("ETB") /* Ethiopian Birr */
1335 DEFINE_INT_CURR("EUR") /* European Union Euro */
1336+DEFINE_INT_CURR("FIM") /* Finnish Markka -> EUR */
1337 DEFINE_INT_CURR("FJD") /* Fiji Dollar */
1338 DEFINE_INT_CURR("FKP") /* Falkland Islands Pound (Malvinas) */
1339+DEFINE_INT_CURR("FRF") /* French Franc -> EUR */
1340 DEFINE_INT_CURR("GBP") /* British Pound */
1341 DEFINE_INT_CURR("GEL") /* Georgia Lari */
1342 DEFINE_INT_CURR("GHC") /* Ghana Cedi */
1343 DEFINE_INT_CURR("GIP") /* Gibraltar Pound */
1344 DEFINE_INT_CURR("GMD") /* Gambian Dalasi */
1345 DEFINE_INT_CURR("GNF") /* Guinea Franc */
1346+DEFINE_INT_CURR("GRD") /* Greek Drachma -> EUR */
1347 DEFINE_INT_CURR("GTQ") /* Guatemala Quetzal */
1348 DEFINE_INT_CURR("GYD") /* Guyana Dollar */
1349 DEFINE_INT_CURR("HKD") /* Hong Kong Dollar */
70963a51 1350@@ -69,12 +77,14 @@
e5ad540d
MT
1351 DEFINE_INT_CURR("HTG") /* Haiti Gourde */
1352 DEFINE_INT_CURR("HUF") /* Hungarian Forint */
1353 DEFINE_INT_CURR("IDR") /* Indonesia Rupiah */
1354+DEFINE_INT_CURR("IEP") /* Irish Pound -> EUR */
1355 DEFINE_INT_CURR("ILS") /* Israeli Shekel */
1356 DEFINE_INT_CURR("IMP") /* Isle of Man Pounds */
1357 DEFINE_INT_CURR("INR") /* Indian Rupee (Bhutan) */
1358 DEFINE_INT_CURR("IQD") /* Iraqi Dinar */
1359 DEFINE_INT_CURR("IRR") /* Iranian Rial */
1360 DEFINE_INT_CURR("ISK") /* Iceland Krona */
1361+DEFINE_INT_CURR("ITL") /* Italian Lira -> EUR */
1362 DEFINE_INT_CURR("JEP") /* Jersey Pound */
1363 DEFINE_INT_CURR("JMD") /* Jamaican Dollar */
1364 DEFINE_INT_CURR("JOD") /* Jordanian Dinar */
70963a51 1365@@ -94,6 +104,7 @@
e5ad540d
MT
1366 DEFINE_INT_CURR("LRD") /* Liberian Dollar */
1367 DEFINE_INT_CURR("LSL") /* Lesotho Maloti */
1368 DEFINE_INT_CURR("LTL") /* Lithuanian Litas */
1369+DEFINE_INT_CURR("LUF") /* Luxembourg Franc -> EUR */
1370 DEFINE_INT_CURR("LVL") /* Latvia Lat */
1371 DEFINE_INT_CURR("LYD") /* Libyan Arab Jamahiriya Dinar */
1372 DEFINE_INT_CURR("MAD") /* Moroccan Dirham */
70963a51 1373@@ -114,6 +125,7 @@
e5ad540d
MT
1374 DEFINE_INT_CURR("NAD") /* Namibia Dollar */
1375 DEFINE_INT_CURR("NGN") /* Nigeria Naira */
1376 DEFINE_INT_CURR("NIO") /* Nicaragua Cordoba Oro */
1377+DEFINE_INT_CURR("NLG") /* Netherlands Guilder -> EUR */
1378 DEFINE_INT_CURR("NOK") /* Norwegian Krone */
1379 DEFINE_INT_CURR("NPR") /* Nepalese Rupee */
1380 DEFINE_INT_CURR("NZD") /* New Zealand Dollar */
70963a51 1381@@ -124,6 +136,7 @@
e5ad540d
MT
1382 DEFINE_INT_CURR("PHP") /* Philippines Peso */
1383 DEFINE_INT_CURR("PKR") /* Pakistan Rupee */
1384 DEFINE_INT_CURR("PLN") /* Polish Zloty */
1385+DEFINE_INT_CURR("PTE") /* Portugese Escudo -> EUR */
1386 DEFINE_INT_CURR("PYG") /* Paraguay Guarani */
1387 DEFINE_INT_CURR("QAR") /* Qatar Rial */
1388 DEFINE_INT_CURR("ROL") /* Romanian Leu */
70963a51
MT
1389diff -Nur a/locale/programs/locarchive.c b/locale/programs/locarchive.c
1390--- a/locale/programs/locarchive.c 2011-12-22 16:50:52.000000000 +0000
1391+++ b/locale/programs/locarchive.c 2011-12-22 17:59:24.570119304 +0000
1392@@ -253,9 +253,9 @@
e5ad540d
MT
1393 /* forward decls for below */
1394 static uint32_t add_locale (struct locarhandle *ah, const char *name,
1395 locale_data_t data, bool replace);
1396-static void add_alias (struct locarhandle *ah, const char *alias,
1397- bool replace, const char *oldname,
1398- uint32_t *locrec_offset_p);
1399+void add_alias (struct locarhandle *ah, const char *alias,
1400+ bool replace, const char *oldname,
1401+ uint32_t *locrec_offset_p);
1402
1403
1404 static bool
70963a51 1405@@ -636,7 +636,7 @@
e5ad540d
MT
1406 #include "../../intl/explodename.c"
1407 #include "../../intl/l10nflist.c"
1408
1409-static struct namehashent *
1410+struct namehashent *
1411 insert_name (struct locarhandle *ah,
1412 const char *name, size_t name_len, bool replace)
1413 {
70963a51 1414@@ -694,7 +694,7 @@
e5ad540d
MT
1415 return &namehashtab[idx];
1416 }
1417
1418-static void
1419+void
1420 add_alias (struct locarhandle *ah, const char *alias, bool replace,
1421 const char *oldname, uint32_t *locrec_offset_p)
1422 {
70963a51
MT
1423diff -Nur a/localedata/ChangeLog b/localedata/ChangeLog
1424--- a/localedata/ChangeLog 2011-12-22 16:50:52.000000000 +0000
1425+++ b/localedata/ChangeLog 2011-12-22 17:59:24.571119304 +0000
1426@@ -64,6 +64,14 @@
1427 * tests-mbwc/tst_funcs.h (TST_DECL_VARS, TST_HEAD_LOCALE):
1428 Remove unused variable.
1429
4fb11761
MT
1430+2011-06-28 Andreas Schwab <schwab@redhat.com>
1431+
1432+ * charmaps/GB18030: Correct some entries.
1433+
1434+2011-06-21 Andreas Schwab <schwab@redhat.com>
1435+
1436+ * charmaps/GB18030: Readd lost characters.
1437+
1438 2011-05-21 Ulrich Drepper <drepper@gmail.com>
1439
1440 [BZ #12788]
70963a51
MT
1441diff -Nur a/localedata/Makefile b/localedata/Makefile
1442--- a/localedata/Makefile 2011-12-22 16:50:52.000000000 +0000
1443+++ b/localedata/Makefile 2011-12-22 17:59:24.572119304 +0000
1444@@ -224,6 +224,7 @@
e5ad540d
MT
1445 echo -n '...'; \
1446 input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
1447 $(LOCALEDEF) --alias-file=../intl/locale.alias \
1448+ --no-archive \
1449 -i locales/$$input -c -f charmaps/$$charset \
1450 $(addprefix --prefix=,$(install_root)) $$locale; \
1451 echo ' done'; \
70963a51
MT
1452diff -Nur a/localedata/SUPPORTED b/localedata/SUPPORTED
1453--- a/localedata/SUPPORTED 2011-12-22 16:50:52.000000000 +0000
1454+++ b/localedata/SUPPORTED 2011-12-22 17:59:24.572119304 +0000
1455@@ -88,6 +88,7 @@
e5ad540d
MT
1456 cy_GB/ISO-8859-14 \
1457 da_DK.UTF-8/UTF-8 \
1458 da_DK/ISO-8859-1 \
1459+da_DK.ISO-8859-15/ISO-8859-15 \
1460 de_AT.UTF-8/UTF-8 \
1461 de_AT/ISO-8859-1 \
1462 de_AT@euro/ISO-8859-15 \
70963a51 1463@@ -119,6 +120,7 @@
e5ad540d
MT
1464 en_DK/ISO-8859-1 \
1465 en_GB.UTF-8/UTF-8 \
1466 en_GB/ISO-8859-1 \
1467+en_GB.ISO-8859-15/ISO-8859-15 \
1468 en_HK.UTF-8/UTF-8 \
1469 en_HK/ISO-8859-1 \
1470 en_IE.UTF-8/UTF-8 \
70963a51 1471@@ -134,6 +136,7 @@
e5ad540d
MT
1472 en_SG/ISO-8859-1 \
1473 en_US.UTF-8/UTF-8 \
1474 en_US/ISO-8859-1 \
1475+en_US.ISO-8859-15/ISO-8859-15 \
1476 en_ZA.UTF-8/UTF-8 \
1477 en_ZA/ISO-8859-1 \
eae7d017 1478 en_ZM/UTF-8 \
70963a51 1479@@ -316,6 +319,8 @@
e5ad540d
MT
1480 nl_NL@euro/ISO-8859-15 \
1481 nn_NO.UTF-8/UTF-8 \
1482 nn_NO/ISO-8859-1 \
1483+no_NO.UTF-8/UTF-8 \
1484+no_NO/ISO-8859-1 \
1485 nr_ZA/UTF-8 \
1486 nso_ZA/UTF-8 \
1487 oc_FR.UTF-8/UTF-8 \
70963a51 1488@@ -377,6 +382,7 @@
e5ad540d
MT
1489 sv_FI@euro/ISO-8859-15 \
1490 sv_SE.UTF-8/UTF-8 \
1491 sv_SE/ISO-8859-1 \
1492+sv_SE.ISO-8859-15/ISO-8859-15 \
eae7d017
MT
1493 sw_KE/UTF-8 \
1494 sw_TZ/UTF-8 \
e5ad540d 1495 ta_IN/UTF-8 \
70963a51
MT
1496diff -Nur a/localedata/locales/cy_GB b/localedata/locales/cy_GB
1497--- a/localedata/locales/cy_GB 2011-12-22 16:50:52.000000000 +0000
1498+++ b/localedata/locales/cy_GB 2011-12-22 17:59:24.573119304 +0000
1499@@ -248,8 +248,11 @@
e5ad540d
MT
1500 d_t_fmt "<U0044><U0079><U0064><U0064><U0020><U0025><U0041><U0020><U0025><U0064><U0020><U006d><U0069><U0073><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
1501 d_fmt "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0079>"
1502 t_fmt "<U0025><U0054>"
1503-am_pm "";""
1504-t_fmt_ampm ""
1505+am_pm "<U0041><U004D>";"<U0050><U004D>"
1506+t_fmt_ampm "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
1507+date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
1508+<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
1509+<U0025><U005A><U0020><U0025><U0059>"
1510 END LC_TIME
1511
1512 LC_MESSAGES
70963a51
MT
1513diff -Nur a/localedata/locales/en_GB b/localedata/locales/en_GB
1514--- a/localedata/locales/en_GB 2011-12-22 16:50:52.000000000 +0000
1515+++ b/localedata/locales/en_GB 2011-12-22 17:59:24.573119304 +0000
1516@@ -116,8 +116,8 @@
e5ad540d
MT
1517 d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
1518 d_fmt "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
1519 t_fmt "<U0025><U0054>"
1520-am_pm "";""
1521-t_fmt_ampm ""
1522+am_pm "<U0041><U004D>";"<U0050><U004D>"
1523+t_fmt_ampm "<U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0050><U0020><U0025><U005A>"
1524 date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
1525 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
1526 <U0025><U005A><U0020><U0025><U0059>"
70963a51
MT
1527diff -Nur a/localedata/locales/no_NO b/localedata/locales/no_NO
1528--- a/localedata/locales/no_NO 1970-01-01 00:00:00.000000000 +0000
1529+++ b/localedata/locales/no_NO 2011-12-22 17:59:24.573119304 +0000
e5ad540d
MT
1530@@ -0,0 +1,69 @@
1531+escape_char /
1532+comment_char %
1533+
1534+% Norwegian language locale for Norway
1535+% Source: Norsk Standardiseringsforbund
1536+% Address: University Library,
1537+% Drammensveien 41, N-9242 Oslo, Norge
1538+% Contact: Kolbjoern Aamboe
1539+% Tel: +47 - 22859109
1540+% Fax: +47 - 22434497
1541+% Email: kolbjorn.aambo@usit.uio.no
1542+% Language: no
1543+% Territory: NO
1544+% Revision: 4.3
1545+% Date: 1996-10-15
1546+% Application: general
1547+% Users: general
1548+% Repertoiremap: mnemonic.ds
1549+% Charset: ISO-8859-1
1550+% Distribution and use is free, also
1551+% for commercial purposes.
1552+
1553+LC_IDENTIFICATION
1554+copy "nb_NO"
1555+END LC_IDENTIFICATION
1556+
1557+LC_COLLATE
1558+copy "nb_NO"
1559+END LC_COLLATE
1560+
1561+LC_CTYPE
1562+copy "nb_NO"
1563+END LC_CTYPE
1564+
1565+LC_MONETARY
1566+copy "nb_NO"
1567+END LC_MONETARY
1568+
1569+LC_NUMERIC
1570+copy "nb_NO"
1571+END LC_NUMERIC
1572+
1573+LC_TIME
1574+copy "nb_NO"
1575+END LC_TIME
1576+
1577+LC_MESSAGES
1578+copy "nb_NO"
1579+END LC_MESSAGES
1580+
1581+LC_PAPER
1582+copy "nb_NO"
1583+END LC_PAPER
1584+
1585+LC_TELEPHONE
1586+copy "nb_NO"
1587+END LC_TELEPHONE
1588+
1589+LC_MEASUREMENT
1590+copy "nb_NO"
1591+END LC_MEASUREMENT
1592+
1593+LC_NAME
1594+copy "nb_NO"
1595+END LC_NAME
1596+
1597+LC_ADDRESS
1598+copy "nb_NO"
1599+END LC_ADDRESS
70963a51
MT
1600diff -Nur a/localedata/locales/zh_TW b/localedata/locales/zh_TW
1601--- a/localedata/locales/zh_TW 2011-12-22 16:50:52.000000000 +0000
1602+++ b/localedata/locales/zh_TW 2011-12-22 17:59:24.574119304 +0000
e5ad540d
MT
1603@@ -1,7 +1,7 @@
1604 comment_char %
1605 escape_char /
1606 %
1607-% Chinese language locale for Taiwan R.O.C.
1608+% Chinese language locale for Taiwan
1609 % charmap: BIG5-CP950
1610 %
1611 % Original Author:
70963a51 1612@@ -17,7 +17,7 @@
e5ad540d
MT
1613 % Reference: http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
1614
1615 LC_IDENTIFICATION
1616-title "Chinese locale for Taiwan R.O.C."
1617+title "Chinese locale for Taiwan"
1618 source ""
1619 address ""
1620 contact ""
70963a51 1621@@ -25,7 +25,7 @@
e5ad540d
MT
1622 tel ""
1623 fax ""
1624 language "Chinese"
1625-territory "Taiwan R.O.C."
1626+territory "Taiwan"
1627 revision "0.2"
1628 date "2000-08-02"
1629 %
70963a51
MT
1630diff -Nur a/login/programs/pt_chown.c b/login/programs/pt_chown.c
1631--- a/login/programs/pt_chown.c 2011-12-22 16:50:52.000000000 +0000
1632+++ b/login/programs/pt_chown.c 2011-12-22 17:59:24.574119304 +0000
eae7d017
MT
1633@@ -29,6 +29,7 @@
1634 #include <string.h>
1635 #include <sys/stat.h>
1636 #include <unistd.h>
1637+#include <fcntl.h>
1638 #ifdef HAVE_LIBCAP
1639 # include <sys/capability.h>
1640 # include <sys/prctl.h>
70963a51 1641@@ -143,7 +144,7 @@
eae7d017
MT
1642 uid_t uid = getuid ();
1643 int remaining;
1644
1645- if (argc == 1 && euid == 0)
1646+ if (argc == 1 && fcntl (PTY_FILENO, F_GETFD) == 0)
1647 {
1648 #ifdef HAVE_LIBCAP
1649 /* Drop privileges. */
70963a51 1650@@ -176,6 +177,13 @@
eae7d017
MT
1651
1652 /* We aren't going to be using privileges, so drop them right now. */
1653 setuid (uid);
1654+#ifdef HAVE_LIBCAP
1655+ cap_t caps = cap_init ();
1656+ if (caps == NULL)
1657+ error (1, errno, "cap_init");
1658+ cap_set_proc (caps);
1659+ cap_free (caps);
1660+#endif
1661
1662 /* Set locale via LC_ALL. */
1663 setlocale (LC_ALL, "");
70963a51 1664@@ -195,9 +203,5 @@
eae7d017
MT
1665 return EXIT_FAILURE;
1666 }
1667
1668- /* Check if we are properly installed. */
1669- if (euid != 0)
1670- error (FAIL_EXEC, 0, gettext ("needs to be installed setuid `root'"));
1671-
1672 return EXIT_SUCCESS;
1673 }
70963a51
MT
1674diff -Nur a/malloc/mcheck.c b/malloc/mcheck.c
1675--- a/malloc/mcheck.c 2011-12-22 16:50:52.000000000 +0000
1676+++ b/malloc/mcheck.c 2011-12-22 17:59:24.575119304 +0000
d9a1ddc1 1677@@ -25,10 +25,26 @@
e5ad540d
MT
1678 # include <mcheck.h>
1679 # include <stdint.h>
1680 # include <stdio.h>
1681+# include <stdlib.h>
1682 # include <libintl.h>
d9a1ddc1 1683 # include <errno.h>
e5ad540d
MT
1684 #endif
1685
1686+#ifdef _LIBC
1687+extern __typeof (malloc) __libc_malloc;
1688+extern __typeof (free) __libc_free;
1689+extern __typeof (realloc) __libc_realloc;
1690+libc_hidden_proto (__libc_malloc)
1691+libc_hidden_proto (__libc_realloc)
1692+libc_hidden_proto (__libc_free)
1693+libc_hidden_proto (__libc_memalign)
1694+#else
1695+# define __libc_malloc(sz) malloc (sz)
1696+# define __libc_free(ptr) free (ptr)
1697+# define __libc_realloc(ptr, sz) realloc (ptr, sz)
1698+# define __libc_memalign(al, sz) memalign (al, sz)
1699+#endif
1700+
1701 /* Old hook values. */
1702 static void (*old_free_hook) (__ptr_t ptr, __const __ptr_t);
1703 static __ptr_t (*old_malloc_hook) (__malloc_size_t size, const __ptr_t);
70963a51 1704@@ -199,7 +215,7 @@
e5ad540d
MT
1705 if (old_free_hook != NULL)
1706 (*old_free_hook) (ptr, caller);
1707 else
1708- free (ptr);
1709+ __libc_free (ptr);
1710 __free_hook = freehook;
1711 }
1712
70963a51 1713@@ -222,7 +238,7 @@
e5ad540d
MT
1714 hdr = (struct hdr *) (*old_malloc_hook) (sizeof (struct hdr) + size + 1,
1715 caller);
1716 else
1717- hdr = (struct hdr *) malloc (sizeof (struct hdr) + size + 1);
1718+ hdr = (struct hdr *) __libc_malloc (sizeof (struct hdr) + size + 1);
1719 __malloc_hook = mallochook;
1720 if (hdr == NULL)
1721 return NULL;
70963a51 1722@@ -259,7 +275,7 @@
e5ad540d
MT
1723 if (old_memalign_hook != NULL)
1724 block = (*old_memalign_hook) (alignment, slop + size + 1, caller);
1725 else
1726- block = memalign (alignment, slop + size + 1);
1727+ block = __libc_memalign (alignment, slop + size + 1);
1728 __memalign_hook = memalignhook;
1729 if (block == NULL)
1730 return NULL;
70963a51 1731@@ -320,8 +336,8 @@
e5ad540d
MT
1732 sizeof (struct hdr) + size + 1,
1733 caller);
1734 else
1735- hdr = (struct hdr *) realloc ((__ptr_t) hdr,
1736- sizeof (struct hdr) + size + 1);
1737+ hdr = (struct hdr *) __libc_realloc ((__ptr_t) hdr,
1738+ sizeof (struct hdr) + size + 1);
1739 __free_hook = freehook;
1740 __malloc_hook = mallochook;
1741 __memalign_hook = memalignhook;
70963a51 1742@@ -381,8 +397,8 @@
e5ad540d
MT
1743 if (__malloc_initialized <= 0 && !mcheck_used)
1744 {
1745 /* We call malloc() once here to ensure it is initialized. */
1746- void *p = malloc (0);
1747- free (p);
1748+ void *p = __libc_malloc (0);
1749+ __libc_free (p);
1750
1751 old_free_hook = __free_hook;
1752 __free_hook = freehook;
70963a51
MT
1753diff -Nur a/manual/libc.texinfo b/manual/libc.texinfo
1754--- a/manual/libc.texinfo 2011-12-22 16:50:52.000000000 +0000
1755+++ b/manual/libc.texinfo 2011-12-22 17:59:24.575119304 +0000
e5ad540d
MT
1756@@ -5,7 +5,7 @@
1757 @c setchapternewpage odd
1758
1759 @comment Tell install-info what to do.
1760-@dircategory Software libraries
1761+@dircategory Libraries
1762 @direntry
1763 * Libc: (libc). C library.
1764 @end direntry
70963a51
MT
1765diff -Nur a/misc/sys/cdefs.h b/misc/sys/cdefs.h
1766--- a/misc/sys/cdefs.h 2011-12-22 16:50:52.000000000 +0000
1767+++ b/misc/sys/cdefs.h 2011-12-22 17:59:24.576119305 +0000
1768@@ -146,7 +146,10 @@
e5ad540d
MT
1769 #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
1770 #define __bos0(ptr) __builtin_object_size (ptr, 0)
1771
1772-#if __GNUC_PREREQ (4,3)
1773+#if __GNUC_PREREQ (4,3) \
1774+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
1775+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
1776+ && __GNUC_RH_RELEASE__ >= 31)
1777 # define __warndecl(name, msg) \
1778 extern void name (void) __attribute__((__warning__ (msg)))
1779 # define __warnattr(msg) __attribute__((__warning__ (msg)))
70963a51 1780@@ -316,10 +319,16 @@
e5ad540d
MT
1781
1782 /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
1783 inline semantics, unless -fgnu89-inline is used. */
1784-#if !defined __cplusplus || __GNUC_PREREQ (4,3)
1785+#if !defined __cplusplus || __GNUC_PREREQ (4,3) \
1786+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
1787+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
1788+ && __GNUC_RH_RELEASE__ >= 31)
1789 # if defined __GNUC_STDC_INLINE__ || defined __cplusplus
1790 # define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
1791-# if __GNUC_PREREQ (4,3)
1792+# if __GNUC_PREREQ (4,3) \
1793+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
1794+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
1795+ && __GNUC_RH_RELEASE__ >= 31)
1796 # define __extern_always_inline \
1797 extern __always_inline __attribute__ ((__gnu_inline__, __artificial__))
1798 # else
70963a51 1799@@ -339,7 +348,10 @@
e5ad540d
MT
1800
1801 /* GCC 4.3 and above allow passing all anonymous arguments of an
1802 __extern_always_inline function to some other vararg function. */
1803-#if __GNUC_PREREQ (4,3)
1804+#if __GNUC_PREREQ (4,3) \
1805+ || (defined __GNUC_RH_RELEASE__ && __GNUC__ == 4 \
1806+ && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 2 \
1807+ && __GNUC_RH_RELEASE__ >= 31)
1808 # define __va_arg_pack() __builtin_va_arg_pack ()
1809 # define __va_arg_pack_len() __builtin_va_arg_pack_len ()
1810 #endif
70963a51
MT
1811diff -Nur a/nis/Makefile b/nis/Makefile
1812--- a/nis/Makefile 2011-12-22 16:50:52.000000000 +0000
1813+++ b/nis/Makefile 2011-12-22 17:59:24.576119305 +0000
1814@@ -23,9 +23,9 @@
eae7d017
MT
1815
1816 aux := nis_hash
1817
1818+headers := $(wildcard rpcsvc/*.[hx])
1819 distribute := nss-nis.h nss-nisplus.h nis_intern.h Banner \
1820- nisplus-parser.h nis_xdr.h nss \
1821- $(wildcard rpcsvc/*.[hx])
1822+ nisplus-parser.h nis_xdr.h nss
1823
1824 # These are the databases available for the nis (and perhaps later nisplus)
1825 # service. This must be a superset of the services in nss.
70963a51 1826@@ -69,6 +69,8 @@
ba8de1f5
MT
1827
1828 include ../Rules
1829
eae7d017
MT
1830+CFLAGS-nis_findserv.c += -fno-strict-aliasing
1831+CFLAGS-ypclnt.c += -fno-strict-aliasing
ba8de1f5
MT
1832
1833 $(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version)
1834 $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \
70963a51
MT
1835diff -Nur a/nis/nss b/nis/nss
1836--- a/nis/nss 2011-12-22 16:50:52.000000000 +0000
1837+++ b/nis/nss 2011-12-22 17:59:24.577119306 +0000
e5ad540d
MT
1838@@ -25,7 +25,7 @@
1839 # memory with every getXXent() call. Otherwise each getXXent() call
1840 # might result into a network communication with the server to get
1841 # the next entry.
1842-#SETENT_BATCH_READ=TRUE
1843+SETENT_BATCH_READ=TRUE
1844 #
1845 # ADJUNCT_AS_SHADOW
1846 # If set to TRUE, the passwd routines in the NIS NSS module will not
70963a51
MT
1847diff -Nur a/nptl/ChangeLog b/nptl/ChangeLog
1848--- a/nptl/ChangeLog 2011-12-22 16:50:52.000000000 +0000
1849+++ b/nptl/ChangeLog 2011-12-22 17:59:24.579119308 +0000
1850@@ -195,6 +195,51 @@
eae7d017
MT
1851 clearing memory.
1852 Patch partly by Robert Rex <robert.rex@exasol.com>.
1853
1854+2011-02-22 Rayson Ho <rho@redhat.com>
1855+
1856+ * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Low-level SystemTap
1857+ probes for i386.
1858+ * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
1859+ * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Likewise.
1860+ * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise.
1861+ * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise.
1862+ * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
1863+ * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
1864+ * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise.
1865+ * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise.
1866+
1867+2011-02-09 Rayson Ho <rho@redhat.com>
1868+
1869+ * DESIGN-systemtap-probes.txt: New file.
1870+ * pthread_cond_broadcast.c: SystemTap probes.
1871+ * pthread_cond_init.c: Likewise.
1872+ * pthread_cond_signal.c: Likewise.
1873+ * pthread_cond_wait.c: Likewise.
1874+ * pthread_cond_destroy.c: Likewise.
1875+ * pthread_create.c: Likewise.
1876+ * pthread_join.c: Likewise.
1877+ * pthread_mutex_destroy.c: Likewise.
1878+ * pthread_mutex_init.c: Likewise.
1879+ * pthread_mutex_lock.c: Likewise.
1880+ * pthread_mutex_timedlock.c: Likewise.
1881+ * pthread_mutex_unlock.c: Likewise.
1882+ * pthread_rwlock_destroy.c: Likewise.
1883+ * pthread_rwlock_rdlock.c: Likewise.
1884+ * pthread_rwlock_unlock.c: Likewise.
1885+ * pthread_rwlock_wrlock.c: Likewise.
1886+ * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
1887+ * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
1888+ * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise.
1889+ * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
1890+ * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
1891+ * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
1892+ * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise.
1893+ * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise.
1894+
1895+2010-07-23 Roland McGrath <roland@redhat.com>
1896+
1897+ * pthread_create.c (start_thread): Define pthread_start LIBC_PROBE.
1898+
1899 2011-01-19 Roland McGrath <roland@redhat.com>
1900
1901 * pthread_cond_wait.c (__pthread_cond_wait): Fix comment typo.
70963a51 1902@@ -4924,6 +4969,11 @@
e5ad540d
MT
1903 Move definition inside libpthread, libc, librt check. Provide
1904 definition for rtld.
1905
1906+2004-09-02 Jakub Jelinek <jakub@redhat.com>
1907+
1908+ * pthread_cond_destroy.c (__pthread_cond_destroy): If there are
1909+ waiters, awake all waiters on the associated mutex.
1910+
1911 2004-09-02 Ulrich Drepper <drepper@redhat.com>
1912
1913 * sysdeps/alpha/jmpbuf-unwind.h: Define __libc_unwind_longjmp.
70963a51 1914@@ -6998,6 +7048,11 @@
e5ad540d
MT
1915
1916 * Makefile [$(build-shared) = yes] (tests): Depend on $(test-modules).
1917
1918+2003-07-22 Jakub Jelinek <jakub@redhat.com>
1919+
1920+ * descr.h: Don't include lowlevellock.h, pthreaddef.h and dl-sysdep.h
1921+ if __need_struct_pthread_size, instead define lll_lock_t.
1922+
1923 2003-07-25 Jakub Jelinek <jakub@redhat.com>
1924
1925 * tst-cancel17.c (do_test): Check if aio_cancel failed.
70963a51
MT
1926diff -Nur a/nptl/DESIGN-systemtap-probes.txt b/nptl/DESIGN-systemtap-probes.txt
1927--- a/nptl/DESIGN-systemtap-probes.txt 1970-01-01 00:00:00.000000000 +0000
1928+++ b/nptl/DESIGN-systemtap-probes.txt 2011-12-22 17:59:24.580119308 +0000
eae7d017
MT
1929@@ -0,0 +1,89 @@
1930+Systemtap is a dynamic tracing/instrumenting tool available on Linux. Probes
1931+that are not fired at run time have close to zero overhead.
1932+
1933+The following probes are available for NPTL:
1934+
1935+Thread creation & Join Probes
1936+=============================
1937+pthread_create - probe for pthread_create
1938+ arg1 = pointer (pthread_t*) to thread
1939+ arg2 = pointer (pthread_attr_t*) to attr
1940+ arg3 = pointer (void *) to start_routine
1941+ arg4 = arguments to start_routine
1942+pthread_start - probe for actual thread creation
1943+ arg1 = struct pthread (members include thread ID, process ID)
1944+ arg2 = address of start_routine
1945+ arg3 = pointer to the list of arguments
1946+pthread_join - probe for pthread_join
1947+ arg1 = thread ID
1948+pthread_join_ret - probe for pthread_join return
1949+ arg1 = thread ID
1950+ arg2 = return value
1951+
1952+Lock-related Probes
1953+===================
1954+mutex_init - probe for pthread_mutex_init
1955+ arg1 = address of mutex lock
1956+mutex_acquired - probe for succ. return of pthread_mutex_lock
1957+ arg1 = address of mutex lock
1958+mutex_timedlock_acquired - probe for succ. return of pthread_mutex_timedlock
1959+ arg1 = address of mutex lock
1960+mutex_entry - probe for entry to the pthread_mutex_lock function
1961+ arg1 = address of mutex lock
1962+mutex_timedlock_entry - probe for entry to the pthread_mutex_timedlock function
1963+ arg1 = address of mutex lock, arg2 = address of timespec
1964+mutex_release - probe for pthread_mutex_unlock after the successful release of a
1965+ mutex lock
1966+ arg1 = address of mutex lock
1967+mutex_destroy - probe for pthread_mutex_destroy
1968+ arg1 = address of mutex lock
1969+
1970+wrlock_entry - probe for entry to the pthread_rwlock_wrlock function
1971+ arg1 = address of rw lock
1972+rdlock_entry - probe for entry to the pthread_rwlock_rdlock function
1973+ arg1 = address of rw lock
1974+
1975+rwlock_destroy - probe for pthread_rwlock_destroy
1976+ arg1 = address of rw lock
1977+wrlock_acquire_write - probe for pthread_rwlock_wrlock (after getting the lock)
1978+ arg1 = address of rw lock
1979+rdlock_acquire_read - probe for pthread_rwlock_rdlock after successfully getting
1980+ the lock
1981+ arg1 = address of rw lock
1982+rwlock_unlock - probe for pthread_rwlock_unlock
1983+ arg1 = address of rw lock
1984+
1985+lll_lock_wait - probe in low-level (assembly language) locking code, only fired
1986+ when futex/FUTEX_WAIT is called (i.e. when trying to acquire a
1987+ contented lock)
1988+ arg1 = pointer to futex
1989+ arg2 = flags passed to the futex system call
1990+lll_lock_wait_private - probe in low-level (assembly language) locking code,
1991+ only fired when futex/FUTEX_WAIT is called (i.e. when
1992+ trying to acquire a contented lock)
1993+ arg1 = pointer to futex
1994+
1995+lll_futex_wake - probe in low-level (assembly language) locking code, only fired
1996+ when futex (FUTEX_WAKE) is called
1997+ arg1 = pointer to futex
1998+ arg2 = number of processes to wake
1999+ arg3 = additional flags
2000+
2001+Condition variable Probes
2002+=========================
2003+cond_init - probe for pthread_cond_init
2004+ arg1 = condition
2005+ arg2 = attr
2006+cond_destroy - probe for pthread_cond_destroy
2007+ arg1 = cond
2008+cond_wait - probe for pthread_cond_wait
2009+ arg1 = condition
2010+ arg2 = mutex lock
2011+cond_timedwait - probe for pthread_cond_timedwait
2012+ arg1 = condition
2013+ arg2 = mutex lock
2014+ arg3 = timespec
2015+cond_signal - probe for pthread_cond_signal
2016+ arg1 = condition
2017+cond_broadcast - probe for pthread_cond_broadcast
2018+ arg1 = condition
70963a51
MT
2019diff -Nur a/nptl/Makefile b/nptl/Makefile
2020--- a/nptl/Makefile 2011-12-22 16:50:52.000000000 +0000
2021+++ b/nptl/Makefile 2011-12-22 17:59:24.580119308 +0000
2022@@ -342,7 +342,8 @@
e5ad540d
MT
2023 extra-objs += $(crti-objs) $(crtn-objs)
2024 omit-deps += crti crtn
2025
2026-CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time)
2027+CFLAGS-pt-initfini.s = -g0 -fPIC -fno-inline-functions $(fno-unit-at-a-time) \
2028+ -fno-asynchronous-unwind-tables
2029 endif
2030
2031 CFLAGS-flockfile.c = -D_IO_MTSAFE_IO
70963a51 2032@@ -529,15 +530,19 @@
e5ad540d
MT
2033 $(tests) $(xtests) $(test-srcs))): $(objpfx)libpthread.so \
2034 $(objpfx)libpthread_nonshared.a
2035 $(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so
2036-# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
2037+# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so,
2038 # since otherwise libpthread.so comes before libc.so when linking.
2039 $(addprefix $(objpfx), $(tests-reverse)): \
2040- $(objpfx)../libc.so $(objpfx)libpthread.so \
2041+ $(objpfx)linklibc.so $(objpfx)libpthread.so \
2042 $(objpfx)libpthread_nonshared.a
2043 $(objpfx)../libc.so: $(common-objpfx)libc.so ;
2044 $(addprefix $(objpfx),$(tests-static) $(xtests-static)): $(objpfx)libpthread.a
2045
2046 $(objpfx)tst-atfork2.out: $(objpfx)tst-atfork2mod.so
2047+
2048+$(objpfx)linklibc.so: $(common-objpfx)libc.so
2049+ ln -s ../libc.so $@
2050+generated += libclink.so
2051 else
2052 $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a
2053 endif
70963a51
MT
2054diff -Nur a/nptl/Versions b/nptl/Versions
2055--- a/nptl/Versions 2011-12-22 16:50:52.000000000 +0000
2056+++ b/nptl/Versions 2011-12-22 17:59:24.581119308 +0000
2057@@ -30,6 +30,7 @@
ba8de1f5
MT
2058 __libc_alloca_cutoff;
2059 # Internal libc interface to libpthread
2060 __libc_dl_error_tsd;
2061+ __getrlimit;
2062 }
2063 }
2064
70963a51
MT
2065diff -Nur a/nptl/nptl-init.c b/nptl/nptl-init.c
2066--- a/nptl/nptl-init.c 2011-12-22 16:50:52.000000000 +0000
2067+++ b/nptl/nptl-init.c 2011-12-22 17:59:24.581119308 +0000
2068@@ -415,7 +415,7 @@
ba8de1f5
MT
2069 /* Determine the default allowed stack size. This is the size used
2070 in case the user does not specify one. */
2071 struct rlimit limit;
2072- if (getrlimit (RLIMIT_STACK, &limit) != 0
2073+ if (__getrlimit (RLIMIT_STACK, &limit) != 0
2074 || limit.rlim_cur == RLIM_INFINITY)
2075 /* The system limit is not usable. Use an architecture-specific
2076 default. */
70963a51
MT
2077diff -Nur a/nptl/pthread_cond_broadcast.c b/nptl/pthread_cond_broadcast.c
2078--- a/nptl/pthread_cond_broadcast.c 2011-12-22 16:50:52.000000000 +0000
2079+++ b/nptl/pthread_cond_broadcast.c 2011-12-22 17:59:24.582119308 +0000
eae7d017
MT
2080@@ -23,6 +23,7 @@
2081 #include <lowlevellock.h>
2082 #include <pthread.h>
2083 #include <pthreadP.h>
2084+#include <stap-probe.h>
2085
2086 #include <shlib-compat.h>
2087 #include <kernel-features.h>
70963a51 2088@@ -32,6 +33,8 @@
eae7d017
MT
2089 __pthread_cond_broadcast (cond)
2090 pthread_cond_t *cond;
2091 {
2092+ LIBC_PROBE (cond_broadcast, 1, cond);
2093+
2094 int pshared = (cond->__data.__mutex == (void *) ~0l)
2095 ? LLL_SHARED : LLL_PRIVATE;
2096 /* Make sure we are alone. */
70963a51
MT
2097diff -Nur a/nptl/pthread_cond_destroy.c b/nptl/pthread_cond_destroy.c
2098--- a/nptl/pthread_cond_destroy.c 2011-12-22 16:50:52.000000000 +0000
2099+++ b/nptl/pthread_cond_destroy.c 2011-12-22 17:59:24.582119308 +0000
eae7d017
MT
2100@@ -20,6 +20,7 @@
2101 #include <errno.h>
2102 #include <shlib-compat.h>
2103 #include "pthreadP.h"
2104+#include <stap-probe.h>
2105
2106
2107 int
70963a51 2108@@ -29,6 +30,8 @@
eae7d017
MT
2109 int pshared = (cond->__data.__mutex == (void *) ~0l)
2110 ? LLL_SHARED : LLL_PRIVATE;
2111
2112+ LIBC_PROBE (cond_destroy, 1, cond);
2113+
2114 /* Make sure we are alone. */
2115 lll_lock (cond->__data.__lock, pshared);
2116
70963a51
MT
2117diff -Nur a/nptl/pthread_cond_init.c b/nptl/pthread_cond_init.c
2118--- a/nptl/pthread_cond_init.c 2011-12-22 16:50:52.000000000 +0000
2119+++ b/nptl/pthread_cond_init.c 2011-12-22 17:59:24.583119308 +0000
eae7d017
MT
2120@@ -20,6 +20,7 @@
2121
2122 #include <shlib-compat.h>
2123 #include "pthreadP.h"
2124+#include <stap-probe.h>
2125
2126
2127 int
70963a51 2128@@ -42,6 +43,8 @@
eae7d017
MT
2129 ? NULL : (void *) ~0l);
2130 cond->__data.__broadcast_seq = 0;
2131
2132+ LIBC_PROBE (cond_init, 2, cond, cond_attr);
2133+
2134 return 0;
2135 }
2136 versioned_symbol (libpthread, __pthread_cond_init,
70963a51
MT
2137diff -Nur a/nptl/pthread_cond_signal.c b/nptl/pthread_cond_signal.c
2138--- a/nptl/pthread_cond_signal.c 2011-12-22 16:50:52.000000000 +0000
2139+++ b/nptl/pthread_cond_signal.c 2011-12-22 17:59:24.583119308 +0000
eae7d017
MT
2140@@ -26,6 +26,7 @@
2141
2142 #include <shlib-compat.h>
2143 #include <kernel-features.h>
2144+#include <stap-probe.h>
2145
2146
2147 int
70963a51 2148@@ -35,6 +36,8 @@
eae7d017
MT
2149 int pshared = (cond->__data.__mutex == (void *) ~0l)
2150 ? LLL_SHARED : LLL_PRIVATE;
2151
2152+ LIBC_PROBE (cond_signal, 1, cond);
2153+
2154 /* Make sure we are alone. */
2155 lll_lock (cond->__data.__lock, pshared);
2156
70963a51
MT
2157diff -Nur a/nptl/pthread_cond_wait.c b/nptl/pthread_cond_wait.c
2158--- a/nptl/pthread_cond_wait.c 2011-12-22 16:50:52.000000000 +0000
2159+++ b/nptl/pthread_cond_wait.c 2011-12-22 17:59:24.583119308 +0000
eae7d017
MT
2160@@ -25,6 +25,7 @@
2161 #include <pthreadP.h>
2162
2163 #include <shlib-compat.h>
2164+#include <stap-probe.h>
2165
2166
2167 struct _condvar_cleanup_buffer
70963a51 2168@@ -101,6 +102,8 @@
eae7d017
MT
2169 int pshared = (cond->__data.__mutex == (void *) ~0l)
2170 ? LLL_SHARED : LLL_PRIVATE;
2171
2172+ LIBC_PROBE (cond_wait, 2, cond, mutex);
2173+
2174 /* Make sure we are alone. */
2175 lll_lock (cond->__data.__lock, pshared);
2176
70963a51
MT
2177diff -Nur a/nptl/pthread_create.c b/nptl/pthread_create.c
2178--- a/nptl/pthread_create.c 2011-12-22 16:50:52.000000000 +0000
2179+++ b/nptl/pthread_create.c 2011-12-22 17:59:24.584119309 +0000
2180@@ -32,6 +32,8 @@
eae7d017
MT
2181
2182 #include <shlib-compat.h>
2183
2184+#include <stap-probe.h>
2185+
2186
2187 /* Local function to start thread and handle cleanup. */
2188 static int start_thread (void *arg);
70963a51 2189@@ -300,6 +302,8 @@
eae7d017
MT
2190 CANCEL_RESET (oldtype);
2191 }
2192
2193+ LIBC_PROBE (pthread_start, 3, (pthread_t) pd, pd->start_routine, pd->arg);
2194+
2195 /* Run the code the user provided. */
2196 #ifdef CALL_THREAD_FCT
2197 THREAD_SETMEM (pd, result, CALL_THREAD_FCT (pd));
70963a51 2198@@ -557,6 +561,8 @@
eae7d017
MT
2199 /* Pass the descriptor to the caller. */
2200 *newthread = (pthread_t) pd;
2201
2202+ LIBC_PROBE (pthread_create, 4, newthread, attr, start_routine, arg);
2203+
2204 /* Start the thread. */
2205 return create_thread (pd, iattr, STACK_VARIABLES_ARGS);
2206 }
70963a51
MT
2207diff -Nur a/nptl/pthread_join.c b/nptl/pthread_join.c
2208--- a/nptl/pthread_join.c 2011-12-22 16:50:52.000000000 +0000
2209+++ b/nptl/pthread_join.c 2011-12-22 17:59:24.585119309 +0000
eae7d017
MT
2210@@ -23,6 +23,8 @@
2211 #include <atomic.h>
2212 #include "pthreadP.h"
2213
2214+#include <stap-probe.h>
2215+
2216
2217 static void
2218 cleanup (void *arg)
70963a51 2219@@ -55,6 +57,8 @@
eae7d017
MT
2220 struct pthread *self = THREAD_SELF;
2221 int result = 0;
2222
2223+ LIBC_PROBE (pthread_join, 1, threadid);
2224+
2225 /* During the wait we change to asynchronous cancellation. If we
2226 are canceled the thread we are waiting for must be marked as
2227 un-wait-ed for again. */
70963a51 2228@@ -110,5 +114,7 @@
eae7d017
MT
2229 __free_tcb (pd);
2230 }
2231
2232+ LIBC_PROBE (pthread_join_ret, 3, threadid, result, pd->result);
2233+
2234 return result;
2235 }
70963a51
MT
2236diff -Nur a/nptl/pthread_mutex_destroy.c b/nptl/pthread_mutex_destroy.c
2237--- a/nptl/pthread_mutex_destroy.c 2011-12-22 16:50:52.000000000 +0000
2238+++ b/nptl/pthread_mutex_destroy.c 2011-12-22 17:59:24.585119309 +0000
eae7d017
MT
2239@@ -20,11 +20,15 @@
2240 #include <errno.h>
2241 #include "pthreadP.h"
2242
2243+#include <stap-probe.h>
2244+
2245
2246 int
2247 __pthread_mutex_destroy (mutex)
2248 pthread_mutex_t *mutex;
2249 {
2250+ LIBC_PROBE (mutex_destroy, 1, mutex);
2251+
2252 if ((mutex->__data.__kind & PTHREAD_MUTEX_ROBUST_NORMAL_NP) == 0
2253 && mutex->__data.__nusers != 0)
2254 return EBUSY;
70963a51
MT
2255diff -Nur a/nptl/pthread_mutex_init.c b/nptl/pthread_mutex_init.c
2256--- a/nptl/pthread_mutex_init.c 2011-12-22 16:50:52.000000000 +0000
2257+++ b/nptl/pthread_mutex_init.c 2011-12-22 17:59:24.586119309 +0000
eae7d017
MT
2258@@ -24,6 +24,8 @@
2259 #include <kernel-features.h>
2260 #include "pthreadP.h"
2261
2262+#include <stap-probe.h>
2263+
2264 static const struct pthread_mutexattr default_attr =
2265 {
2266 /* Default is a normal mutex, not shared between processes. */
70963a51 2267@@ -135,6 +137,8 @@
eae7d017
MT
2268 // mutex->__spins = 0; already done by memset
2269 // mutex->__next = NULL; already done by memset
2270
2271+ LIBC_PROBE (mutex_init, 1, mutex);
2272+
2273 return 0;
2274 }
2275 strong_alias (__pthread_mutex_init, pthread_mutex_init)
70963a51
MT
2276diff -Nur a/nptl/pthread_mutex_lock.c b/nptl/pthread_mutex_lock.c
2277--- a/nptl/pthread_mutex_lock.c 2011-12-22 16:50:52.000000000 +0000
2278+++ b/nptl/pthread_mutex_lock.c 2011-12-22 17:59:24.586119309 +0000
eae7d017
MT
2279@@ -24,6 +24,7 @@
2280 #include <not-cancel.h>
2281 #include "pthreadP.h"
2282 #include <lowlevellock.h>
2283+#include <stap-probe.h>
2284
2285
2286 #ifndef LLL_MUTEX_LOCK
70963a51 2287@@ -48,6 +49,9 @@
eae7d017
MT
2288 assert (sizeof (mutex->__size) >= sizeof (mutex->__data));
2289
2290 unsigned int type = PTHREAD_MUTEX_TYPE (mutex);
2291+
2292+ LIBC_PROBE (mutex_entry, 1, mutex);
2293+
2294 if (__builtin_expect (type & ~PTHREAD_MUTEX_KIND_MASK_NP, 0))
2295 return __pthread_mutex_lock_full (mutex);
2296
70963a51 2297@@ -127,6 +131,8 @@
eae7d017
MT
2298 ++mutex->__data.__nusers;
2299 #endif
2300
2301+ LIBC_PROBE (mutex_acquired, 1, mutex);
2302+
2303 return 0;
2304 }
2305
70963a51 2306@@ -467,6 +473,8 @@
eae7d017
MT
2307 ++mutex->__data.__nusers;
2308 #endif
2309
2310+ LIBC_PROBE (mutex_acquired, 1, mutex);
2311+
2312 return 0;
2313 }
2314 #ifndef __pthread_mutex_lock
70963a51
MT
2315diff -Nur a/nptl/pthread_mutex_timedlock.c b/nptl/pthread_mutex_timedlock.c
2316--- a/nptl/pthread_mutex_timedlock.c 2011-12-22 16:50:52.000000000 +0000
2317+++ b/nptl/pthread_mutex_timedlock.c 2011-12-22 17:59:24.586119309 +0000
eae7d017
MT
2318@@ -24,6 +24,8 @@
2319 #include <lowlevellock.h>
2320 #include <not-cancel.h>
2321
2322+#include <stap-probe.h>
2323+
2324
2325 int
2326 pthread_mutex_timedlock (mutex, abstime)
70963a51 2327@@ -34,6 +36,8 @@
eae7d017
MT
2328 pid_t id = THREAD_GETMEM (THREAD_SELF, tid);
2329 int result = 0;
2330
2331+ LIBC_PROBE (mutex_timedlock_entry, 2, mutex, abstime);
2332+
2333 /* We must not check ABSTIME here. If the thread does not block
2334 abstime must not be checked for a valid value. */
2335
70963a51 2336@@ -172,6 +176,8 @@
eae7d017
MT
2337
2338 ++mutex->__data.__count;
2339
2340+ LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
2341+
2342 return 0;
2343 }
2344 }
70963a51 2345@@ -242,6 +248,8 @@
eae7d017
MT
2346
2347 ++mutex->__data.__count;
2348
2349+ LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
2350+
2351 return 0;
2352 }
2353 }
70963a51 2354@@ -377,6 +385,8 @@
eae7d017
MT
2355
2356 ++mutex->__data.__count;
2357
2358+ LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
2359+
2360 return 0;
2361 }
2362 }
70963a51 2363@@ -477,6 +487,8 @@
eae7d017
MT
2364 /* Record the ownership. */
2365 mutex->__data.__owner = id;
2366 ++mutex->__data.__nusers;
2367+
2368+ LIBC_PROBE (mutex_timedlock_acquired, 1, mutex);
2369 }
2370
2371 out:
70963a51
MT
2372diff -Nur a/nptl/pthread_mutex_unlock.c b/nptl/pthread_mutex_unlock.c
2373--- a/nptl/pthread_mutex_unlock.c 2011-12-22 16:50:52.000000000 +0000
2374+++ b/nptl/pthread_mutex_unlock.c 2011-12-22 17:59:24.587119309 +0000
eae7d017
MT
2375@@ -22,6 +22,7 @@
2376 #include <stdlib.h>
2377 #include "pthreadP.h"
2378 #include <lowlevellock.h>
2379+#include <stap-probe.h>
2380
2381 static int
2382 internal_function
70963a51 2383@@ -50,6 +51,9 @@
eae7d017
MT
2384
2385 /* Unlock. */
2386 lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex));
2387+
2388+ LIBC_PROBE (mutex_release, 1, mutex);
2389+
2390 return 0;
2391 }
2392 else if (__builtin_expect (type == PTHREAD_MUTEX_RECURSIVE_NP, 1))
70963a51 2393@@ -272,6 +276,9 @@
eae7d017
MT
2394 PTHREAD_MUTEX_PSHARED (mutex));
2395
2396 int oldprio = newval >> PTHREAD_MUTEX_PRIO_CEILING_SHIFT;
2397+
2398+ LIBC_PROBE (mutex_release, 1, mutex);
2399+
2400 return __pthread_tpp_change_priority (oldprio, -1);
2401
2402 default:
70963a51 2403@@ -279,6 +286,7 @@
eae7d017
MT
2404 return EINVAL;
2405 }
2406
2407+ LIBC_PROBE (mutex_release, 1, mutex);
2408 return 0;
2409 }
2410
70963a51
MT
2411diff -Nur a/nptl/pthread_rwlock_destroy.c b/nptl/pthread_rwlock_destroy.c
2412--- a/nptl/pthread_rwlock_destroy.c 2011-12-22 16:50:52.000000000 +0000
2413+++ b/nptl/pthread_rwlock_destroy.c 2011-12-22 17:59:24.587119309 +0000
eae7d017
MT
2414@@ -18,12 +18,15 @@
2415 02111-1307 USA. */
2416
2417 #include "pthreadP.h"
2418+#include <stap-probe.h>
2419
2420
2421 int
2422 __pthread_rwlock_destroy (rwlock)
2423 pthread_rwlock_t *rwlock;
2424 {
2425+ LIBC_PROBE (rwlock_destroy, 1, rwlock);
2426+
2427 /* Nothing to be done. For now. */
2428 return 0;
2429 }
70963a51
MT
2430diff -Nur a/nptl/pthread_rwlock_rdlock.c b/nptl/pthread_rwlock_rdlock.c
2431--- a/nptl/pthread_rwlock_rdlock.c 2011-12-22 16:50:52.000000000 +0000
2432+++ b/nptl/pthread_rwlock_rdlock.c 2011-12-22 17:59:24.588119309 +0000
eae7d017
MT
2433@@ -22,6 +22,7 @@
2434 #include <lowlevellock.h>
2435 #include <pthread.h>
2436 #include <pthreadP.h>
2437+#include <stap-probe.h>
2438
2439
2440 /* Acquire read lock for RWLOCK. */
70963a51 2441@@ -31,6 +32,8 @@
eae7d017
MT
2442 {
2443 int result = 0;
2444
2445+ LIBC_PROBE (rdlock_entry, 1, rwlock);
2446+
2447 /* Make sure we are alone. */
2448 lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
2449
70963a51 2450@@ -49,6 +52,8 @@
eae7d017
MT
2451 --rwlock->__data.__nr_readers;
2452 result = EAGAIN;
2453 }
2454+ else
2455+ LIBC_PROBE (rdlock_acquire_read, 1, rwlock);
2456
2457 break;
2458 }
70963a51
MT
2459diff -Nur a/nptl/pthread_rwlock_unlock.c b/nptl/pthread_rwlock_unlock.c
2460--- a/nptl/pthread_rwlock_unlock.c 2011-12-22 16:50:52.000000000 +0000
2461+++ b/nptl/pthread_rwlock_unlock.c 2011-12-22 17:59:24.588119309 +0000
eae7d017
MT
2462@@ -22,11 +22,14 @@
2463 #include <lowlevellock.h>
2464 #include <pthread.h>
2465 #include <pthreadP.h>
2466+#include <stap-probe.h>
2467
2468 /* Unlock RWLOCK. */
2469 int
2470 __pthread_rwlock_unlock (pthread_rwlock_t *rwlock)
2471 {
2472+ LIBC_PROBE (rwlock_unlock, 1, rwlock);
2473+
2474 lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
2475 if (rwlock->__data.__writer)
2476 rwlock->__data.__writer = 0;
70963a51
MT
2477diff -Nur a/nptl/pthread_rwlock_wrlock.c b/nptl/pthread_rwlock_wrlock.c
2478--- a/nptl/pthread_rwlock_wrlock.c 2011-12-22 16:50:52.000000000 +0000
2479+++ b/nptl/pthread_rwlock_wrlock.c 2011-12-22 17:59:24.588119309 +0000
eae7d017
MT
2480@@ -22,6 +22,7 @@
2481 #include <lowlevellock.h>
2482 #include <pthread.h>
2483 #include <pthreadP.h>
2484+#include <stap-probe.h>
2485
2486
2487 /* Acquire write lock for RWLOCK. */
70963a51 2488@@ -31,6 +32,8 @@
eae7d017
MT
2489 {
2490 int result = 0;
2491
2492+ LIBC_PROBE (wrlock_entry, 1, rwlock);
2493+
2494 /* Make sure we are alone. */
2495 lll_lock (rwlock->__data.__lock, rwlock->__data.__shared);
2496
70963a51 2497@@ -41,6 +44,8 @@
eae7d017
MT
2498 {
2499 /* Mark self as writer. */
2500 rwlock->__data.__writer = THREAD_GETMEM (THREAD_SELF, tid);
2501+
2502+ LIBC_PROBE (wrlock_acquire_write, 1, rwlock);
2503 break;
2504 }
2505
70963a51
MT
2506diff -Nur a/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h b/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
2507--- a/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h 2011-12-22 16:50:52.000000000 +0000
2508+++ b/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h 2011-12-22 17:59:24.589119309 +0000
e5ad540d
MT
2509@@ -189,4 +189,7 @@
2510 /* Typed memory objects are not available. */
2511 #define _POSIX_TYPED_MEMORY_OBJECTS -1
2512
2513+/* Streams are not available. */
2514+#define _XOPEN_STREAMS -1
2515+
2516 #endif /* bits/posix_opt.h */
70963a51
MT
2517diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/Versions b/nptl/sysdeps/unix/sysv/linux/i386/Versions
2518--- a/nptl/sysdeps/unix/sysv/linux/i386/Versions 1970-01-01 00:00:00.000000000 +0000
2519+++ b/nptl/sysdeps/unix/sysv/linux/i386/Versions 2011-12-22 17:59:24.589119309 +0000
ba8de1f5
MT
2520@@ -0,0 +1,6 @@
2521+libc {
2522+ GLIBC_PRIVATE {
2523+ # Internal libc interface to libpthread
2524+ __uname;
2525+ }
2526+}
70963a51
MT
2527diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
2528--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S 2011-12-22 16:50:52.000000000 +0000
2529+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S 2011-12-22 17:59:24.589119309 +0000
eae7d017
MT
2530@@ -22,6 +22,8 @@
2531 #include <kernel-features.h>
2532 #include <lowlevellock.h>
2533
2534+#include <stap-probe.h>
2535+
2536 .text
2537
2538 #ifdef __ASSUME_PRIVATE_FUTEX
70963a51 2539@@ -91,7 +93,8 @@
eae7d017
MT
2540 cmpl %edx, %eax /* NB: %edx == 2 */
2541 jne 2f
2542
2543-1: movl $SYS_futex, %eax
2544+1: LIBC_PROBE (lll_lock_wait_private, 1, %ebx)
2545+ movl $SYS_futex, %eax
2546 ENTER_KERNEL
2547
2548 2: movl %edx, %eax
70963a51
MT
2549diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S
2550--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S 2011-12-22 16:50:52.000000000 +0000
2551+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S 2011-12-22 17:59:24.590119310 +0000
eae7d017
MT
2552@@ -24,6 +24,7 @@
2553 #include <kernel-features.h>
2554 #include <pthread-pi-defines.h>
2555 #include <pthread-errnos.h>
2556+#include <stap-probe.h>
2557
2558 .text
2559
70963a51 2560@@ -49,6 +50,8 @@
eae7d017
MT
2561
2562 movl 20(%esp), %ebx
2563
2564+ LIBC_PROBE (cond_broadcast, 1, %edx)
2565+
2566 /* Get internal lock. */
2567 movl $1, %edx
2568 xorl %eax, %eax
70963a51
MT
2569diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S
2570--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S 2011-12-22 16:50:52.000000000 +0000
2571+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S 2011-12-22 17:59:24.590119310 +0000
eae7d017
MT
2572@@ -24,7 +24,7 @@
2573 #include <kernel-features.h>
2574 #include <pthread-pi-defines.h>
2575 #include <pthread-errnos.h>
2576-
2577+#include <stap-probe.h>
2578
2579 .text
2580
70963a51 2581@@ -45,6 +45,8 @@
eae7d017
MT
2582
2583 movl 12(%esp), %edi
2584
2585+ LIBC_PROBE (cond_signal, 1, %edi)
2586+
2587 /* Get internal lock. */
2588 movl $1, %edx
2589 xorl %eax, %eax
70963a51
MT
2590diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
2591--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2011-12-22 16:50:52.000000000 +0000
2592+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2011-12-22 17:59:24.591119311 +0000
eae7d017
MT
2593@@ -24,7 +24,7 @@
2594 #include <pthread-errnos.h>
2595 #include <pthread-pi-defines.h>
2596 #include <kernel-features.h>
2597-
2598+#include <stap-probe.h>
2599
2600 .text
2601
70963a51 2602@@ -61,6 +61,8 @@
eae7d017
MT
2603 movl 20(%esp), %ebx
2604 movl 28(%esp), %ebp
2605
2606+ LIBC_PROBE (cond_timedwait, 3, %ebx, 24(%esp), %ebp)
2607+
2608 cmpl $1000000000, 4(%ebp)
2609 movl $EINVAL, %eax
2610 jae 18f
70963a51
MT
2611diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
2612--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2011-12-22 16:50:52.000000000 +0000
2613+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2011-12-22 17:59:24.591119311 +0000
eae7d017
MT
2614@@ -25,6 +25,7 @@
2615 #include <pthread-errnos.h>
2616 #include <pthread-pi-defines.h>
2617 #include <kernel-features.h>
2618+#include <stap-probe.h>
2619
2620
2621 .text
70963a51 2622@@ -61,6 +62,8 @@
eae7d017
MT
2623 xorl %esi, %esi
2624 movl 20(%esp), %ebx
2625
2626+ LIBC_PROBE (cond_wait, 2, 24(%esp), %ebx)
2627+
2628 /* Get internal lock. */
2629 movl $1, %edx
2630 xorl %eax, %eax
70963a51
MT
2631diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
2632--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S 2011-12-22 16:50:52.000000000 +0000
2633+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S 2011-12-22 17:59:24.592119312 +0000
eae7d017
MT
2634@@ -23,6 +23,7 @@
2635 #include <pthread-errnos.h>
2636 #include <kernel-features.h>
2637
2638+#include <stap-probe.h>
2639
2640 .text
2641
70963a51 2642@@ -41,6 +42,8 @@
eae7d017
MT
2643 xorl %esi, %esi
2644 movl 12(%esp), %ebx
2645
2646+ LIBC_PROBE (rdlock_entry, 1, %ebx)
2647+
2648 /* Get the lock. */
2649 movl $1, %edx
2650 xorl %eax, %eax
70963a51
MT
2651diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S
2652--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S 2011-12-22 16:50:52.000000000 +0000
2653+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S 2011-12-22 17:59:24.592119312 +0000
eae7d017
MT
2654@@ -23,6 +23,7 @@
2655 #include <pthread-errnos.h>
2656 #include <kernel-features.h>
2657
2658+#include <stap-probe.h>
2659
2660 .text
2661
70963a51 2662@@ -41,6 +42,8 @@
eae7d017
MT
2663 xorl %esi, %esi
2664 movl 12(%esp), %ebx
2665
2666+ LIBC_PROBE (wrlock_entry, 1, %ebx)
2667+
2668 /* Get the lock. */
2669 movl $1, %edx
2670 xorl %eax, %eax
70963a51
MT
2671diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
2672--- a/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h 2011-12-22 16:50:52.000000000 +0000
2673+++ b/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h 2011-12-22 17:59:24.593119312 +0000
eae7d017
MT
2674@@ -20,6 +20,8 @@
2675 #ifndef _LOWLEVELLOCK_H
2676 #define _LOWLEVELLOCK_H 1
2677
2678+#include <stap-probe.h>
2679+
2680 #ifndef __ASSEMBLER__
2681 # include <time.h>
2682 # include <sys/param.h>
70963a51 2683@@ -226,6 +228,7 @@
eae7d017
MT
2684 do { \
2685 int __ignore; \
2686 register __typeof (nr) _nr asm ("edx") = (nr); \
2687+ LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
2688 __asm __volatile (LLL_EBX_LOAD \
2689 LLL_ENTER_KERNEL \
2690 LLL_EBX_LOAD \
70963a51
MT
2691diff -Nur a/nptl/sysdeps/unix/sysv/linux/i386/smp.h b/nptl/sysdeps/unix/sysv/linux/i386/smp.h
2692--- a/nptl/sysdeps/unix/sysv/linux/i386/smp.h 2011-12-22 16:50:52.000000000 +0000
2693+++ b/nptl/sysdeps/unix/sysv/linux/i386/smp.h 2011-12-22 17:59:24.593119312 +0000
2694@@ -37,7 +37,7 @@
ba8de1f5
MT
2695 char *cp;
2696
2697 /* Try reading the number using `sysctl' first. */
2698- if (uname (&u.uts) == 0)
2699+ if (__uname (&u.uts) == 0)
2700 cp = u.uts.version;
2701 else
2702 {
70963a51
MT
2703diff -Nur a/nptl/sysdeps/unix/sysv/linux/kernel-features.h b/nptl/sysdeps/unix/sysv/linux/kernel-features.h
2704--- a/nptl/sysdeps/unix/sysv/linux/kernel-features.h 1970-01-01 00:00:00.000000000 +0000
2705+++ b/nptl/sysdeps/unix/sysv/linux/kernel-features.h 2011-12-22 17:59:24.593119312 +0000
e5ad540d
MT
2706@@ -0,0 +1,6 @@
2707+#include_next <kernel-features.h>
2708+
2709+/* NPTL can always assume all clone thread flags work. */
2710+#ifndef __ASSUME_CLONE_THREAD_FLAGS
2711+# define __ASSUME_CLONE_THREAD_FLAGS 1
2712+#endif
70963a51
MT
2713diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
2714--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S 2011-12-22 16:50:52.000000000 +0000
2715+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S 2011-12-22 17:59:24.594119312 +0000
eae7d017
MT
2716@@ -22,6 +22,8 @@
2717 #include <kernel-features.h>
2718 #include <lowlevellock.h>
2719
2720+#include <stap-probe.h>
2721+
2722 .text
2723
2724 #ifdef __ASSUME_PRIVATE_FUTEX
70963a51 2725@@ -87,7 +89,8 @@
eae7d017
MT
2726 cmpl %edx, %eax /* NB: %edx == 2 */
2727 jne 2f
2728
2729-1: movl $SYS_futex, %eax
2730+1: LIBC_PROBE (lll_lock_wait_private, 1, %rdi)
2731+ movl $SYS_futex, %eax
2732 syscall
2733
2734 2: movl %edx, %eax
70963a51 2735@@ -126,7 +129,8 @@
eae7d017
MT
2736 cmpl %edx, %eax /* NB: %edx == 2 */
2737 jne 2f
2738
2739-1: movl $SYS_futex, %eax
2740+1: LIBC_PROBE (lll_lock_wait, 2, %rdi, %rsi)
2741+ movl $SYS_futex, %eax
2742 syscall
2743
2744 2: movl %edx, %eax
70963a51
MT
2745diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
2746--- a/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h 2011-12-22 16:50:52.000000000 +0000
2747+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h 2011-12-22 17:59:24.594119312 +0000
eae7d017
MT
2748@@ -20,6 +20,8 @@
2749 #ifndef _LOWLEVELLOCK_H
2750 #define _LOWLEVELLOCK_H 1
2751
2752+#include <stap-probe.h>
2753+
2754 #ifndef __ASSEMBLER__
2755 # include <time.h>
2756 # include <sys/param.h>
70963a51 2757@@ -227,6 +229,7 @@
eae7d017
MT
2758 do { \
2759 int __ignore; \
2760 register __typeof (nr) _nr __asm ("edx") = (nr); \
2761+ LIBC_PROBE (lll_futex_wake, 3, futex, nr, private); \
2762 __asm __volatile ("syscall" \
2763 : "=a" (__ignore) \
2764 : "0" (SYS_futex), "D" (futex), \
70963a51
MT
2765diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S
2766--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S 2011-12-22 16:50:52.000000000 +0000
2767+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S 2011-12-22 17:59:24.595119312 +0000
eae7d017
MT
2768@@ -25,7 +25,7 @@
2769 #include <kernel-features.h>
2770 #include <pthread-pi-defines.h>
2771 #include <pthread-errnos.h>
2772-
2773+#include <stap-probe.h>
e5ad540d 2774
eae7d017 2775 .text
e5ad540d 2776
eae7d017
MT
2777@@ -35,6 +35,8 @@
2778 .align 16
2779 __pthread_cond_broadcast:
2780
2781+ LIBC_PROBE (cond_broadcast, 1, %rdi)
2782+
2783 /* Get internal lock. */
2784 movl $1, %esi
2785 xorl %eax, %eax
70963a51
MT
2786diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S
2787--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S 2011-12-22 16:50:52.000000000 +0000
2788+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S 2011-12-22 17:59:24.595119312 +0000
eae7d017
MT
2789@@ -24,6 +24,7 @@
2790 #include <pthread-pi-defines.h>
2791 #include <kernel-features.h>
2792 #include <pthread-errnos.h>
2793+#include <stap-probe.h>
2794
2795
2796 .text
2797@@ -34,6 +35,8 @@
2798 .align 16
2799 __pthread_cond_signal:
2800
2801+ LIBC_PROBE (cond_signal, 1, %rdi)
2802+
2803 /* Get internal lock. */
2804 movq %rdi, %r8
2805 movl $1, %esi
70963a51
MT
2806diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
2807--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2011-12-22 16:50:52.000000000 +0000
2808+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2011-12-22 17:59:24.596119312 +0000
eae7d017
MT
2809@@ -23,6 +23,7 @@
2810 #include <lowlevelcond.h>
2811 #include <pthread-pi-defines.h>
2812 #include <pthread-errnos.h>
2813+#include <stap-probe.h>
2814
2815 #include <kernel-features.h>
2816
70963a51 2817@@ -68,6 +69,8 @@
eae7d017
MT
2818 cfi_adjust_cfa_offset(FRAME_SIZE)
2819 cfi_remember_state
2820
2821+ LIBC_PROBE (cond_timedwait, 3, %rdi, %rsi, %rdx)
2822+
2823 cmpq $1000000000, 8(%rdx)
2824 movl $EINVAL, %eax
2825 jae 48f
70963a51
MT
2826diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
2827--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2011-12-22 16:50:52.000000000 +0000
2828+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2011-12-22 17:59:24.596119312 +0000
2829@@ -24,6 +24,7 @@
eae7d017
MT
2830 #include <tcb-offsets.h>
2831 #include <pthread-pi-defines.h>
70963a51 2832 #include <pthread-errnos.h>
eae7d017
MT
2833+#include <stap-probe.h>
2834
2835 #include <kernel-features.h>
2836
70963a51 2837@@ -66,6 +67,8 @@
eae7d017
MT
2838 +--------------------------+
2839 */
2840
2841+ LIBC_PROBE (cond_wait, 2, %rdi, %rsi)
2842+
2843 cmpq $-1, dep_mutex(%rdi)
2844
2845 /* Prepare structure passed to cancellation handler. */
70963a51
MT
2846diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S
2847--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S 2011-12-22 16:50:52.000000000 +0000
2848+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S 2011-12-22 17:59:24.597119312 +0000
eae7d017
MT
2849@@ -22,7 +22,7 @@
2850 #include <lowlevelrwlock.h>
2851 #include <pthread-errnos.h>
2852 #include <kernel-features.h>
2853-
2854+#include <stap-probe.h>
2855
2856 .text
2857
2858@@ -31,6 +31,9 @@
2859 .align 16
2860 __pthread_rwlock_rdlock:
2861 cfi_startproc
2862+
2863+ LIBC_PROBE (rdlock_entry, 1, %rdi)
2864+
2865 xorq %r10, %r10
2866
2867 /* Get the lock. */
70963a51
MT
2868diff -Nur a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S
2869--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S 2011-12-22 16:50:52.000000000 +0000
2870+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S 2011-12-22 17:59:24.597119312 +0000
eae7d017
MT
2871@@ -22,7 +22,7 @@
2872 #include <lowlevelrwlock.h>
2873 #include <pthread-errnos.h>
2874 #include <kernel-features.h>
2875-
2876+#include <stap-probe.h>
2877
2878 .text
2879
2880@@ -31,6 +31,9 @@
2881 .align 16
2882 __pthread_rwlock_wrlock:
2883 cfi_startproc
2884+
2885+ LIBC_PROBE (wrlock_entry, 1, %rdi)
2886+
2887 xorq %r10, %r10
2888
2889 /* Get the lock. */
70963a51
MT
2890diff -Nur a/nscd/nscd.conf b/nscd/nscd.conf
2891--- a/nscd/nscd.conf 2011-12-22 16:50:52.000000000 +0000
2892+++ b/nscd/nscd.conf 2011-12-22 17:59:24.597119312 +0000
e5ad540d
MT
2893@@ -33,7 +33,7 @@
2894 # logfile /var/log/nscd.log
2895 # threads 4
2896 # max-threads 32
2897-# server-user nobody
2898+ server-user nscd
2899 # stat-user somebody
2900 debug-level 0
2901 # reload-count 5
70963a51
MT
2902diff -Nur a/nscd/nscd.init b/nscd/nscd.init
2903--- a/nscd/nscd.init 2011-12-22 16:50:52.000000000 +0000
2904+++ b/nscd/nscd.init 2011-12-22 17:59:24.598119312 +0000
e5ad540d
MT
2905@@ -9,6 +9,7 @@
2906 # slow naming services like NIS, NIS+, LDAP, or hesiod.
2907 # processname: /usr/sbin/nscd
2908 # config: /etc/nscd.conf
2909+# config: /etc/sysconfig/nscd
2910 #
2911 ### BEGIN INIT INFO
2912 # Provides: nscd
2913@@ -28,20 +29,8 @@
2914 # Source function library.
2915 . /etc/init.d/functions
2916
2917-# nscd does not run on any kernel lower than 2.2.0 because of threading
2918-# problems, so we require that in first place.
2919-case $(uname -r) in
2920- 2.[2-9].*)
2921- # this is okay
2922- ;;
2923- [3-9]*)
2924- # these are of course also okay
2925- ;;
2926- *)
2927- #this is not
2928- exit 1
2929- ;;
2930-esac
2931+# Source an auxiliary options file if we have one, and pick up NSCD_OPTIONS.
2932+[ -r /etc/sysconfig/nscd ] && . /etc/sysconfig/nscd
2933
2934 RETVAL=0
2935 prog=nscd
70963a51 2936@@ -50,7 +39,7 @@
e5ad540d
MT
2937 [ -d /var/run/nscd ] || mkdir /var/run/nscd
2938 [ -d /var/db/nscd ] || mkdir /var/db/nscd
2939 echo -n $"Starting $prog: "
2940- daemon /usr/sbin/nscd
2941+ daemon /usr/sbin/nscd $NSCD_OPTIONS
2942 RETVAL=$?
2943 echo
2944 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
70963a51 2945@@ -83,11 +72,11 @@
e5ad540d
MT
2946 # See how we were called.
2947 case "$1" in
2948 start)
2949- start
2950+ [ -e /var/lock/subsys/nscd ] || start
2951 RETVAL=$?
2952 ;;
2953 stop)
d9a1ddc1
MT
2954- stop
2955+ [ ! -e /var/lock/subsys/nscd ] || stop
2956 RETVAL=$?
2957 ;;
2958 status)
70963a51 2959@@ -99,14 +88,17 @@
e5ad540d
MT
2960 RETVAL=$?
2961 ;;
2962 try-restart | condrestart)
2963- [ -e /var/lock/subsys/nscd ] && restart
2964+ [ ! -e /var/lock/subsys/nscd ] || restart
2965 RETVAL=$?
2966 ;;
2967 force-reload | reload)
2968 echo -n $"Reloading $prog: "
2969- killproc /usr/sbin/nscd -HUP
2970- RETVAL=$?
2971- echo
2972+ RETVAL=0
2973+ /usr/sbin/nscd -i passwd || RETVAL=$?
2974+ /usr/sbin/nscd -i group || RETVAL=$?
2975+ /usr/sbin/nscd -i hosts || RETVAL=$?
2976+ /usr/sbin/nscd -i services || RETVAL=$?
2977+ echo
2978 ;;
2979 *)
2980 echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}"
70963a51
MT
2981diff -Nur a/nscd/selinux.c b/nscd/selinux.c
2982--- a/nscd/selinux.c 2011-12-22 16:50:52.000000000 +0000
2983+++ b/nscd/selinux.c 2011-12-22 17:59:24.598119312 +0000
2984@@ -270,6 +270,18 @@
2985 {
2986 int rc;
2987
2988+#if defined HAVE_LIBAUDIT && defined HAVE_LIBCAP
2989+ if (server_user != NULL && getuid () == 0)
2990+ {
2991+ /* We need to preserve the capabilities in the AVC thread. */
2992+ if (prctl (PR_SET_KEEPCAPS, 1) == -1)
2993+ {
2994+ dbg_log (_("Failed to set keep-capabilities"));
2995+ error (EXIT_FAILURE, errno, _("prctl(KEEPCAPS) failed"));
2996+ }
2997+ }
2998+#endif
2999+
3000 rc =
3001 pthread_create (&avc_notify_thread, NULL, (void *(*) (void *)) run, NULL);
3002 if (rc != 0)
3003diff -Nur a/nss/Makefile b/nss/Makefile
3004--- a/nss/Makefile 2011-12-22 16:50:52.000000000 +0000
3005+++ b/nss/Makefile 2011-12-22 17:59:24.599119312 +0000
3006@@ -88,6 +88,7 @@
ba8de1f5
MT
3007
3008 include ../Rules
3009
eae7d017 3010+CFLAGS-files-hosts.c += -fno-strict-aliasing
ba8de1f5
MT
3011
3012 ifeq (yes,$(build-static-nss))
3013 $(objpfx)getent: $(objpfx)libnss_files.a
70963a51
MT
3014diff -Nur a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
3015--- a/nss/nss_files/files-XXX.c 2011-12-22 16:50:52.000000000 +0000
3016+++ b/nss/nss_files/files-XXX.c 2011-12-22 17:59:24.599119312 +0000
3017@@ -190,7 +190,7 @@
ba8de1f5
MT
3018 {
3019 char *p;
3020 struct parser_data *data = (void *) buffer;
3021- int linebuflen = buffer + buflen - data->linebuffer;
3022+ size_t linebuflen = buffer + buflen - data->linebuffer;
3023 int parse_result;
3024
3025 if (buflen < sizeof *data + 2)
70963a51
MT
3026diff -Nur a/posix/Makefile b/posix/Makefile
3027--- a/posix/Makefile 2011-12-22 16:50:52.000000000 +0000
3028+++ b/posix/Makefile 2011-12-22 17:59:24.600119312 +0000
3029@@ -320,15 +320,8 @@
e5ad540d
MT
3030 mv -f $@/$$spec.new $@/$$spec; \
3031 done < $(objpfx)getconf.speclist
3032
3033-$(objpfx)getconf.speclist: $(objpfx)getconf
3034-ifeq (no,$(cross-compiling))
3035- LC_ALL=C GETCONF_DIR=/dev/null \
3036- $(run-program-prefix) $< _POSIX_V7_WIDTH_RESTRICTED_ENVS > $@.new
3037- LC_ALL=C GETCONF_DIR=/dev/null \
3038- $(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS >> $@.new
3039- LC_ALL=C GETCONF_DIR=/dev/null \
3040- $(run-program-prefix) $< _XBS5_WIDTH_RESTRICTED_ENVS >> $@.new
3041-else
3042- > $@.new
3043-endif
3044+$(objpfx)getconf.speclist: getconf.speclist.h
3045+ $(CC) -E $(CFLAGS) $(CPPFLAGS) $< \
4fb11761 3046+ | sed -n -e '/START_OF_STRINGS/,$${/\(POSIX_V[67]\|XBS5\)_/{s/^[^"]*"//;s/".*$$//;p}}' \
e5ad540d
MT
3047+ > $@.new
3048 mv -f $@.new $@
70963a51
MT
3049diff -Nur a/posix/gai.conf b/posix/gai.conf
3050--- a/posix/gai.conf 2011-12-22 16:50:52.000000000 +0000
3051+++ b/posix/gai.conf 2011-12-22 17:59:24.600119312 +0000
e5ad540d
MT
3052@@ -41,7 +41,7 @@
3053 #
3054 # precedence <mask> <value>
3055 # Add another rule to the RFC 3484 precedence table. See section 2.1
3056-# and 10.3 in RFC 3484. The default is:
3057+# and 10.3 in RFC 3484. The RFC requires:
3058 #
3059 #precedence ::1/128 50
3060 #precedence ::/0 40
3061@@ -58,7 +58,7 @@
3062 # Add another rule to the RFC 3484 scope table for IPv4 addresses.
3063 # By default the scope IDs described in section 3.2 in RFC 3484 are
3064 # used. Changing these defaults should hardly ever be necessary.
3065-# The defaults are equivalent to:
3066+# The definitions in RFC 1918 are equivalent to:
3067 #
3068 #scopev4 ::ffff:169.254.0.0/112 2
3069 #scopev4 ::ffff:127.0.0.0/104 2
3070@@ -75,3 +75,5 @@
3071 #scopev4 ::ffff:169.254.0.0/112 2
3072 #scopev4 ::ffff:127.0.0.0/104 2
3073 #scopev4 ::ffff:0.0.0.0/96 14
3074+#
3075+# This is what the Red Hat setting currently uses.
70963a51
MT
3076diff -Nur a/posix/getconf.speclist.h b/posix/getconf.speclist.h
3077--- a/posix/getconf.speclist.h 1970-01-01 00:00:00.000000000 +0000
3078+++ b/posix/getconf.speclist.h 2011-12-22 17:59:24.600119312 +0000
e5ad540d
MT
3079@@ -0,0 +1,39 @@
3080+#include <unistd.h>
3081+const char *START_OF_STRINGS =
3082+#if _POSIX_V7_ILP32_OFF32 == 1
3083+"POSIX_V7_ILP32_OFF32"
3084+#endif
3085+#if _POSIX_V7_ILP32_OFFBIG == 1
3086+"POSIX_V7_ILP32_OFFBIG"
3087+#endif
3088+#if _POSIX_V7_LP64_OFF64 == 1
3089+"POSIX_V7_LP64_OFF64"
3090+#endif
3091+#if _POSIX_V7_LPBIG_OFFBIG == 1
3092+"POSIX_V7_LPBIG_OFFBIG"
3093+#endif
3094+#if _POSIX_V6_ILP32_OFF32 == 1
3095+"POSIX_V6_ILP32_OFF32"
3096+#endif
3097+#if _POSIX_V6_ILP32_OFFBIG == 1
3098+"POSIX_V6_ILP32_OFFBIG"
3099+#endif
3100+#if _POSIX_V6_LP64_OFF64 == 1
3101+"POSIX_V6_LP64_OFF64"
3102+#endif
3103+#if _POSIX_V6_LPBIG_OFFBIG == 1
3104+"POSIX_V6_LPBIG_OFFBIG"
3105+#endif
3106+#if _XBS5_ILP32_OFF32 == 1
3107+"XBS5_ILP32_OFF32"
3108+#endif
3109+#if _XBS5_ILP32_OFFBIG == 1
3110+"XBS5_ILP32_OFFBIG"
3111+#endif
3112+#if _XBS5_LP64_OFF64 == 1
3113+"XBS5_LP64_OFF64"
3114+#endif
3115+#if _XBS5_LPBIG_OFFBIG == 1
3116+"XBS5_LPBIG_OFFBIG"
3117+#endif
3118+"";
70963a51
MT
3119diff -Nur a/posix/regcomp.c b/posix/regcomp.c
3120--- a/posix/regcomp.c 2011-12-22 16:50:52.000000000 +0000
3121+++ b/posix/regcomp.c 2011-12-22 17:59:24.601119313 +0000
3122@@ -2745,40 +2745,29 @@
ba8de1f5
MT
3123
3124 /* Local function for parse_bracket_exp used in _LIBC environement.
3125 Seek the collating symbol entry correspondings to NAME.
3126- Return the index of the symbol in the SYMB_TABLE. */
3127+ Return the index of the symbol in the SYMB_TABLE,
3128+ or -1 if not found. */
3129
3130 auto inline int32_t
3131 __attribute ((always_inline))
3132- seek_collating_symbol_entry (name, name_len)
3133- const unsigned char *name;
3134- size_t name_len;
3135+ seek_collating_symbol_entry (const unsigned char *name, size_t name_len)
3136 {
3137- int32_t hash = elem_hash ((const char *) name, name_len);
3138- int32_t elem = hash % table_size;
3139- if (symb_table[2 * elem] != 0)
3140- {
3141- int32_t second = hash % (table_size - 2) + 1;
70963a51
MT
3142+ int32_t elem;
3143
ba8de1f5
MT
3144- do
3145- {
3146- /* First compare the hashing value. */
3147- if (symb_table[2 * elem] == hash
3148- /* Compare the length of the name. */
3149- && name_len == extra[symb_table[2 * elem + 1]]
3150- /* Compare the name. */
3151- && memcmp (name, &extra[symb_table[2 * elem + 1] + 1],
3152- name_len) == 0)
3153- {
3154- /* Yep, this is the entry. */
3155- break;
3156- }
70963a51 3157-
ba8de1f5
MT
3158- /* Next entry. */
3159- elem += second;
3160- }
3161- while (symb_table[2 * elem] != 0);
3162- }
3163- return elem;
3164+ for (elem = 0; elem < table_size; elem++)
3165+ if (symb_table[2 * elem] != 0)
3166+ {
3167+ int32_t idx = symb_table[2 * elem + 1];
3168+ /* Skip the name of collating element name. */
3169+ idx += 1 + extra[idx];
3170+ if (/* Compare the length of the name. */
3171+ name_len == extra[idx]
3172+ /* Compare the name. */
3173+ && memcmp (name, &extra[idx + 1], name_len) == 0)
3174+ /* Yep, this is the entry. */
3175+ return elem;
3176+ }
3177+ return -1;
3178 }
3179
3180 /* Local function for parse_bracket_exp used in _LIBC environment.
70963a51 3181@@ -2787,8 +2776,7 @@
ba8de1f5
MT
3182
3183 auto inline unsigned int
3184 __attribute ((always_inline))
3185- lookup_collation_sequence_value (br_elem)
3186- bracket_elem_t *br_elem;
3187+ lookup_collation_sequence_value (bracket_elem_t *br_elem)
3188 {
3189 if (br_elem->type == SB_CHAR)
3190 {
70963a51 3191@@ -2816,7 +2804,7 @@
ba8de1f5
MT
3192 int32_t elem, idx;
3193 elem = seek_collating_symbol_entry (br_elem->opr.name,
3194 sym_name_len);
3195- if (symb_table[2 * elem] != 0)
3196+ if (elem != -1)
3197 {
3198 /* We found the entry. */
3199 idx = symb_table[2 * elem + 1];
70963a51 3200@@ -2834,7 +2822,7 @@
ba8de1f5
MT
3201 /* Return the collation sequence value. */
3202 return *(unsigned int *) (extra + idx);
3203 }
3204- else if (symb_table[2 * elem] == 0 && sym_name_len == 1)
3205+ else if (sym_name_len == 1)
3206 {
3207 /* No valid character. Match it as a single byte
3208 character. */
70963a51 3209@@ -2856,11 +2844,8 @@
ba8de1f5
MT
3210
3211 auto inline reg_errcode_t
3212 __attribute ((always_inline))
3213- build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem)
3214- re_charset_t *mbcset;
3215- int *range_alloc;
3216- bitset_t sbcset;
3217- bracket_elem_t *start_elem, *end_elem;
3218+ build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc,
3219+ bracket_elem_t *start_elem, bracket_elem_t *end_elem)
3220 {
3221 unsigned int ch;
3222 uint32_t start_collseq;
70963a51 3223@@ -2939,25 +2924,22 @@
ba8de1f5
MT
3224
3225 auto inline reg_errcode_t
3226 __attribute ((always_inline))
3227- build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name)
3228- re_charset_t *mbcset;
3229- int *coll_sym_alloc;
3230- bitset_t sbcset;
3231- const unsigned char *name;
3232+ build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
3233+ int *coll_sym_alloc, const unsigned char *name)
3234 {
3235 int32_t elem, idx;
3236 size_t name_len = strlen ((const char *) name);
3237 if (nrules != 0)
3238 {
3239 elem = seek_collating_symbol_entry (name, name_len);
3240- if (symb_table[2 * elem] != 0)
3241+ if (elem != -1)
3242 {
3243 /* We found the entry. */
3244 idx = symb_table[2 * elem + 1];
3245 /* Skip the name of collating element name. */
3246 idx += 1 + extra[idx];
3247 }
3248- else if (symb_table[2 * elem] == 0 && name_len == 1)
3249+ else if (name_len == 1)
3250 {
3251 /* No valid character, treat it as a normal
3252 character. */
70963a51
MT
3253diff -Nur a/resolv/Makefile b/resolv/Makefile
3254--- a/resolv/Makefile 2011-12-22 16:50:52.000000000 +0000
3255+++ b/resolv/Makefile 2011-12-22 17:59:24.602119314 +0000
3256@@ -81,6 +81,7 @@
3257 CFLAGS-libresolv += -fstack-protector
3258 endif
ba8de1f5 3259 CFLAGS-res_hconf.c = -fexceptions
eae7d017 3260+CFLAGS-res_send.c += -fno-strict-aliasing
ba8de1f5
MT
3261
3262 # The BIND code elicits some harmless warnings.
3263 +cflags += -Wno-strict-prototypes -Wno-write-strings
70963a51
MT
3264diff -Nur a/resource/getrlimit.c b/resource/getrlimit.c
3265--- a/resource/getrlimit.c 2011-12-22 16:50:52.000000000 +0000
3266+++ b/resource/getrlimit.c 2011-12-22 17:59:24.603119315 +0000
3267@@ -28,6 +28,7 @@
ba8de1f5
MT
3268 __set_errno (ENOSYS);
3269 return -1;
3270 }
3271+libc_hidden_def (__getrlimit)
3272 weak_alias (__getrlimit, getrlimit)
3273
3274 stub_warning (getrlimit)
70963a51
MT
3275diff -Nur a/scripts/check-local-headers.sh b/scripts/check-local-headers.sh
3276--- a/scripts/check-local-headers.sh 2011-12-22 16:50:52.000000000 +0000
3277+++ b/scripts/check-local-headers.sh 2011-12-22 17:59:24.603119315 +0000
3278@@ -29,7 +29,7 @@
3279 BEGIN {
3280 status = 0
3281 exclude = "^" includedir \
3282- "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h)"
3283+ "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h|sys/sdt(-config)?\\.h))"
3284 }
3285 /^[^ ]/ && $1 ~ /.*:/ { obj = $1 }
3286 {
3287diff -Nur a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c
3288--- a/stdio-common/vfprintf.c 2011-12-22 16:50:52.000000000 +0000
3289+++ b/stdio-common/vfprintf.c 2011-12-22 17:59:24.604119316 +0000
3290@@ -1161,41 +1161,9 @@
ba8de1f5
MT
3291 else if (!is_long && spec != L_('S')) \
3292 { \
3293 if (prec != -1) \
3294- { \
3295- /* Search for the end of the string, but don't search past \
3296- the length (in bytes) specified by the precision. Also \
3297- don't use incomplete characters. */ \
3298- if (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MB_CUR_MAX) == 1) \
3299- len = __strnlen (string, prec); \
3300- else \
3301- { \
3302- /* In case we have a multibyte character set the \
3303- situation is more complicated. We must not copy \
3304- bytes at the end which form an incomplete character. */\
3305- size_t ignore_size = (unsigned) prec > 1024 ? 1024 : prec;\
3306- wchar_t ignore[ignore_size]; \
3307- const char *str2 = string; \
3308- const char *strend = string + prec; \
3309- if (strend < string) \
3310- strend = (const char *) UINTPTR_MAX; \
3311- \
3312- mbstate_t ps; \
3313- memset (&ps, '\0', sizeof (ps)); \
3314- \
3315- while (str2 != NULL && str2 < strend) \
3316- if (__mbsnrtowcs (ignore, &str2, strend - str2, \
3317- ignore_size, &ps) == (size_t) -1) \
3318- { \
3319- done = -1; \
3320- goto all_done; \
3321- } \
3322- \
3323- if (str2 == NULL) \
3324- len = strlen (string); \
3325- else \
3326- len = str2 - string - (ps.__count & 7); \
3327- } \
3328- } \
3329+ /* Search for the end of the string, but don't search past \
3330+ the length (in bytes) specified by the precision. */ \
3331+ len = __strnlen (string, prec); \
3332 else \
3333 len = strlen (string); \
3334 } \
70963a51
MT
3335diff -Nur a/streams/Makefile b/streams/Makefile
3336--- a/streams/Makefile 2011-12-22 16:50:52.000000000 +0000
3337+++ b/streams/Makefile 2011-12-22 17:59:24.605119317 +0000
e5ad540d
MT
3338@@ -21,7 +21,7 @@
3339 #
3340 subdir := streams
3341
3342-headers = stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
3343+#headers = stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
3344 routines = isastream getmsg getpmsg putmsg putpmsg fattach fdetach
3345
3346 include ../Rules
70963a51
MT
3347diff -Nur a/sunrpc/Makefile b/sunrpc/Makefile
3348--- a/sunrpc/Makefile 2011-12-22 16:50:52.000000000 +0000
3349+++ b/sunrpc/Makefile 2011-12-22 17:59:24.605119317 +0000
3350@@ -53,7 +53,7 @@
eae7d017
MT
3351 des_crypt.h)
3352 headers-not-in-tirpc = $(addprefix rpc/,key_prot.h rpc_des.h) \
3353 $(rpcsvc:%=rpcsvc/%) rpcsvc/bootparam.h
3354-headers = rpc/netdb.h
3355+headers = rpc/netdb.h $(headers-in-tirpc) $(headers-not-in-tirpc)
3356 install-others = $(inst_sysconfdir)/rpc
3357 generated = $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c) $(rpcsvc:%.x=x%.stmp) \
3358 $(rpcsvc:%.x=rpcsvc/%.stmp) rpcgen
70963a51 3359@@ -152,6 +152,10 @@
ba8de1f5
MT
3360
3361 CPPFLAGS += -D_RPC_THREAD_SAFE_
3362
eae7d017
MT
3363+CFLAGS-clnt_tcp.c += -fno-strict-aliasing
3364+CFLAGS-clnt_udp.c += -fno-strict-aliasing
3365+CFLAGS-clnt_unix.c += -fno-strict-aliasing
ba8de1f5 3366+
eae7d017
MT
3367 $(objpfx)tst-getmyaddr: $(common-objpfx)linkobj/libc.so
3368 $(objpfx)tst-xdrmem: $(common-objpfx)linkobj/libc.so
3369 $(objpfx)tst-xdrmem2: $(common-objpfx)linkobj/libc.so
70963a51
MT
3370diff -Nur a/sysdeps/generic/dl-cache.h b/sysdeps/generic/dl-cache.h
3371--- a/sysdeps/generic/dl-cache.h 2011-12-22 16:50:52.000000000 +0000
3372+++ b/sysdeps/generic/dl-cache.h 2011-12-22 17:59:24.605119317 +0000
e5ad540d
MT
3373@@ -36,6 +36,14 @@
3374 # define add_system_dir(dir) add_dir (dir)
3375 #endif
3376
3377+#ifndef arch_startup
3378+# define arch_startup(argc, argv) do { } while (0)
3379+#endif
3380+
3381+#ifndef add_arch_dirs
3382+# define add_arch_dirs(config_file) do { } while (0)
3383+#endif
3384+
3385 #define CACHEMAGIC "ld.so-1.7.0"
3386
3387 /* libc5 and glibc 2.0/2.1 use the same format. For glibc 2.2 another
70963a51
MT
3388diff -Nur a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile
3389--- a/sysdeps/i386/Makefile 2011-12-22 16:50:52.000000000 +0000
3390+++ b/sysdeps/i386/Makefile 2011-12-22 17:59:24.606119317 +0000
e5ad540d
MT
3391@@ -2,6 +2,8 @@
3392 # Every i386 port in use uses gas syntax (I think).
3393 asm-CPPFLAGS += -DGAS_SYNTAX
3394
3395+sysdep-ASFLAGS += -U__i686
3396+
3397 # The i386 `long double' is a distinct type we support.
3398 long-double-fcts = yes
3399
70963a51 3400@@ -68,6 +70,14 @@
e5ad540d
MT
3401
3402 ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS)))
3403 defines += -DNO_TLS_DIRECT_SEG_REFS
3404+else
3405+# .a libraries are not performance critical and so we
3406+# build them without direct TLS segment references
3407+# always.
3408+CPPFLAGS-.o += -DNO_TLS_DIRECT_SEG_REFS
3409+CFLAGS-.o += -mno-tls-direct-seg-refs
3410+CPPFLAGS-.oS += -DNO_TLS_DIRECT_SEG_REFS
3411+CFLAGS-.oS += -mno-tls-direct-seg-refs
3412 endif
3413
3414 ifeq ($(subdir),elf)
70963a51
MT
3415diff -Nur a/sysdeps/i386/__longjmp.S b/sysdeps/i386/__longjmp.S
3416--- a/sysdeps/i386/__longjmp.S 2011-12-22 16:50:52.000000000 +0000
3417+++ b/sysdeps/i386/__longjmp.S 2011-12-22 17:59:24.606119317 +0000
eae7d017
MT
3418@@ -1,5 +1,5 @@
3419 /* longjmp for i386.
3420- Copyright (C) 1995-1998,2000,2002,2005,2006,2009
3421+ Copyright (C) 1995-1998,2000,2002,2005,2006,2009,2011
3422 Free Software Foundation, Inc.
3423 This file is part of the GNU C Library.
3424
3425@@ -21,6 +21,7 @@
3426 #include <sysdep.h>
3427 #include <jmpbuf-offsets.h>
3428 #include <asm-syntax.h>
3429+#include <stap-probe.h>
3430
3431 .text
3432 ENTRY (__longjmp)
70963a51 3433@@ -33,6 +34,7 @@
eae7d017
MT
3434 movl (JB_SP*4)(%eax), %ecx
3435 PTR_DEMANGLE (%edx)
3436 PTR_DEMANGLE (%ecx)
3437+ LIBC_PROBE (longjmp, 3, 4@%eax, -4@8(%esp), 4@%edx)
3438 cfi_def_cfa(%eax, 0)
3439 cfi_register(%eip, %edx)
3440 cfi_register(%esp, %ecx)
70963a51 3441@@ -50,6 +52,7 @@
eae7d017
MT
3442 cfi_restore(%edi)
3443 cfi_restore(%ebp)
3444
3445+ LIBC_PROBE (longjmp_target, 3, 4@%eax, -4@8(%esp), 4@%edx)
3446 movl 8(%esp), %eax /* Second argument is return value. */
3447 movl %ecx, %esp
3448 #else
70963a51 3449@@ -57,12 +60,14 @@
eae7d017
MT
3450 movl 8(%esp), %eax /* Second argument is return value. */
3451 /* Save the return address now. */
3452 movl (JB_PC*4)(%ecx), %edx
3453+ LIBC_PROBE (longjmp, 3, 4@%ecx, -4@%eax, 4@%edx)
3454 /* Restore registers. */
3455 movl (JB_BX*4)(%ecx), %ebx
3456 movl (JB_SI*4)(%ecx), %esi
3457 movl (JB_DI*4)(%ecx), %edi
3458 movl (JB_BP*4)(%ecx), %ebp
3459 movl (JB_SP*4)(%ecx), %esp
3460+ LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%ecx, 4@%edx)
3461 #endif
3462 /* Jump to saved PC. */
3463 jmp *%edx
70963a51
MT
3464diff -Nur a/sysdeps/i386/bsd-_setjmp.S b/sysdeps/i386/bsd-_setjmp.S
3465--- a/sysdeps/i386/bsd-_setjmp.S 2011-12-22 16:50:52.000000000 +0000
3466+++ b/sysdeps/i386/bsd-_setjmp.S 2011-12-22 17:59:24.606119317 +0000
eae7d017
MT
3467@@ -1,5 +1,6 @@
3468 /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. i386 version.
3469- Copyright (C) 1994-1997,2000-2002,2005, 2006 Free Software Foundation, Inc.
3470+ Copyright (C) 1994-1997,2000-2002,2005,2006,2011
3471+ Free Software Foundation, Inc.
3472 This file is part of the GNU C Library.
3473
3474 The GNU C Library is free software; you can redistribute it and/or
3475@@ -25,6 +26,7 @@
3476 #include <jmpbuf-offsets.h>
3477 #include "bp-sym.h"
3478 #include "bp-asm.h"
3479+#include <stap-probe.h>
3480
3481 #define PARMS LINKAGE /* no space for saved regs */
3482 #define JMPBUF PARMS
70963a51 3483@@ -47,6 +49,7 @@
eae7d017
MT
3484 #endif
3485 movl %ecx, (JB_SP*4)(%edx)
3486 movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */
3487+ LIBC_PROBE (setjmp, 3, 4@%edx, -4@$0, 4@%ecx)
3488 #ifdef PTR_MANGLE
3489 PTR_MANGLE (%ecx)
3490 #endif
70963a51
MT
3491diff -Nur a/sysdeps/i386/bsd-setjmp.S b/sysdeps/i386/bsd-setjmp.S
3492--- a/sysdeps/i386/bsd-setjmp.S 2011-12-22 16:50:52.000000000 +0000
3493+++ b/sysdeps/i386/bsd-setjmp.S 2011-12-22 17:59:24.607119317 +0000
eae7d017
MT
3494@@ -1,5 +1,6 @@
3495 /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. i386 version.
3496- Copyright (C) 1994-1997,2000,2001,2005, 2006 Free Software Foundation, Inc.
3497+ Copyright (C) 1994-1997,2000,2001,2005,2006,2011
3498+ Free Software Foundation, Inc.
3499 This file is part of the GNU C Library.
3500
3501 The GNU C Library is free software; you can redistribute it and/or
3502@@ -25,6 +26,7 @@
3503 #include <jmpbuf-offsets.h>
3504 #include "bp-sym.h"
3505 #include "bp-asm.h"
3506+#include <stap-probe.h>
3507
3508 #define PARMS LINKAGE /* no space for saved regs */
3509 #define JMPBUF PARMS
70963a51 3510@@ -49,6 +51,7 @@
eae7d017
MT
3511 #endif
3512 movl %ecx, (JB_SP*4)(%eax)
3513 movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */
3514+ LIBC_PROBE (setjmp, 3, 4@%eax, -4@$1, 4@%ecx)
3515 #ifdef PTR_MANGLE
3516 PTR_MANGLE (%ecx)
3517 #endif
70963a51
MT
3518diff -Nur a/sysdeps/i386/i686/Makefile b/sysdeps/i386/i686/Makefile
3519--- a/sysdeps/i386/i686/Makefile 2011-12-22 16:50:52.000000000 +0000
3520+++ b/sysdeps/i386/i686/Makefile 2011-12-22 17:59:24.607119317 +0000
3521@@ -9,19 +9,3 @@
d9a1ddc1
MT
3522 ifeq ($(subdir),string)
3523 sysdep_routines += cacheinfo
3524 endif
3525-
3526-ifeq (yes,$(config-asflags-i686))
3527-CFLAGS-.o += -Wa,-mtune=i686
3528-CFLAGS-.os += -Wa,-mtune=i686
3529-CFLAGS-.op += -Wa,-mtune=i686
3530-CFLAGS-.og += -Wa,-mtune=i686
3531-CFLAGS-.ob += -Wa,-mtune=i686
3532-CFLAGS-.oS += -Wa,-mtune=i686
3533-
3534-ASFLAGS-.o += -Wa,-mtune=i686
3535-ASFLAGS-.os += -Wa,-mtune=i686
3536-ASFLAGS-.op += -Wa,-mtune=i686
3537-ASFLAGS-.og += -Wa,-mtune=i686
3538-ASFLAGS-.ob += -Wa,-mtune=i686
3539-ASFLAGS-.oS += -Wa,-mtune=i686
3540-endif
70963a51
MT
3541diff -Nur a/sysdeps/i386/setjmp.S b/sysdeps/i386/setjmp.S
3542--- a/sysdeps/i386/setjmp.S 2011-12-22 16:50:52.000000000 +0000
3543+++ b/sysdeps/i386/setjmp.S 2011-12-22 17:59:24.608119317 +0000
eae7d017
MT
3544@@ -1,5 +1,5 @@
3545 /* setjmp for i386.
3546- Copyright (C) 1995,1996,1997,2000,2001,2005,2006
3547+ Copyright (C) 1995,1996,1997,2000,2001,2005,2006,2011
3548 Free Software Foundation, Inc.
3549 This file is part of the GNU C Library.
3550
3551@@ -23,6 +23,7 @@
3552 #include <asm-syntax.h>
3553 #include "bp-sym.h"
3554 #include "bp-asm.h"
3555+#include <stap-probe.h>
3556
3557 #define PARMS LINKAGE /* no space for saved regs */
3558 #define JMPBUF PARMS
70963a51 3559@@ -44,6 +45,7 @@
eae7d017
MT
3560 #endif
3561 movl %ecx, (JB_SP*4)(%eax)
3562 movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */
3563+ LIBC_PROBE (setjmp, 3, 4@%eax, -4@SIGMSK(%esp), 4@%ecx)
3564 #ifdef PTR_MANGLE
3565 PTR_MANGLE (%ecx)
3566 #endif
70963a51
MT
3567diff -Nur a/sysdeps/ia64/Makefile b/sysdeps/ia64/Makefile
3568--- a/sysdeps/ia64/Makefile 2011-12-22 16:50:52.000000000 +0000
3569+++ b/sysdeps/ia64/Makefile 2011-12-22 17:59:24.608119317 +0000
3570@@ -12,8 +12,8 @@
e5ad540d
MT
3571
3572 ifeq (yes,$(build-shared))
3573 # Compatibility
3574-sysdep_routines += ia64libgcc
3575-shared-only-routines += ia64libgcc
3576+sysdep_routines += libgcc-compat
3577+shared-only-routines += libgcc-compat
3578 endif
3579 endif
3580
70963a51
MT
3581diff -Nur a/sysdeps/ia64/ia64libgcc.S b/sysdeps/ia64/ia64libgcc.S
3582--- a/sysdeps/ia64/ia64libgcc.S 2011-12-22 16:50:52.000000000 +0000
3583+++ b/sysdeps/ia64/ia64libgcc.S 1970-01-01 00:00:00.000000000 +0000
e5ad540d
MT
3584@@ -1,350 +0,0 @@
3585-/* From the Intel IA-64 Optimization Guide, choose the minimum latency
3586- alternative. */
3587-
3588-#include <sysdep.h>
3589-#undef ret
3590-
3591-#include <shlib-compat.h>
3592-
3593-#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6)
3594-
3595-/* __divtf3
3596- Compute a 80-bit IEEE double-extended quotient.
3597- farg0 holds the dividend. farg1 holds the divisor. */
3598-
3599-ENTRY(___divtf3)
3600- cmp.eq p7, p0 = r0, r0
3601- frcpa.s0 f10, p6 = farg0, farg1
3602- ;;
3603-(p6) cmp.ne p7, p0 = r0, r0
3604- .pred.rel.mutex p6, p7
3605-(p6) fnma.s1 f11 = farg1, f10, f1
3606-(p6) fma.s1 f12 = farg0, f10, f0
3607- ;;
3608-(p6) fma.s1 f13 = f11, f11, f0
3609-(p6) fma.s1 f14 = f11, f11, f11
3610- ;;
3611-(p6) fma.s1 f11 = f13, f13, f11
3612-(p6) fma.s1 f13 = f14, f10, f10
3613- ;;
3614-(p6) fma.s1 f10 = f13, f11, f10
3615-(p6) fnma.s1 f11 = farg1, f12, farg0
3616- ;;
3617-(p6) fma.s1 f11 = f11, f10, f12
3618-(p6) fnma.s1 f12 = farg1, f10, f1
3619- ;;
3620-(p6) fma.s1 f10 = f12, f10, f10
3621-(p6) fnma.s1 f12 = farg1, f11, farg0
3622- ;;
3623-(p6) fma.s0 fret0 = f12, f10, f11
3624-(p7) mov fret0 = f10
3625- br.ret.sptk rp
3626-END(___divtf3)
3627- .symver ___divtf3, __divtf3@GLIBC_2.2
3628-
3629-/* __divdf3
3630- Compute a 64-bit IEEE double quotient.
3631- farg0 holds the dividend. farg1 holds the divisor. */
3632-
3633-ENTRY(___divdf3)
3634- cmp.eq p7, p0 = r0, r0
3635- frcpa.s0 f10, p6 = farg0, farg1
3636- ;;
3637-(p6) cmp.ne p7, p0 = r0, r0
3638- .pred.rel.mutex p6, p7
3639-(p6) fmpy.s1 f11 = farg0, f10
3640-(p6) fnma.s1 f12 = farg1, f10, f1
3641- ;;
3642-(p6) fma.s1 f11 = f12, f11, f11
3643-(p6) fmpy.s1 f13 = f12, f12
3644- ;;
3645-(p6) fma.s1 f10 = f12, f10, f10
3646-(p6) fma.s1 f11 = f13, f11, f11
3647- ;;
3648-(p6) fmpy.s1 f12 = f13, f13
3649-(p6) fma.s1 f10 = f13, f10, f10
3650- ;;
3651-(p6) fma.d.s1 f11 = f12, f11, f11
3652-(p6) fma.s1 f10 = f12, f10, f10
3653- ;;
3654-(p6) fnma.d.s1 f8 = farg1, f11, farg0
3655- ;;
3656-(p6) fma.d fret0 = f8, f10, f11
3657-(p7) mov fret0 = f10
3658- br.ret.sptk rp
3659- ;;
3660-END(___divdf3)
3661- .symver ___divdf3, __divdf3@GLIBC_2.2
3662-
3663-/* __divsf3
3664- Compute a 32-bit IEEE float quotient.
3665- farg0 holds the dividend. farg1 holds the divisor. */
3666-
3667-ENTRY(___divsf3)
3668- cmp.eq p7, p0 = r0, r0
3669- frcpa.s0 f10, p6 = farg0, farg1
3670- ;;
3671-(p6) cmp.ne p7, p0 = r0, r0
3672- .pred.rel.mutex p6, p7
3673-(p6) fmpy.s1 f8 = farg0, f10
3674-(p6) fnma.s1 f9 = farg1, f10, f1
3675- ;;
3676-(p6) fma.s1 f8 = f9, f8, f8
3677-(p6) fmpy.s1 f9 = f9, f9
3678- ;;
3679-(p6) fma.s1 f8 = f9, f8, f8
3680-(p6) fmpy.s1 f9 = f9, f9
3681- ;;
3682-(p6) fma.d.s1 f10 = f9, f8, f8
3683- ;;
3684-(p6) fnorm.s.s0 fret0 = f10
3685-(p7) mov fret0 = f10
3686- br.ret.sptk rp
3687- ;;
3688-END(___divsf3)
3689- .symver ___divsf3, __divsf3@GLIBC_2.2
3690-
3691-/* __divdi3
3692- Compute a 64-bit integer quotient.
3693- in0 holds the dividend. in1 holds the divisor. */
3694-
3695-ENTRY(___divdi3)
3696- .regstk 2,0,0,0
3697- /* Transfer inputs to FP registers. */
3698- setf.sig f8 = in0
3699- setf.sig f9 = in1
3700- ;;
3701- /* Convert the inputs to FP, so that they won't be treated as
3702- unsigned. */
3703- fcvt.xf f8 = f8
3704- fcvt.xf f9 = f9
3705- ;;
3706- /* Compute the reciprocal approximation. */
3707- frcpa.s1 f10, p6 = f8, f9
3708- ;;
3709- /* 3 Newton-Raphson iterations. */
3710-(p6) fnma.s1 f11 = f9, f10, f1
3711-(p6) fmpy.s1 f12 = f8, f10
3712- ;;
3713-(p6) fmpy.s1 f13 = f11, f11
3714-(p6) fma.s1 f12 = f11, f12, f12
3715- ;;
3716-(p6) fma.s1 f10 = f11, f10, f10
3717-(p6) fma.s1 f11 = f13, f12, f12
3718- ;;
3719-(p6) fma.s1 f10 = f13, f10, f10
3720-(p6) fnma.s1 f12 = f9, f11, f8
3721- ;;
3722-(p6) fma.s1 f10 = f12, f10, f11
3723- ;;
3724- /* Round quotient to an integer. */
3725- fcvt.fx.trunc.s1 f10 = f10
3726- ;;
3727- /* Transfer result to GP registers. */
3728- getf.sig ret0 = f10
3729- br.ret.sptk rp
3730- ;;
3731-END(___divdi3)
3732- .symver ___divdi3, __divdi3@GLIBC_2.2
3733-
3734-/* __moddi3
3735- Compute a 64-bit integer modulus.
3736- in0 holds the dividend (a). in1 holds the divisor (b). */
3737-
3738-ENTRY(___moddi3)
3739- .regstk 2,0,0,0
3740- /* Transfer inputs to FP registers. */
3741- setf.sig f14 = in0
3742- setf.sig f9 = in1
3743- ;;
3744- /* Convert the inputs to FP, so that they won't be treated as
3745- unsigned. */
3746- fcvt.xf f8 = f14
3747- fcvt.xf f9 = f9
3748- ;;
3749- /* Compute the reciprocal approximation. */
3750- frcpa.s1 f10, p6 = f8, f9
3751- ;;
3752- /* 3 Newton-Raphson iterations. */
3753-(p6) fmpy.s1 f12 = f8, f10
3754-(p6) fnma.s1 f11 = f9, f10, f1
3755- ;;
3756-(p6) fma.s1 f12 = f11, f12, f12
3757-(p6) fmpy.s1 f13 = f11, f11
3758- ;;
3759-(p6) fma.s1 f10 = f11, f10, f10
3760-(p6) fma.s1 f11 = f13, f12, f12
3761- ;;
3762- sub in1 = r0, in1
3763-(p6) fma.s1 f10 = f13, f10, f10
3764-(p6) fnma.s1 f12 = f9, f11, f8
3765- ;;
3766- setf.sig f9 = in1
3767-(p6) fma.s1 f10 = f12, f10, f11
3768- ;;
3769- fcvt.fx.trunc.s1 f10 = f10
3770- ;;
3771- /* r = q * (-b) + a */
3772- xma.l f10 = f10, f9, f14
3773- ;;
3774- /* Transfer result to GP registers. */
3775- getf.sig ret0 = f10
3776- br.ret.sptk rp
3777- ;;
3778-END(___moddi3)
3779- .symver ___moddi3, __moddi3@GLIBC_2.2
3780-
3781-/* __udivdi3
3782- Compute a 64-bit unsigned integer quotient.
3783- in0 holds the dividend. in1 holds the divisor. */
3784-
3785-ENTRY(___udivdi3)
3786- .regstk 2,0,0,0
3787- /* Transfer inputs to FP registers. */
3788- setf.sig f8 = in0
3789- setf.sig f9 = in1
3790- ;;
3791- /* Convert the inputs to FP, to avoid FP software-assist faults. */
3792- fcvt.xuf.s1 f8 = f8
3793- fcvt.xuf.s1 f9 = f9
3794- ;;
3795- /* Compute the reciprocal approximation. */
3796- frcpa.s1 f10, p6 = f8, f9
3797- ;;
3798- /* 3 Newton-Raphson iterations. */
3799-(p6) fnma.s1 f11 = f9, f10, f1
3800-(p6) fmpy.s1 f12 = f8, f10
3801- ;;
3802-(p6) fmpy.s1 f13 = f11, f11
3803-(p6) fma.s1 f12 = f11, f12, f12
3804- ;;
3805-(p6) fma.s1 f10 = f11, f10, f10
3806-(p6) fma.s1 f11 = f13, f12, f12
3807- ;;
3808-(p6) fma.s1 f10 = f13, f10, f10
3809-(p6) fnma.s1 f12 = f9, f11, f8
3810- ;;
3811-(p6) fma.s1 f10 = f12, f10, f11
3812- ;;
3813- /* Round quotient to an unsigned integer. */
3814- fcvt.fxu.trunc.s1 f10 = f10
3815- ;;
3816- /* Transfer result to GP registers. */
3817- getf.sig ret0 = f10
3818- br.ret.sptk rp
3819- ;;
3820-END(___udivdi3)
3821- .symver ___udivdi3, __udivdi3@GLIBC_2.2
3822-
3823-/* __umoddi3
3824- Compute a 64-bit unsigned integer modulus.
3825- in0 holds the dividend (a). in1 holds the divisor (b). */
3826-
3827-ENTRY(___umoddi3)
3828- .regstk 2,0,0,0
3829- /* Transfer inputs to FP registers. */
3830- setf.sig f14 = in0
3831- setf.sig f9 = in1
3832- ;;
3833- /* Convert the inputs to FP, to avoid FP software assist faults. */
3834- fcvt.xuf.s1 f8 = f14
3835- fcvt.xuf.s1 f9 = f9
3836- ;;
3837- /* Compute the reciprocal approximation. */
3838- frcpa.s1 f10, p6 = f8, f9
3839- ;;
3840- /* 3 Newton-Raphson iterations. */
3841-(p6) fmpy.s1 f12 = f8, f10
3842-(p6) fnma.s1 f11 = f9, f10, f1
3843- ;;
3844-(p6) fma.s1 f12 = f11, f12, f12
3845-(p6) fmpy.s1 f13 = f11, f11
3846- ;;
3847-(p6) fma.s1 f10 = f11, f10, f10
3848-(p6) fma.s1 f11 = f13, f12, f12
3849- ;;
3850- sub in1 = r0, in1
3851-(p6) fma.s1 f10 = f13, f10, f10
3852-(p6) fnma.s1 f12 = f9, f11, f8
3853- ;;
3854- setf.sig f9 = in1
3855-(p6) fma.s1 f10 = f12, f10, f11
3856- ;;
3857- /* Round quotient to an unsigned integer. */
3858- fcvt.fxu.trunc.s1 f10 = f10
3859- ;;
3860- /* r = q * (-b) + a */
3861- xma.l f10 = f10, f9, f14
3862- ;;
3863- /* Transfer result to GP registers. */
3864- getf.sig ret0 = f10
3865- br.ret.sptk rp
3866- ;;
3867-END(___umoddi3)
3868- .symver ___umoddi3, __umoddi3@GLIBC_2.2
3869-
3870-/* __multi3
3871- Compute a 128-bit multiply of 128-bit multiplicands.
3872- in0/in1 holds one multiplicand (a), in2/in3 holds the other one (b). */
3873-
3874-ENTRY(___multi3)
3875- .regstk 4,0,0,0
3876- setf.sig f6 = in1
3877- movl r19 = 0xffffffff
3878- setf.sig f7 = in2
3879- ;;
3880- and r14 = r19, in0
3881- ;;
3882- setf.sig f10 = r14
3883- and r14 = r19, in2
3884- xmpy.l f9 = f6, f7
3885- ;;
3886- setf.sig f6 = r14
3887- shr.u r14 = in0, 32
3888- ;;
3889- setf.sig f7 = r14
3890- shr.u r14 = in2, 32
3891- ;;
3892- setf.sig f8 = r14
3893- xmpy.l f11 = f10, f6
3894- xmpy.l f6 = f7, f6
3895- ;;
3896- getf.sig r16 = f11
3897- xmpy.l f7 = f7, f8
3898- ;;
3899- shr.u r14 = r16, 32
3900- and r16 = r19, r16
3901- getf.sig r17 = f6
3902- setf.sig f6 = in0
3903- ;;
3904- setf.sig f11 = r14
3905- getf.sig r21 = f7
3906- setf.sig f7 = in3
3907- ;;
3908- xma.l f11 = f10, f8, f11
3909- xma.l f6 = f6, f7, f9
3910- ;;
3911- getf.sig r18 = f11
3912- ;;
3913- add r18 = r18, r17
3914- ;;
3915- and r15 = r19, r18
3916- cmp.ltu p7, p6 = r18, r17
3917- ;;
3918- getf.sig r22 = f6
3919-(p7) adds r14 = 1, r19
3920- ;;
3921-(p7) add r21 = r21, r14
3922- shr.u r14 = r18, 32
3923- shl r15 = r15, 32
3924- ;;
3925- add r20 = r21, r14
3926- ;;
3927- add ret0 = r15, r16
3928- add ret1 = r22, r20
3929- br.ret.sptk rp
3930- ;;
3931-END(___multi3)
3932- .symver ___multi3, __multi3@GLIBC_2.2
3933-
3934-#endif
70963a51
MT
3935diff -Nur a/sysdeps/ia64/libgcc-compat.c b/sysdeps/ia64/libgcc-compat.c
3936--- a/sysdeps/ia64/libgcc-compat.c 1970-01-01 00:00:00.000000000 +0000
3937+++ b/sysdeps/ia64/libgcc-compat.c 2011-12-22 17:59:24.613119317 +0000
e5ad540d
MT
3938@@ -0,0 +1,84 @@
3939+/* pre-.hidden libgcc compatibility
3940+ Copyright (C) 2002 Free Software Foundation, Inc.
3941+ This file is part of the GNU C Library.
3942+
3943+ The GNU C Library is free software; you can redistribute it and/or
3944+ modify it under the terms of the GNU Lesser General Public
3945+ License as published by the Free Software Foundation; either
3946+ version 2.1 of the License, or (at your option) any later version.
3947+
3948+ The GNU C Library is distributed in the hope that it will be useful,
3949+ but WITHOUT ANY WARRANTY; without even the implied warranty of
3950+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3951+ Lesser General Public License for more details.
3952+
3953+ You should have received a copy of the GNU Lesser General Public
3954+ License along with the GNU C Library; if not, write to the Free
3955+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
3956+ 02111-1307 USA. */
3957+
3958+
3959+#include <stdint.h>
3960+#include <shlib-compat.h>
3961+
3962+#if SHLIB_COMPAT(libc, GLIBC_2_2, GLIBC_2_2_6)
3963+
3964+typedef int int128_t __attribute__((__mode__(TI)));
3965+
3966+extern long double __divtf3 (long double, long double) attribute_hidden;
3967+long double INTUSE (__divtf3) (long double x, long double y)
3968+{
3969+ return __divtf3 (x, y);
3970+}
3971+symbol_version (INTUSE (__divtf3), __divtf3, GLIBC_2.2);
3972+
3973+extern double __divdf3 (double, double) attribute_hidden;
3974+double INTUSE (__divdf3) (double x, double y)
3975+{
3976+ return __divdf3 (x, y);
3977+}
3978+symbol_version (INTUSE (__divdf3), __divdf3, GLIBC_2.2);
3979+
3980+extern float __divsf3 (float, float) attribute_hidden;
3981+float INTUSE (__divsf3) (float x, float y)
3982+{
3983+ return __divsf3 (x, y);
3984+}
3985+symbol_version (INTUSE (__divsf3), __divsf3, GLIBC_2.2);
3986+
3987+extern int64_t __divdi3 (int64_t, int64_t) attribute_hidden;
3988+int64_t INTUSE (__divdi3) (int64_t x, int64_t y)
3989+{
3990+ return __divdi3 (x, y);
3991+}
3992+symbol_version (INTUSE (__divdi3), __divdi3, GLIBC_2.2);
3993+
3994+extern int64_t __moddi3 (int64_t, int64_t) attribute_hidden;
3995+int64_t INTUSE (__moddi3) (int64_t x, int64_t y)
3996+{
3997+ return __moddi3 (x, y);
3998+}
3999+symbol_version (INTUSE (__moddi3), __moddi3, GLIBC_2.2);
4000+
4001+extern uint64_t __udivdi3 (uint64_t, uint64_t) attribute_hidden;
4002+uint64_t INTUSE (__udivdi3) (uint64_t x, uint64_t y)
4003+{
4004+ return __udivdi3 (x, y);
4005+}
4006+symbol_version (INTUSE (__udivdi3), __udivdi3, GLIBC_2.2);
4007+
4008+extern uint64_t __umoddi3 (uint64_t, uint64_t) attribute_hidden;
4009+uint64_t INTUSE (__umoddi3) (uint64_t x, uint64_t y)
4010+{
4011+ return __umoddi3 (x, y);
4012+}
4013+symbol_version (INTUSE (__umoddi3), __umoddi3, GLIBC_2.2);
4014+
4015+extern int128_t __multi3 (int128_t, int128_t) attribute_hidden;
4016+int128_t INTUSE (__multi3) (int128_t x, int128_t y)
4017+{
4018+ return __multi3 (x, y);
4019+}
4020+symbol_version (INTUSE (__multi3), __multi3, GLIBC_2.2);
4021+
4022+#endif
70963a51
MT
4023diff -Nur a/sysdeps/mach/hurd/getrlimit.c b/sysdeps/mach/hurd/getrlimit.c
4024--- a/sysdeps/mach/hurd/getrlimit.c 2011-12-22 16:50:52.000000000 +0000
4025+++ b/sysdeps/mach/hurd/getrlimit.c 2011-12-22 17:59:24.613119317 +0000
4026@@ -44,4 +44,5 @@
ba8de1f5
MT
4027
4028 return 0;
4029 }
4030+libc_hidden_def (__getrlimit)
4031 weak_alias (__getrlimit, getrlimit)
70963a51
MT
4032diff -Nur a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c
4033--- a/sysdeps/posix/getaddrinfo.c 2011-12-22 16:50:52.000000000 +0000
4034+++ b/sysdeps/posix/getaddrinfo.c 2011-12-22 17:59:24.615119317 +0000
4035@@ -565,8 +565,8 @@
4fb11761
MT
4036
4037 /* If we do not have to look for IPv6 addresses, use
4038 the simple, old functions, which do not support
4039- IPv6 scope ids. */
4040- if (req->ai_family == AF_INET)
4041+ IPv6 scope ids, nor retrieving the canonical name. */
4042+ if (req->ai_family == AF_INET && (req->ai_flags & AI_CANONNAME) == 0)
4043 {
4fb11761 4044 size_t tmpbuflen = 512;
70963a51
MT
4045 assert (tmpbuf == NULL);
4046@@ -1105,68 +1105,10 @@
4fb11761
MT
4047 /* Only the first entry gets the canonical name. */
4048 if (at2 == at && (req->ai_flags & AI_CANONNAME) != 0)
4049 {
4050- char *tmpbuf2 = NULL;
4051- bool malloc_tmpbuf2 = false;
4052-
4053 if (canon == NULL)
4054- {
4055- struct hostent *h = NULL;
4056- int herrno;
4057- struct hostent th;
4058- size_t tmpbuf2len = 512;
4059-
4060- do
4061- {
4062- if (__libc_use_alloca (alloca_used + 2 * tmpbuf2len))
4063- tmpbuf2 = extend_alloca_account (tmpbuf2, tmpbuf2len,
4064- tmpbuf2len * 2,
4065- alloca_used);
4066- else
4067- {
4068- char *newp = realloc (malloc_tmpbuf2 ? tmpbuf2 : NULL,
4069- 2 * tmpbuf2len);
4070- if (newp == NULL)
4071- {
4072- if (malloc_tmpbuf2)
4073- free (tmpbuf2);
4074- result = -EAI_MEMORY;
4075- goto free_and_return;
4076- }
4077-
4078- tmpbuf2 = newp;
4079- tmpbuf2len = 2 * tmpbuf2len;
4080- malloc_tmpbuf2 = true;
4081- }
4082-
4083- rc = __gethostbyaddr_r (at2->addr,
4084- ((at2->family == AF_INET6)
4085- ? sizeof (struct in6_addr)
4086- : sizeof (struct in_addr)),
4087- at2->family, &th, tmpbuf2,
4088- tmpbuf2len, &h, &herrno);
4089- }
4090- while (rc == ERANGE && herrno == NETDB_INTERNAL);
4091-
4092- if (rc != 0 && herrno == NETDB_INTERNAL)
4093- {
4094- if (malloc_tmpbuf2)
4095- free (tmpbuf2);
4096-
4097- __set_h_errno (herrno);
4098- result = -EAI_SYSTEM;
4099- goto free_and_return;
4100- }
4101-
4102- if (h != NULL)
4103- canon = h->h_name;
4104- else
4105- {
4106- assert (orig_name != NULL);
4107- /* If the canonical name cannot be determined, use
4108- the passed in string. */
4109- canon = orig_name;
4110- }
4111- }
4112+ /* If the canonical name cannot be determined, use
4113+ the passed in string. */
4114+ canon = orig_name;
4115
4116 #ifdef HAVE_LIBIDN
4117 if (req->ai_flags & AI_CANONIDN)
70963a51 4118@@ -1181,9 +1123,6 @@
4fb11761
MT
4119 int rc = __idna_to_unicode_lzlz (canon, &out, idn_flags);
4120 if (rc != IDNA_SUCCESS)
4121 {
4122- if (malloc_tmpbuf2)
4123- free (tmpbuf2);
4124-
4125 if (rc == IDNA_MALLOC_ERROR)
4126 result = -EAI_MEMORY;
4127 else if (rc == IDNA_DLOPEN_ERROR)
70963a51 4128@@ -1213,17 +1152,11 @@
4fb11761
MT
4129 canon = strdup (canon);
4130 if (canon == NULL)
4131 {
4132- if (malloc_tmpbuf2)
4133- free (tmpbuf2);
4134-
4135 result = -EAI_MEMORY;
4136 goto free_and_return;
4137 }
4138 }
4139 }
4140-
4141- if (malloc_tmpbuf2)
4142- free (tmpbuf2);
4143 }
4144
4145 family = at2->family;
70963a51 4146@@ -1360,10 +1293,12 @@
e5ad540d
MT
4147 /* Link-local addresses: scope 2. */
4148 { { { 169, 254, 0, 0 } }, htonl_c (0xffff0000), 2 },
4149 { { { 127, 0, 0, 0 } }, htonl_c (0xff000000), 2 },
4150+#if 0
4151 /* Site-local addresses: scope 5. */
4152 { { { 10, 0, 0, 0 } }, htonl_c (0xff000000), 5 },
4153 { { { 172, 16, 0, 0 } }, htonl_c (0xfff00000), 5 },
4154 { { { 192, 168, 0, 0 } }, htonl_c (0xffff0000), 5 },
4155+#endif
4156 /* Default: scope 14. */
4157 { { { 0, 0, 0, 0 } }, htonl_c (0x00000000), 14 }
4158 };
70963a51
MT
4159diff -Nur a/sysdeps/powerpc/powerpc64/Makefile b/sysdeps/powerpc/powerpc64/Makefile
4160--- a/sysdeps/powerpc/powerpc64/Makefile 2011-12-22 16:50:52.000000000 +0000
4161+++ b/sysdeps/powerpc/powerpc64/Makefile 2011-12-22 17:59:24.615119317 +0000
4162@@ -33,6 +33,7 @@
e5ad540d
MT
4163 # we use -fpic instead which is much better.
4164 CFLAGS-initfini.s += -fpic -O1
4165 endif
4166+CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
4167 endif
4168
4169 ifeq ($(subdir),elf)
70963a51
MT
4170diff -Nur a/sysdeps/powerpc/powerpc64/elf/Makefile b/sysdeps/powerpc/powerpc64/elf/Makefile
4171--- a/sysdeps/powerpc/powerpc64/elf/Makefile 2011-12-22 16:50:52.000000000 +0000
4172+++ b/sysdeps/powerpc/powerpc64/elf/Makefile 2011-12-22 17:59:24.616119318 +0000
4173@@ -9,3 +9,5 @@
ba8de1f5
MT
4174 CFLAGS-rtld-memmove.os = $(no-special-regs)
4175 CFLAGS-rtld-memchr.os = $(no-special-regs)
4176 CFLAGS-rtld-strnlen.os = $(no-special-regs)
4177+
4178+CFLAGS-gmon-start.c = -fno-strict-aliasing
70963a51
MT
4179diff -Nur a/sysdeps/s390/s390-64/utf16-utf32-z9.c b/sysdeps/s390/s390-64/utf16-utf32-z9.c
4180--- a/sysdeps/s390/s390-64/utf16-utf32-z9.c 2011-12-22 16:50:52.000000000 +0000
4181+++ b/sysdeps/s390/s390-64/utf16-utf32-z9.c 2011-12-22 17:59:24.616119318 +0000
4182@@ -169,10 +169,7 @@
4fb11761
MT
4183 register unsigned long long outlen asm("11") = outend - outptr; \
4184 uint64_t cc = 0; \
4185 \
4186- asm volatile (".machine push \n\t" \
4187- ".machine \"z9-109\" \n\t" \
4188- "0: " INSTRUCTION " \n\t" \
4189- ".machine pop \n\t" \
4190+ asm volatile ("0: " INSTRUCTION " \n\t" \
4191 " jo 0b \n\t" \
4192 " ipm %2 \n" \
4193 : "+a" (pOutput), "+a" (pInput), "+d" (cc), \
70963a51
MT
4194diff -Nur a/sysdeps/s390/s390-64/utf8-utf16-z9.c b/sysdeps/s390/s390-64/utf8-utf16-z9.c
4195--- a/sysdeps/s390/s390-64/utf8-utf16-z9.c 2011-12-22 16:50:52.000000000 +0000
4196+++ b/sysdeps/s390/s390-64/utf8-utf16-z9.c 2011-12-22 17:59:24.616119318 +0000
4197@@ -151,10 +151,7 @@
4fb11761
MT
4198 register unsigned long long outlen asm("11") = outend - outptr; \
4199 uint64_t cc = 0; \
4200 \
4201- asm volatile (".machine push \n\t" \
4202- ".machine \"z9-109\" \n\t" \
4203- "0: " INSTRUCTION " \n\t" \
4204- ".machine pop \n\t" \
4205+ asm volatile ("0: " INSTRUCTION " \n\t" \
4206 " jo 0b \n\t" \
4207 " ipm %2 \n" \
4208 : "+a" (pOutput), "+a" (pInput), "+d" (cc), \
70963a51
MT
4209diff -Nur a/sysdeps/s390/s390-64/utf8-utf32-z9.c b/sysdeps/s390/s390-64/utf8-utf32-z9.c
4210--- a/sysdeps/s390/s390-64/utf8-utf32-z9.c 2011-12-22 16:50:52.000000000 +0000
4211+++ b/sysdeps/s390/s390-64/utf8-utf32-z9.c 2011-12-22 17:59:24.617119319 +0000
4212@@ -155,10 +155,7 @@
4fb11761
MT
4213 register unsigned long long outlen asm("11") = outend - outptr; \
4214 uint64_t cc = 0; \
4215 \
4216- asm volatile (".machine push \n\t" \
4217- ".machine \"z9-109\" \n\t" \
4218- "0: " INSTRUCTION " \n\t" \
4219- ".machine pop \n\t" \
4220+ asm volatile ("0: " INSTRUCTION " \n\t" \
4221 " jo 0b \n\t" \
4222 " ipm %2 \n" \
4223 : "+a" (pOutput), "+a" (pInput), "+d" (cc), \
70963a51
MT
4224diff -Nur a/sysdeps/unix/nice.c b/sysdeps/unix/nice.c
4225--- a/sysdeps/unix/nice.c 2011-12-22 16:50:52.000000000 +0000
4226+++ b/sysdeps/unix/nice.c 2011-12-22 17:59:24.617119319 +0000
4227@@ -42,7 +42,12 @@
e5ad540d
MT
4228 __set_errno (save);
4229 }
4230
4231- result = setpriority (PRIO_PROCESS, 0, prio + incr);
4232+ prio += incr;
4233+ if (prio < PRIO_MIN)
4234+ prio = PRIO_MIN;
4235+ else if (prio >= PRIO_MAX)
4236+ prio = PRIO_MAX - 1;
4237+ result = setpriority (PRIO_PROCESS, 0, prio);
4238 if (result == -1)
4239 {
4240 if (errno == EACCES)
70963a51
MT
4241diff -Nur a/sysdeps/unix/sysv/linux/check_pf.c b/sysdeps/unix/sysv/linux/check_pf.c
4242--- a/sysdeps/unix/sysv/linux/check_pf.c 2011-12-22 16:50:52.000000000 +0000
4243+++ b/sysdeps/unix/sysv/linux/check_pf.c 2011-12-22 17:59:24.618119320 +0000
4244@@ -27,16 +27,14 @@
e5ad540d
MT
4245 #include <unistd.h>
4246 #include <sys/socket.h>
4247
4248-#include <asm/types.h>
4249-#include <linux/netlink.h>
4250-#include <linux/rtnetlink.h>
4251-
4252 #include <not-cancel.h>
4253 #include <kernel-features.h>
70963a51
MT
4254 #include <bits/libc-lock.h>
4255 #include <atomic.h>
4256 #include <nscd/nscd-client.h>
e5ad540d
MT
4257
4258+#include "netlinkaccess.h"
70963a51 4259+
e5ad540d
MT
4260
4261 #ifndef IFA_F_HOMEADDRESS
4262 # define IFA_F_HOMEADDRESS 0
70963a51
MT
4263diff -Nur a/sysdeps/unix/sysv/linux/futimesat.c b/sysdeps/unix/sysv/linux/futimesat.c
4264--- a/sysdeps/unix/sysv/linux/futimesat.c 2011-12-22 16:50:52.000000000 +0000
4265+++ b/sysdeps/unix/sysv/linux/futimesat.c 2011-12-22 17:59:24.618119320 +0000
4266@@ -37,14 +37,14 @@
e5ad540d
MT
4267 {
4268 int result;
4269
4270+ if (file == NULL)
4271+ return __futimes (fd, tvp);
4272+
4273 #ifdef __NR_futimesat
4274 # ifndef __ASSUME_ATFCTS
4275 if (__have_atfcts >= 0)
4276 # endif
4277 {
4278- if (file == NULL)
4279- return __futimes (fd, tvp);
4280-
4281 result = INLINE_SYSCALL (futimesat, 3, fd, file, tvp);
4282 # ifndef __ASSUME_ATFCTS
4283 if (result == -1 && errno == ENOSYS)
70963a51 4284@@ -58,22 +58,7 @@
e5ad540d
MT
4285 #ifndef __ASSUME_ATFCTS
4286 char *buf = NULL;
4287
4288- if (file == NULL)
4289- {
4290- static const char procfd[] = "/proc/self/fd/%d";
4291- /* Buffer for the path name we are going to use. It consists of
4292- - the string /proc/self/fd/
4293- - the file descriptor number.
4294- The final NUL is included in the sizeof. A bit of overhead
4295- due to the format elements compensates for possible negative
4296- numbers. */
4297- size_t buflen = sizeof (procfd) + sizeof (int) * 3;
4298- buf = alloca (buflen);
4299-
4300- __snprintf (buf, buflen, procfd, fd);
4301- file = buf;
4302- }
4303- else if (fd != AT_FDCWD && file[0] != '/')
4304+ if (fd != AT_FDCWD && file[0] != '/')
4305 {
4306 size_t filelen = strlen (file);
4307 if (__builtin_expect (filelen == 0, 0))
70963a51
MT
4308diff -Nur a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S
4309--- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S 2011-12-22 16:50:52.000000000 +0000
4310+++ b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S 2011-12-22 17:59:24.619119321 +0000
eae7d017
MT
4311@@ -1,4 +1,5 @@
4312-/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc.
4313+/* Copyright (C) 2001,2004,2005,2006,2009,2011
4314+ Free Software Foundation, Inc.
4315 This file is part of the GNU C Library.
4316
4317 The GNU C Library is free software; you can redistribute it and/or
4318@@ -19,6 +20,7 @@
4319 #include <sysdep.h>
4320 #include <jmpbuf-offsets.h>
4321 #include <asm-syntax.h>
4322+#include <stap-probe.h>
4323
4324
4325 .section .rodata.str1.1,"aMS",@progbits,1
70963a51 4326@@ -79,7 +81,9 @@
eae7d017
MT
4327 cfi_adjust_cfa_offset(-12)
4328 movl 4(%esp), %ecx
4329
4330-.Lok: /* We add unwind information for the target here. */
4331+.Lok:
4332+ LIBC_PROBE (longjmp, 3, 4@%ecx, -4@8(%esp), 4@%edx)
4333+ /* We add unwind information for the target here. */
4334 cfi_def_cfa(%ecx, 0)
4335 cfi_register(%eip, %edx)
4336 cfi_register(%esp, %edi)
70963a51 4337@@ -102,5 +106,6 @@
eae7d017
MT
4338 cfi_restore(%ebp)
4339
4340 /* Jump to saved PC. */
4341+ LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%eax, 4@%edx)
4342 jmp *%edx
4343 END (____longjmp_chk)
70963a51
MT
4344diff -Nur a/sysdeps/unix/sysv/linux/i386/dl-cache.h b/sysdeps/unix/sysv/linux/i386/dl-cache.h
4345--- a/sysdeps/unix/sysv/linux/i386/dl-cache.h 1970-01-01 00:00:00.000000000 +0000
4346+++ b/sysdeps/unix/sysv/linux/i386/dl-cache.h 2011-12-22 17:59:24.620119321 +0000
e5ad540d
MT
4347@@ -0,0 +1,59 @@
4348+/* Support for reading /etc/ld.so.cache files written by Linux ldconfig.
4349+ Copyright (C) 2004 Free Software Foundation, Inc.
4350+ This file is part of the GNU C Library.
4351+
4352+ The GNU C Library is free software; you can redistribute it and/or
4353+ modify it under the terms of the GNU Lesser General Public
4354+ License as published by the Free Software Foundation; either
4355+ version 2.1 of the License, or (at your option) any later version.
4356+
4357+ The GNU C Library is distributed in the hope that it will be useful,
4358+ but WITHOUT ANY WARRANTY; without even the implied warranty of
4359+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4360+ Lesser General Public License for more details.
4361+
4362+ You should have received a copy of the GNU Lesser General Public
4363+ License along with the GNU C Library; if not, write to the Free
4364+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
4365+ 02111-1307 USA. */
4366+
4367+static inline int
4368+is_ia64 (void)
4369+{
4370+ unsigned int fl1, fl2;
4371+
4372+ /* See if we can use cpuid. */
4373+ __asm__ ("pushfl; pushfl; popl %0; movl %0,%1; xorl %2,%0;"
4374+ "pushl %0; popfl; pushfl; popl %0; popfl"
4375+ : "=&r" (fl1), "=&r" (fl2)
4376+ : "i" (0x00200000));
4377+ if (((fl1 ^ fl2) & 0x00200000) == 0)
4378+ return 0;
4379+
4380+ /* Host supports cpuid. See if cpuid gives capabilities, try
4381+ CPUID(0). Preserve %ebx and %ecx; cpuid insn clobbers these, we
4382+ don't need their CPUID values here, and %ebx may be the PIC
4383+ register. */
4384+ __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx"
4385+ : "=a" (fl1) : "0" (0) : "edx", "cc");
4386+ if (fl1 == 0)
4387+ return 0;
4388+
4389+ /* Invoke CPUID(1), return %edx; caller can examine bits to
4390+ determine what's supported. */
4391+ __asm__ ("pushl %%ecx; pushl %%ebx; cpuid; popl %%ebx; popl %%ecx"
4392+ : "=d" (fl2), "=a" (fl1) : "1" (1) : "cc");
4393+ return (fl2 & (1 << 30)) != 0;
4394+}
4395+
4396+#define arch_startup(argc, argv) \
4397+ do { \
4398+ /* On IA-64, try to execute 64-bit ldconfig if possible. \
4399+ This is because the badly designed /emul/ia32-linux hack \
4400+ will cause 32-bit ldconfig to do all sorts of weird things. */ \
4401+ if (is_ia64 ()) \
4402+ execv ("/emul/ia32-linux/../../sbin/ldconfig", \
4403+ (char *const *) argv); \
4404+ } while (0)
4405+
4406+#include_next <dl-cache.h>
70963a51
MT
4407diff -Nur a/sysdeps/unix/sysv/linux/i386/getrlimit.c b/sysdeps/unix/sysv/linux/i386/getrlimit.c
4408--- a/sysdeps/unix/sysv/linux/i386/getrlimit.c 2011-12-22 16:50:52.000000000 +0000
4409+++ b/sysdeps/unix/sysv/linux/i386/getrlimit.c 2011-12-22 17:59:24.620119321 +0000
4410@@ -79,4 +79,5 @@
ba8de1f5
MT
4411 }
4412
4413 weak_alias (__new_getrlimit, __getrlimit);
4414+libc_hidden_weak (__getrlimit)
4415 versioned_symbol (libc, __new_getrlimit, getrlimit, GLIBC_2_2);
70963a51
MT
4416diff -Nur a/sysdeps/unix/sysv/linux/ia64/dl-cache.h b/sysdeps/unix/sysv/linux/ia64/dl-cache.h
4417--- a/sysdeps/unix/sysv/linux/ia64/dl-cache.h 2011-12-22 16:50:52.000000000 +0000
4418+++ b/sysdeps/unix/sysv/linux/ia64/dl-cache.h 2011-12-22 17:59:24.621119321 +0000
e5ad540d
MT
4419@@ -22,4 +22,31 @@
4420 #define _dl_cache_check_flags(flags) \
4421 ((flags) == _DL_CACHE_DEFAULT_ID)
4422
4423+#define EMUL_HACK "/emul/ia32-linux"
4424+
4425+#define arch_startup(argc, argv) unlink (EMUL_HACK LD_SO_CACHE)
4426+
4427+#define add_arch_dirs(config_file) \
4428+ do { \
4429+ int save_verbose = opt_verbose; \
4430+ opt_verbose = 0; \
4431+ \
4432+ parse_conf (config_file, EMUL_HACK, true); \
4433+ \
4434+ /* Always add the standard search paths. */ \
4435+ add_system_dir (EMUL_HACK SLIBDIR); \
4436+ if (strcmp (SLIBDIR, LIBDIR)) \
4437+ add_system_dir (EMUL_HACK LIBDIR); \
4438+ \
4439+ char emul_config_file[strlen (config_file) \
4440+ + sizeof EMUL_HACK]; \
4441+ strcpy (mempcpy (emul_config_file, EMUL_HACK, \
4442+ strlen (EMUL_HACK)), config_file); \
4443+ \
4444+ if (! access (emul_config_file, R_OK)) \
4445+ parse_conf (emul_config_file, EMUL_HACK, true); \
4446+ \
4447+ opt_verbose = save_verbose; \
4448+ } while (0)
4449+
4450 #include_next <dl-cache.h>
70963a51
MT
4451diff -Nur a/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c b/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c
4452--- a/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c 1970-01-01 00:00:00.000000000 +0000
4453+++ b/sysdeps/unix/sysv/linux/ia64/dl-procinfo.c 2011-12-22 17:59:24.621119321 +0000
e5ad540d
MT
4454@@ -0,0 +1,5 @@
4455+#ifdef IS_IN_ldconfig
4456+#include <sysdeps/i386/dl-procinfo.c>
4457+#else
4458+#include <sysdeps/generic/dl-procinfo.c>
4459+#endif
70963a51
MT
4460diff -Nur a/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h b/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h
4461--- a/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h 1970-01-01 00:00:00.000000000 +0000
4462+++ b/sysdeps/unix/sysv/linux/ia64/dl-procinfo.h 2011-12-22 17:59:24.621119321 +0000
e5ad540d
MT
4463@@ -0,0 +1,5 @@
4464+#ifdef IS_IN_ldconfig
4465+#include <sysdeps/unix/sysv/linux/i386/dl-procinfo.h>
4466+#else
4467+#include <sysdeps/generic/dl-procinfo.h>
4468+#endif
70963a51
MT
4469diff -Nur a/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed b/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed
4470--- a/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed 2011-12-22 16:50:52.000000000 +0000
4471+++ b/sysdeps/unix/sysv/linux/ia64/ldd-rewrite.sed 2011-12-22 17:59:24.621119321 +0000
e5ad540d
MT
4472@@ -1 +1 @@
4473-s_^\(RTLDLIST=\)\([^ ]*\)-ia64\(\.so\.[0-9.]*\)[ ]*$_\1"\2-ia64\3 \2\3"_
4474+s_^\(RTLDLIST=\)\([^ ]*\)-ia64\(\.so\.[0-9.]*\)[ ]*$_\1"\2-ia64\3 /emul/ia32-linux\2\3"_
70963a51
MT
4475diff -Nur a/sysdeps/unix/sysv/linux/netlinkaccess.h b/sysdeps/unix/sysv/linux/netlinkaccess.h
4476--- a/sysdeps/unix/sysv/linux/netlinkaccess.h 2011-12-22 16:50:52.000000000 +0000
4477+++ b/sysdeps/unix/sysv/linux/netlinkaccess.h 2011-12-22 17:59:24.621119321 +0000
e5ad540d
MT
4478@@ -25,6 +25,24 @@
4479
4480 #include <kernel-features.h>
4481
4482+#ifndef IFA_MAX
4483+/* 2.6.19 kernel headers helpfully removed some macros and
4484+ moved lots of stuff into new headers, some of which aren't
4485+ included by linux/rtnetlink.h. */
4486+#include <linux/if_addr.h>
4487+#endif
4488+
4489+#ifndef IFA_RTA
4490+# define IFA_RTA(r) \
4491+ ((struct rtattr*) ((char*)(r) + NLMSG_ALIGN (sizeof (struct ifaddrmsg))))
4492+# define IFA_PAYLOAD(n) NLMSG_PAYLOAD (n, sizeof (struct ifaddrmsg))
4493+#endif
4494+
4495+#ifndef IFLA_RTA
4496+# define IFLA_RTA(r) \
4497+ ((struct rtattr*) ((char*)(r) + NLMSG_ALIGN (sizeof (struct ifinfomsg))))
4498+# define IFLA_PAYLOAD(n) NLMSG_PAYLOAD (n, sizeof (struct ifinfomsg))
4499+#endif
4500
4501 struct netlink_res
4502 {
70963a51
MT
4503diff -Nur a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h
4504--- a/sysdeps/unix/sysv/linux/paths.h 2011-12-22 16:50:52.000000000 +0000
4505+++ b/sysdeps/unix/sysv/linux/paths.h 2011-12-22 17:59:24.622119321 +0000
e5ad540d
MT
4506@@ -62,7 +62,7 @@
4507 #define _PATH_TTY "/dev/tty"
4508 #define _PATH_UNIX "/boot/vmlinux"
4509 #define _PATH_UTMP "/var/run/utmp"
4510-#define _PATH_VI "/usr/bin/vi"
4511+#define _PATH_VI "/bin/vi"
4512 #define _PATH_WTMP "/var/log/wtmp"
4513
4514 /* Provide trailing slash, since mostly used for building pathnames. */
70963a51
MT
4515diff -Nur a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcsetattr.c
4516--- a/sysdeps/unix/sysv/linux/tcsetattr.c 2011-12-22 16:50:52.000000000 +0000
4517+++ b/sysdeps/unix/sysv/linux/tcsetattr.c 2011-12-22 17:59:24.622119321 +0000
4518@@ -49,6 +49,7 @@
e5ad540d
MT
4519 {
4520 struct __kernel_termios k_termios;
4521 unsigned long int cmd;
4522+ int retval;
4523
4524 switch (optional_actions)
4525 {
70963a51 4526@@ -80,6 +81,35 @@
e5ad540d
MT
4527 memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0],
4528 __KERNEL_NCCS * sizeof (cc_t));
4529
4530- return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
4531+ retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
4532+
4533+ if (retval == 0 && cmd == TCSETS)
4534+ {
4535+ /* The Linux kernel has a bug which silently ignore the invalid
4536+ c_cflag on pty. We have to check it here. */
4537+ int save = errno;
4538+ retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios);
4539+ if (retval)
4540+ {
4541+ /* We cannot verify if the setting is ok. We don't return
4542+ an error (?). */
4543+ __set_errno (save);
4544+ retval = 0;
4545+ }
4546+ else if ((termios_p->c_cflag & (PARENB | CREAD))
4547+ != (k_termios.c_cflag & (PARENB | CREAD))
4548+ || ((termios_p->c_cflag & CSIZE)
4549+ && ((termios_p->c_cflag & CSIZE)
4550+ != (k_termios.c_cflag & CSIZE))))
4551+ {
4552+ /* It looks like the Linux kernel silently changed the
4553+ PARENB/CREAD/CSIZE bits in c_cflag. Report it as an
4554+ error. */
4555+ __set_errno (EINVAL);
4556+ retval = -1;
4557+ }
4558+ }
4559+
4560+ return retval;
4561 }
4562 libc_hidden_def (tcsetattr)
70963a51
MT
4563diff -Nur a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S
4564--- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S 2011-12-22 16:50:52.000000000 +0000
4565+++ b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S 2011-12-22 17:59:24.623119321 +0000
eae7d017
MT
4566@@ -19,6 +19,7 @@
4567 #include <sysdep.h>
4568 #include <jmpbuf-offsets.h>
4569 #include <asm-syntax.h>
4570+#include <stap-probe.h>
4571
4572 .section .rodata.str1.1,"aMS",@progbits,1
4573 .type longjmp_msg,@object
70963a51 4574@@ -94,7 +95,9 @@
eae7d017
MT
4575 movl %ebx, %esi
4576 cfi_restore (%rsi)
4577
4578-.Lok: /* We add unwind information for the target here. */
4579+.Lok:
4580+ LIBC_PROBE (longjmp, 3, 8@%rdi, -4@%esi, 8@%rdx)
4581+ /* We add unwind information for the target here. */
4582 cfi_def_cfa(%rdi, 0)
4583 cfi_register(%rsp,%r8)
4584 cfi_register(%rbp,%r9)
70963a51 4585@@ -113,5 +116,6 @@
eae7d017
MT
4586 movl %esi, %eax
4587 movq %r8,%rsp
4588 movq %r9,%rbp
4589+ LIBC_PROBE (longjmp_target, 3, 8@%rdi, -4@%eax, 8@%rdx)
4590 jmpq *%rdx
4591 END (____longjmp_chk)
70963a51
MT
4592diff -Nur a/sysdeps/x86_64/__longjmp.S b/sysdeps/x86_64/__longjmp.S
4593--- a/sysdeps/x86_64/__longjmp.S 2011-12-22 16:50:52.000000000 +0000
4594+++ b/sysdeps/x86_64/__longjmp.S 2011-12-22 17:59:24.623119321 +0000
eae7d017
MT
4595@@ -1,4 +1,4 @@
4596-/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc.
4597+/* Copyright (C) 2001,2004,2005,2006,2009,2011 Free Software Foundation, Inc.
4598 This file is part of the GNU C Library.
4599
4600 The GNU C Library is free software; you can redistribute it and/or
4601@@ -19,6 +19,7 @@
4602 #include <sysdep.h>
4603 #include <jmpbuf-offsets.h>
4604 #include <asm-syntax.h>
4605+#include <stap-probe.h>
4606
4607 /* Jump to the position specified by ENV, causing the
4608 setjmp call there to return VAL, or 1 if VAL is 0.
70963a51 4609@@ -34,6 +35,7 @@
eae7d017
MT
4610 PTR_DEMANGLE (%r9)
4611 PTR_DEMANGLE (%rdx)
4612 #endif
4613+ LIBC_PROBE (longjmp, 3, 8@%rdi, -4@%esi, 8@%rdx)
4614 /* We add unwind information for the target here. */
4615 cfi_def_cfa(%rdi, 0)
4616 cfi_register(%rsp,%r8)
70963a51 4617@@ -53,5 +55,6 @@
eae7d017
MT
4618 mov %esi, %eax
4619 movq %r8,%rsp
4620 movq %r9,%rbp
4621+ LIBC_PROBE (longjmp_target, 3, 8@%rdi, -4@%eax, 8@%rdx)
4622 jmpq *%rdx
4623 END (__longjmp)
70963a51
MT
4624diff -Nur a/sysdeps/x86_64/setjmp.S b/sysdeps/x86_64/setjmp.S
4625--- a/sysdeps/x86_64/setjmp.S 2011-12-22 16:50:52.000000000 +0000
4626+++ b/sysdeps/x86_64/setjmp.S 2011-12-22 17:59:24.624119322 +0000
eae7d017
MT
4627@@ -1,5 +1,5 @@
4628 /* setjmp for x86-64.
4629- Copyright (C) 2001, 2003, 2005, 2006 Free Software Foundation, Inc.
4630+ Copyright (C) 2001,2003,2005,2006,2011 Free Software Foundation, Inc.
4631 This file is part of the GNU C Library.
4632
4633 The GNU C Library is free software; you can redistribute it and/or
4634@@ -20,6 +20,7 @@
4635 #include <sysdep.h>
4636 #include <jmpbuf-offsets.h>
4637 #include <asm-syntax.h>
4638+#include <stap-probe.h>
4639
4640 ENTRY (__sigsetjmp)
4641 /* Save registers. */
70963a51 4642@@ -41,6 +42,7 @@
eae7d017
MT
4643 #endif
4644 movq %rdx, (JB_RSP*8)(%rdi)
4645 movq (%rsp), %rax /* Save PC we are returning to now. */
4646+ LIBC_PROBE (setjmp, 3, 8@%rdi, -4@%esi, 8@%rax)
4647 #ifdef PTR_MANGLE
4648 PTR_MANGLE (%rax)
4649 #endif
70963a51
MT
4650diff -Nur a/timezone/zic.c b/timezone/zic.c
4651--- a/timezone/zic.c 2011-12-22 16:50:52.000000000 +0000
4652+++ b/timezone/zic.c 2011-12-22 17:59:24.625119322 +0000
4653@@ -1921,7 +1921,7 @@
e5ad540d
MT
4654 if (stdrp != NULL && stdrp->r_hiyear == 2037)
4655 return;
4656 }
4657- if (stdrp == NULL && zp->z_nrules != 0)
4658+ if (stdrp == NULL && (zp->z_nrules != 0 || zp->z_stdoff != 0))
4659 return;
4660 abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
4661 doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);