From 26b6b52f86fc01d67a43ba62429396f6b3ffc74d Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Wed, 25 Jan 2012 21:42:59 -0700 Subject: [PATCH] Break systemtap patches out of glibc-fedora.patch into glibc-stap.patch --- glibc-fedora.patch | 596 --------------------------------------------- glibc-stap.patch | 567 ++++++++++++++++++++++++++++++++++++++++++ glibc.spec | 28 ++- 3 files changed, 582 insertions(+), 609 deletions(-) create mode 100644 glibc-stap.patch diff --git a/glibc-fedora.patch b/glibc-fedora.patch index 25fa067..889b8cf 100644 --- a/glibc-fedora.patch +++ b/glibc-fedora.patch @@ -79,38 +79,6 @@ diff -Nrup a/ChangeLog b/ChangeLog 2011-04-11 Andreas Krebbel * sysdeps/s390/s390-32/elf/start.S (_start): Skip extra zeroes -@@ -4883,6 +4905,31 @@ - * sysdeps/unix/sysv/linux/Versions [GLIBC_2.14] (clock_adjtime): - Export. - -+2011-04-06 Andreas Schwab -+ -+ * scripts/check-local-headers.sh: Ignore systemtap headers. -+ -+2011-02-21 Roland McGrath -+ -+ * sysdeps/x86_64/__longjmp.S: Add a static probe here. -+ * sysdeps/x86_64/setjmp.S: Likewise. -+ * sysdeps/i386/bsd-setjmp.S: Likewise. -+ * sysdeps/i386/bsd-_setjmp.S: Likewise. -+ * sysdeps/i386/setjmp.S: Likewise. -+ * sysdeps/i386/__longjmp.S: Likewise. -+ * sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S: Likewise. -+ * sysdeps/unix/sysv/linux/i386/____longjmp_chk.S: Likewise. -+ -+2011-02-08 Roland McGrath -+ -+ * include/stap-probe.h: New file. -+ * configure.in: Handle --enable-systemtap. -+ * configure: Regenerated. -+ * config.h.in (USE_STAP_PROBE): New #undef. -+ * extra-lib.mk (CPPFLAGS-$(lib)): Add -DIN_LIB=$(lib). -+ * elf/Makefile (CPPFLAGS-.os): Add -DIN_LIB=rtld. -+ * elf/rtld-Rules (rtld-CPPFLAGS): Likewise. -+ - 2011-03-22 Ulrich Drepper - - * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Increment @@ -4943,6 +4990,16 @@ $LDFLAGS and -nostdlib -nostartfiles to linking step. Change main to _start. @@ -407,123 +375,6 @@ diff -Nrup a/NEWS b/NEWS * New Linux interfaces: clock_adjtime, name_to_handle_at, open_by_handle_at, syncfs, setns, sendmmsg -diff -Nrup a/config.h.in b/config.h.in ---- a/config.h.in 2012-01-01 05:16:32.000000000 -0700 -+++ b/config.h.in 2012-01-01 20:41:26.632439843 -0700 -@@ -187,6 +187,9 @@ - /* Define if `.ctors' and `.dtors' sections shouldn't be used. */ - #undef NO_CTORS_DTORS_SECTIONS - -+/* Define if Systemtap probes should be defined. */ -+#undef USE_STAP_PROBE -+ - /* - */ - -diff -Nrup a/configure b/configure ---- a/configure 2012-01-01 20:40:50.423446105 -0700 -+++ b/configure 2012-01-01 20:41:26.634439843 -0700 -@@ -791,6 +791,7 @@ enable_kernel - enable_all_warnings - enable_multi_arch - enable_nss_crypt -+enable_systemtap - with_cpu - ' - ac_precious_vars='build_alias -@@ -1450,6 +1451,7 @@ Optional Features: - --enable-multi-arch enable single DSO with optimizations for multiple - architectures - --enable-nss-crypt enable libcrypt to use nss -+ --enable-systemtap enable systemtap static probe points [default=no] - - Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] -@@ -3804,6 +3806,51 @@ else - fi - - -+# Check whether --enable-systemtap was given. -+if test "${enable_systemtap+set}" = set; then : -+ enableval=$enable_systemtap; systemtap=$enableval -+else -+ systemtap=no -+fi -+ -+if test x$systemtap != xno; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemtap static probe support" >&5 -+$as_echo_n "checking for systemtap static probe support... " >&6; } -+if test "${libc_cv_sdt+set}" = set; then : -+ $as_echo_n "(cached) " >&6 -+else -+ old_CFLAGS="$CFLAGS" -+ CFLAGS="-std=gnu99 $CFLAGS" -+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext -+/* end confdefs.h. */ -+#include -+void foo (int i, void *p) -+{ -+ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" -+ :: STAP_PROBE_ASM_OPERANDS (2, i, p)); -+} -+_ACEOF -+if ac_fn_c_try_compile "$LINENO"; then : -+ libc_cv_sdt=yes -+else -+ libc_cv_sdt=no -+fi -+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -+ CFLAGS="$old_CFLAGS" -+fi -+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sdt" >&5 -+$as_echo "$libc_cv_sdt" >&6; } -+ if test $libc_cv_sdt = yes; then -+ $as_echo "#define USE_STAP_PROBE 1" >>confdefs.h -+ -+ else -+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -+as_fn_error $? "systemtap support needs sys/sdt.h with asm support -+See \`config.log' for more details" "$LINENO" 5; } -+ fi -+fi -+ - # The way shlib-versions is used to generate soversions.mk uses a - # fairly simplistic model for name recognition that can't distinguish - # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os -diff -Nrup a/configure.in b/configure.in ---- a/configure.in 2012-01-01 05:16:32.000000000 -0700 -+++ b/configure.in 2012-01-01 20:41:26.635439843 -0700 -@@ -290,6 +290,29 @@ else - fi - AC_SUBST(libc_cv_nss_crypt) - -+AC_ARG_ENABLE([systemtap], -+ [AS_HELP_STRING([--enable-systemtap], -+ [enable systemtap static probe points @<:@default=no@:>@])], -+ [systemtap=$enableval], -+ [systemtap=no]) -+if test x$systemtap != xno; then -+ AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl -+ old_CFLAGS="$CFLAGS" -+ CFLAGS="-std=gnu99 $CFLAGS" -+ AC_COMPILE_IFELSE([#include -+void foo (int i, void *p) -+{ -+ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" -+ :: STAP_PROBE_ASM_OPERANDS (2, i, p)); -+}], [libc_cv_sdt=yes], [libc_cv_sdt=no]) -+ CFLAGS="$old_CFLAGS"]) -+ if test $libc_cv_sdt = yes; then -+ AC_DEFINE([USE_STAP_PROBE]) -+ else -+ AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support]) -+ fi -+fi -+ - # The way shlib-versions is used to generate soversions.mk uses a - # fairly simplistic model for name recognition that can't distinguish - # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os diff -Nrup a/csu/Makefile b/csu/Makefile --- a/csu/Makefile 2012-01-01 05:16:32.000000000 -0700 +++ b/csu/Makefile 2012-01-01 20:41:26.635439843 -0700 @@ -606,16 +457,6 @@ diff -Nrup a/elf/Makefile b/elf/Makefile endif before-compile = $(objpfx)trusted-dirs.h -@@ -505,7 +506,8 @@ CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D' - CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) - CFLAGS-cache.c = $(SYSCONF-FLAGS) - --CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1) -+CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ -+ -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld) - - test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names)))) - generated += $(addsuffix .so,$(strip $(modules-names))) diff -Nrup a/elf/dl-close.c b/elf/dl-close.c --- a/elf/dl-close.c 2012-01-01 05:16:32.000000000 -0700 +++ b/elf/dl-close.c 2012-01-01 20:41:26.638439843 -0700 @@ -932,26 +773,6 @@ diff -Nrup a/elf/ldd.bash.in b/elf/ldd.bash.in try_trace "$RTLD" "$file" || result=1 ;; *) -diff -Nrup a/elf/rtld-Rules b/elf/rtld-Rules ---- a/elf/rtld-Rules 2012-01-01 05:16:32.000000000 -0700 -+++ b/elf/rtld-Rules 2012-01-01 20:41:26.642439841 -0700 -@@ -1,7 +1,7 @@ - # Subroutine makefile for compiling libc modules linked into dynamic linker. - - # Copyright (C) 2002,2003,2005,2006,2008,2010,2011 --# Free Software Foundation, Inc. -+# Free Software Foundation, Inc. - # This file is part of the GNU C Library. - - # The GNU C Library is free software; you can redistribute it and/or -@@ -131,6 +131,6 @@ ifdef rtld-depfiles - endif - - # This here is the whole point of all the shenanigans. --rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -+rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld - - endif diff -Nrup a/elf/rtld.c b/elf/rtld.c --- a/elf/rtld.c 2012-01-01 05:16:32.000000000 -0700 +++ b/elf/rtld.c 2012-01-01 20:41:26.643439841 -0700 @@ -1009,15 +830,6 @@ diff -Nrup a/elf/rtld.c b/elf/rtld.c if (! prelinked && rtld_multiple_ref) { /* There was an explicit ref to the dynamic linker as a shared lib. -diff -Nrup a/extra-lib.mk b/extra-lib.mk ---- a/extra-lib.mk 2012-01-01 05:16:32.000000000 -0700 -+++ b/extra-lib.mk 2012-01-01 20:41:26.644439841 -0700 -@@ -101,4 +101,4 @@ ifneq (,$(cpp-srcs-left)) - include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) - endif - --CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -+CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -DIN_LIB=$(lib) diff -Nrup a/include/bits/stdlib-ldbl.h b/include/bits/stdlib-ldbl.h --- a/include/bits/stdlib-ldbl.h 1969-12-31 17:00:00.000000000 -0700 +++ b/include/bits/stdlib-ldbl.h 2012-01-01 20:41:26.644439841 -0700 @@ -1099,150 +911,6 @@ diff -Nrup a/include/link.h b/include/link.h # elif NO_TLS_OFFSET == -1 # define FORCED_DYNAMIC_TLS_OFFSET -2 # else -diff -Nrup a/include/stap-probe.h b/include/stap-probe.h ---- a/include/stap-probe.h 1969-12-31 17:00:00.000000000 -0700 -+++ b/include/stap-probe.h 2012-01-01 20:41:26.646439841 -0700 -@@ -0,0 +1,140 @@ -+/* Macros for defining Systemtap static probe points. -+ Copyright (C) 2011 Free Software Foundation, Inc. -+ This file is part of the GNU C Library. -+ -+ The GNU C Library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Lesser General Public -+ License as published by the Free Software Foundation; either -+ version 2.1 of the License, or (at your option) any later version. -+ -+ The GNU C Library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public -+ License along with the GNU C Library; if not, write to the Free -+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA -+ 02111-1307 USA. */ -+ -+#ifndef _STAP_PROBE_H -+#define _STAP_PROBE_H 1 -+ -+#ifdef USE_STAP_PROBE -+ -+# include -+ -+/* Our code uses one macro LIBC_PROBE (name, n, arg1, ..., argn). -+ -+ Without USE_STAP_PROBE, that does nothing but evaluates all -+ its arguments (to prevent bit rot, unlike e.g. assert). -+ -+ Systemtap's header defines the macros STAP_PROBE (provider, name) and -+ STAP_PROBEn (provider, name, arg1, ..., argn). For "provider" we paste -+ in the IN_LIB name (libc, libpthread, etc.) automagically. */ -+ -+# ifndef NOT_IN_libc -+# define IN_LIB libc -+# elif !defined IN_LIB -+/* This is intentionally defined with extra unquoted commas in it so -+ that macro substitution will bomb out when it is used. We don't -+ just use #error here, so that this header can be included by -+ other headers that use LIBC_PROBE inside their own macros. We -+ only want such headers to fail to compile if those macros are -+ actually used in a context where IN_LIB has not been defined. */ -+# define IN_LIB ,,,missing -DIN_LIB=... -- not extra-lib.mk?,,, -+# endif -+ -+# define LIBC_PROBE(name, n, ...) \ -+ LIBC_PROBE_1 (IN_LIB, name, n, ## __VA_ARGS__) -+ -+# define LIBC_PROBE_1(lib, name, n, ...) \ -+ STAP_PROBE##n (lib, name, ## __VA_ARGS__) -+ -+# define STAP_PROBE0 STAP_PROBE -+ -+# define LIBC_PROBE_ASM(name, template) \ -+ STAP_PROBE_ASM (IN_LIB, name, template) -+ -+# define LIBC_PROBE_ASM_OPERANDS STAP_PROBE_ASM_OPERANDS -+ -+#else /* Not USE_STAP_PROBE. */ -+ -+# ifndef __ASSEMBLER__ -+# define LIBC_PROBE(name, n, ...) DUMMY_PROBE##n (__VA_ARGS__) -+# else -+# define LIBC_PROBE(name, n, ...) /* Nothing. */ -+# endif -+ -+# define LIBC_PROBE_ASM(name, template) /* Nothing. */ -+# define LIBC_PROBE_ASM_OPERANDS(n, ...) /* Nothing. */ -+ -+/* This silliness lets us evaluate all the arguments for each arity -+ of probe. My kingdom for a real macro system. */ -+ -+# define DUMMY_PROBE0() do {} while (0) -+# define DUMMY_PROBE1(a1) do {} while ((void) (a1), 0) -+# define DUMMY_PROBE2(a1, a2) do {} while ((void) (a1), \ -+ (void) (a2), 0) -+# define DUMMY_PROBE3(a1, a2, a3) do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), 0) -+# define DUMMY_PROBE4(a1, a2, a3, a4) do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), 0) -+# define DUMMY_PROBE5(a1, a2, a3, a4, a5) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), 0) -+# define DUMMY_PROBE6(a1, a2, a3, a4, a5, a6) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), 0) -+# define DUMMY_PROBE7(a1, a2, a3, a4, a5, a6, a7) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), 0) -+# define DUMMY_PROBE8(a1, a2, a3, a4, a5, a6, a7, a8) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), \ -+ (void) (a8), 0) -+# define DUMMY_PROBE9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), \ -+ (void) (a8), \ -+ (void) (a9), 0) -+# define DUMMY_PROBE10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \ -+ do {} while ((void) (a1), \ -+ (void) (a2), \ -+ (void) (a3), \ -+ (void) (a4), \ -+ (void) (a5), \ -+ (void) (a6), \ -+ (void) (a7), \ -+ (void) (a8), \ -+ (void) (a9), \ -+ (void) (a10), 0) -+ -+#endif /* USE_STAP_PROBE. */ -+ -+#endif /* stap-probe.h */ diff -Nrup a/include/sys/resource.h b/include/sys/resource.h --- a/include/sys/resource.h 2012-01-01 05:16:32.000000000 -0700 +++ b/include/sys/resource.h 2012-01-01 20:41:26.647439841 -0700 @@ -3272,18 +2940,6 @@ diff -Nrup a/resource/getrlimit.c b/resource/getrlimit.c weak_alias (__getrlimit, getrlimit) stub_warning (getrlimit) -diff -Nrup a/scripts/check-local-headers.sh b/scripts/check-local-headers.sh ---- a/scripts/check-local-headers.sh 2012-01-01 05:16:32.000000000 -0700 -+++ b/scripts/check-local-headers.sh 2012-01-01 20:41:26.683439836 -0700 -@@ -29,7 +29,7 @@ exec ${AWK} -v includedir="$includedir" - BEGIN { - status = 0 - exclude = "^" includedir \ -- "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h)" -+ "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h|sys/sdt(-config)?\\.h))" - } - /^[^ ]/ && $1 ~ /.*:/ { obj = $1 } - { diff -Nrup a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c --- a/stdio-common/vfprintf.c 2012-01-01 05:16:32.000000000 -0700 +++ b/stdio-common/vfprintf.c 2012-01-01 20:41:26.683439836 -0700 @@ -3412,109 +3068,6 @@ diff -Nrup a/sysdeps/i386/Makefile b/sysdeps/i386/Makefile endif ifeq ($(subdir),elf) -diff -Nrup a/sysdeps/i386/__longjmp.S b/sysdeps/i386/__longjmp.S ---- a/sysdeps/i386/__longjmp.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/i386/__longjmp.S 2012-01-01 20:41:26.686439835 -0700 -@@ -1,5 +1,5 @@ - /* longjmp for i386. -- Copyright (C) 1995-1998,2000,2002,2005,2006,2009 -+ Copyright (C) 1995-1998,2000,2002,2005,2006,2009,2011 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - - .text - ENTRY (__longjmp) -@@ -33,6 +34,7 @@ ENTRY (__longjmp) - movl (JB_SP*4)(%eax), %ecx - PTR_DEMANGLE (%edx) - PTR_DEMANGLE (%ecx) -+ LIBC_PROBE (longjmp, 3, 4@%eax, -4@8(%esp), 4@%edx) - cfi_def_cfa(%eax, 0) - cfi_register(%eip, %edx) - cfi_register(%esp, %ecx) -@@ -50,6 +52,7 @@ ENTRY (__longjmp) - cfi_restore(%edi) - cfi_restore(%ebp) - -+ LIBC_PROBE (longjmp_target, 3, 4@%eax, -4@8(%esp), 4@%edx) - movl 8(%esp), %eax /* Second argument is return value. */ - movl %ecx, %esp - #else -@@ -57,12 +60,14 @@ ENTRY (__longjmp) - movl 8(%esp), %eax /* Second argument is return value. */ - /* Save the return address now. */ - movl (JB_PC*4)(%ecx), %edx -+ LIBC_PROBE (longjmp, 3, 4@%ecx, -4@%eax, 4@%edx) - /* Restore registers. */ - movl (JB_BX*4)(%ecx), %ebx - movl (JB_SI*4)(%ecx), %esi - movl (JB_DI*4)(%ecx), %edi - movl (JB_BP*4)(%ecx), %ebp - movl (JB_SP*4)(%ecx), %esp -+ LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%ecx, 4@%edx) - #endif - /* Jump to saved PC. */ - jmp *%edx -diff -Nrup a/sysdeps/i386/bsd-_setjmp.S b/sysdeps/i386/bsd-_setjmp.S ---- a/sysdeps/i386/bsd-_setjmp.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/i386/bsd-_setjmp.S 2012-01-01 20:41:26.686439835 -0700 -@@ -1,5 +1,6 @@ - /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. i386 version. -- Copyright (C) 1994-1997,2000-2002,2005, 2006 Free Software Foundation, Inc. -+ Copyright (C) 1994-1997,2000-2002,2005,2006,2011 -+ Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -25,6 +26,7 @@ - #include - #include "bp-sym.h" - #include "bp-asm.h" -+#include - - #define PARMS LINKAGE /* no space for saved regs */ - #define JMPBUF PARMS -@@ -47,6 +49,7 @@ ENTRY (BP_SYM (_setjmp)) - #endif - movl %ecx, (JB_SP*4)(%edx) - movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */ -+ LIBC_PROBE (setjmp, 3, 4@%edx, -4@$0, 4@%ecx) - #ifdef PTR_MANGLE - PTR_MANGLE (%ecx) - #endif -diff -Nrup a/sysdeps/i386/bsd-setjmp.S b/sysdeps/i386/bsd-setjmp.S ---- a/sysdeps/i386/bsd-setjmp.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/i386/bsd-setjmp.S 2012-01-01 20:41:26.687439834 -0700 -@@ -1,5 +1,6 @@ - /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. i386 version. -- Copyright (C) 1994-1997,2000,2001,2005, 2006 Free Software Foundation, Inc. -+ Copyright (C) 1994-1997,2000,2001,2005,2006,2011 -+ Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -25,6 +26,7 @@ - #include - #include "bp-sym.h" - #include "bp-asm.h" -+#include - - #define PARMS LINKAGE /* no space for saved regs */ - #define JMPBUF PARMS -@@ -49,6 +51,7 @@ ENTRY (BP_SYM (setjmp)) - #endif - movl %ecx, (JB_SP*4)(%eax) - movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */ -+ LIBC_PROBE (setjmp, 3, 4@%eax, -4@$1, 4@%ecx) - #ifdef PTR_MANGLE - PTR_MANGLE (%ecx) - #endif diff -Nrup a/sysdeps/i386/i686/Makefile b/sysdeps/i386/i686/Makefile --- a/sysdeps/i386/i686/Makefile 2012-01-01 05:16:32.000000000 -0700 +++ b/sysdeps/i386/i686/Makefile 2012-01-01 20:41:26.687439834 -0700 @@ -3538,32 +3091,6 @@ diff -Nrup a/sysdeps/i386/i686/Makefile b/sysdeps/i386/i686/Makefile -ASFLAGS-.ob += -Wa,-mtune=i686 -ASFLAGS-.oS += -Wa,-mtune=i686 -endif -diff -Nrup a/sysdeps/i386/setjmp.S b/sysdeps/i386/setjmp.S ---- a/sysdeps/i386/setjmp.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/i386/setjmp.S 2012-01-01 20:41:26.687439834 -0700 -@@ -1,5 +1,5 @@ - /* setjmp for i386. -- Copyright (C) 1995,1996,1997,2000,2001,2005,2006 -+ Copyright (C) 1995,1996,1997,2000,2001,2005,2006,2011 - Free Software Foundation, Inc. - This file is part of the GNU C Library. - -@@ -23,6 +23,7 @@ - #include - #include "bp-sym.h" - #include "bp-asm.h" -+#include - - #define PARMS LINKAGE /* no space for saved regs */ - #define JMPBUF PARMS -@@ -44,6 +45,7 @@ ENTRY (BP_SYM (__sigsetjmp)) - #endif - movl %ecx, (JB_SP*4)(%eax) - movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */ -+ LIBC_PROBE (setjmp, 3, 4@%eax, -4@SIGMSK(%esp), 4@%ecx) - #ifdef PTR_MANGLE - PTR_MANGLE (%ecx) - #endif diff -Nrup a/sysdeps/ia64/Makefile b/sysdeps/ia64/Makefile --- a/sysdeps/ia64/Makefile 2012-01-01 05:16:32.000000000 -0700 +++ b/sysdeps/ia64/Makefile 2012-01-01 20:41:26.688439833 -0700 @@ -4305,42 +3832,6 @@ diff -Nrup a/sysdeps/unix/sysv/linux/futimesat.c b/sysdeps/unix/sysv/linux/futim { size_t filelen = strlen (file); if (__builtin_expect (filelen == 0, 0)) -diff -Nrup a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S ---- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S 2012-01-01 20:41:26.699439832 -0700 -@@ -1,4 +1,5 @@ --/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc. -+/* Copyright (C) 2001,2004,2005,2006,2009,2011 -+ Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -19,6 +20,7 @@ - #include - #include - #include -+#include - - - .section .rodata.str1.1,"aMS",@progbits,1 -@@ -79,7 +81,9 @@ ENTRY (____longjmp_chk) - cfi_adjust_cfa_offset(-12) - movl 4(%esp), %ecx - --.Lok: /* We add unwind information for the target here. */ -+.Lok: -+ LIBC_PROBE (longjmp, 3, 4@%ecx, -4@8(%esp), 4@%edx) -+ /* We add unwind information for the target here. */ - cfi_def_cfa(%ecx, 0) - cfi_register(%eip, %edx) - cfi_register(%esp, %edi) -@@ -102,5 +106,6 @@ ENTRY (____longjmp_chk) - cfi_restore(%ebp) - - /* Jump to saved PC. */ -+ LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%eax, 4@%edx) - jmp *%edx - END (____longjmp_chk) diff -Nrup a/sysdeps/unix/sysv/linux/i386/dl-cache.h b/sysdeps/unix/sysv/linux/i386/dl-cache.h --- a/sysdeps/unix/sysv/linux/i386/dl-cache.h 1969-12-31 17:00:00.000000000 -0700 +++ b/sysdeps/unix/sysv/linux/i386/dl-cache.h 2012-01-01 20:41:26.700439831 -0700 @@ -4560,93 +4051,6 @@ diff -Nrup a/sysdeps/unix/sysv/linux/tcsetattr.c b/sysdeps/unix/sysv/linux/tcset + return retval; } libc_hidden_def (tcsetattr) -diff -Nrup a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S ---- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S 2012-01-01 20:41:26.703439831 -0700 -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - - .section .rodata.str1.1,"aMS",@progbits,1 - .type longjmp_msg,@object -@@ -94,7 +95,9 @@ ENTRY(____longjmp_chk) - movl %ebx, %esi - cfi_restore (%rsi) - --.Lok: /* We add unwind information for the target here. */ -+.Lok: -+ LIBC_PROBE (longjmp, 3, 8@%rdi, -4@%esi, 8@%rdx) -+ /* We add unwind information for the target here. */ - cfi_def_cfa(%rdi, 0) - cfi_register(%rsp,%r8) - cfi_register(%rbp,%r9) -@@ -113,5 +116,6 @@ ENTRY(____longjmp_chk) - movl %esi, %eax - movq %r8,%rsp - movq %r9,%rbp -+ LIBC_PROBE (longjmp_target, 3, 8@%rdi, -4@%eax, 8@%rdx) - jmpq *%rdx - END (____longjmp_chk) -diff -Nrup a/sysdeps/x86_64/__longjmp.S b/sysdeps/x86_64/__longjmp.S ---- a/sysdeps/x86_64/__longjmp.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/x86_64/__longjmp.S 2012-01-01 20:41:26.703439831 -0700 -@@ -1,4 +1,4 @@ --/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc. -+/* Copyright (C) 2001,2004,2005,2006,2009,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - - /* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. -@@ -34,6 +35,7 @@ ENTRY(__longjmp) - PTR_DEMANGLE (%r9) - PTR_DEMANGLE (%rdx) - #endif -+ LIBC_PROBE (longjmp, 3, 8@%rdi, -4@%esi, 8@%rdx) - /* We add unwind information for the target here. */ - cfi_def_cfa(%rdi, 0) - cfi_register(%rsp,%r8) -@@ -53,5 +55,6 @@ ENTRY(__longjmp) - mov %esi, %eax - movq %r8,%rsp - movq %r9,%rbp -+ LIBC_PROBE (longjmp_target, 3, 8@%rdi, -4@%eax, 8@%rdx) - jmpq *%rdx - END (__longjmp) -diff -Nrup a/sysdeps/x86_64/setjmp.S b/sysdeps/x86_64/setjmp.S ---- a/sysdeps/x86_64/setjmp.S 2012-01-01 05:16:32.000000000 -0700 -+++ b/sysdeps/x86_64/setjmp.S 2012-01-01 20:41:26.704439831 -0700 -@@ -1,5 +1,5 @@ - /* setjmp for x86-64. -- Copyright (C) 2001, 2003, 2005, 2006 Free Software Foundation, Inc. -+ Copyright (C) 2001,2003,2005,2006,2011 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - - ENTRY (__sigsetjmp) - /* Save registers. */ -@@ -41,6 +42,7 @@ ENTRY (__sigsetjmp) - #endif - movq %rdx, (JB_RSP*8)(%rdi) - movq (%rsp), %rax /* Save PC we are returning to now. */ -+ LIBC_PROBE (setjmp, 3, 8@%rdi, -4@%esi, 8@%rax) - #ifdef PTR_MANGLE - PTR_MANGLE (%rax) - #endif diff -Nrup a/timezone/zic.c b/timezone/zic.c --- a/timezone/zic.c 2012-01-01 05:16:32.000000000 -0700 +++ b/timezone/zic.c 2012-01-01 20:41:26.705439831 -0700 diff --git a/glibc-stap.patch b/glibc-stap.patch new file mode 100644 index 0000000..b3ff9fa --- /dev/null +++ b/glibc-stap.patch @@ -0,0 +1,567 @@ +diff -Nrup a/scripts/check-local-headers.sh b/scripts/check-local-headers.sh +--- a/scripts/check-local-headers.sh 2012-01-01 05:16:32.000000000 -0700 ++++ b/scripts/check-local-headers.sh 2012-01-01 20:41:26.683439836 -0700 +@@ -29,7 +29,7 @@ exec ${AWK} -v includedir="$includedir" + BEGIN { + status = 0 + exclude = "^" includedir \ +- "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h)" ++ "/(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h|sys/sdt(-config)?\\.h))" + } + /^[^ ]/ && $1 ~ /.*:/ { obj = $1 } + { +diff -Nrup a/sysdeps/i386/__longjmp.S b/sysdeps/i386/__longjmp.S +--- a/sysdeps/i386/__longjmp.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/i386/__longjmp.S 2012-01-01 20:41:26.686439835 -0700 +@@ -1,5 +1,5 @@ + /* longjmp for i386. +- Copyright (C) 1995-1998,2000,2002,2005,2006,2009 ++ Copyright (C) 1995-1998,2000,2002,2005,2006,2009,2011 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + + .text + ENTRY (__longjmp) +@@ -33,6 +34,7 @@ ENTRY (__longjmp) + movl (JB_SP*4)(%eax), %ecx + PTR_DEMANGLE (%edx) + PTR_DEMANGLE (%ecx) ++ LIBC_PROBE (longjmp, 3, 4@%eax, -4@8(%esp), 4@%edx) + cfi_def_cfa(%eax, 0) + cfi_register(%eip, %edx) + cfi_register(%esp, %ecx) +@@ -50,6 +52,7 @@ ENTRY (__longjmp) + cfi_restore(%edi) + cfi_restore(%ebp) + ++ LIBC_PROBE (longjmp_target, 3, 4@%eax, -4@8(%esp), 4@%edx) + movl 8(%esp), %eax /* Second argument is return value. */ + movl %ecx, %esp + #else +@@ -57,12 +60,14 @@ ENTRY (__longjmp) + movl 8(%esp), %eax /* Second argument is return value. */ + /* Save the return address now. */ + movl (JB_PC*4)(%ecx), %edx ++ LIBC_PROBE (longjmp, 3, 4@%ecx, -4@%eax, 4@%edx) + /* Restore registers. */ + movl (JB_BX*4)(%ecx), %ebx + movl (JB_SI*4)(%ecx), %esi + movl (JB_DI*4)(%ecx), %edi + movl (JB_BP*4)(%ecx), %ebp + movl (JB_SP*4)(%ecx), %esp ++ LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%ecx, 4@%edx) + #endif + /* Jump to saved PC. */ + jmp *%edx +diff -Nrup a/sysdeps/i386/bsd-_setjmp.S b/sysdeps/i386/bsd-_setjmp.S +--- a/sysdeps/i386/bsd-_setjmp.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/i386/bsd-_setjmp.S 2012-01-01 20:41:26.686439835 -0700 +@@ -1,5 +1,6 @@ + /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. i386 version. +- Copyright (C) 1994-1997,2000-2002,2005, 2006 Free Software Foundation, Inc. ++ Copyright (C) 1994-1997,2000-2002,2005,2006,2011 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -25,6 +26,7 @@ + #include + #include "bp-sym.h" + #include "bp-asm.h" ++#include + + #define PARMS LINKAGE /* no space for saved regs */ + #define JMPBUF PARMS +@@ -47,6 +49,7 @@ ENTRY (BP_SYM (_setjmp)) + #endif + movl %ecx, (JB_SP*4)(%edx) + movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */ ++ LIBC_PROBE (setjmp, 3, 4@%edx, -4@$0, 4@%ecx) + #ifdef PTR_MANGLE + PTR_MANGLE (%ecx) + #endif +diff -Nrup a/sysdeps/i386/bsd-setjmp.S b/sysdeps/i386/bsd-setjmp.S +--- a/sysdeps/i386/bsd-setjmp.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/i386/bsd-setjmp.S 2012-01-01 20:41:26.687439834 -0700 +@@ -1,5 +1,6 @@ + /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. i386 version. +- Copyright (C) 1994-1997,2000,2001,2005, 2006 Free Software Foundation, Inc. ++ Copyright (C) 1994-1997,2000,2001,2005,2006,2011 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -25,6 +26,7 @@ + #include + #include "bp-sym.h" + #include "bp-asm.h" ++#include + + #define PARMS LINKAGE /* no space for saved regs */ + #define JMPBUF PARMS +@@ -49,6 +51,7 @@ ENTRY (BP_SYM (setjmp)) + #endif + movl %ecx, (JB_SP*4)(%eax) + movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */ ++ LIBC_PROBE (setjmp, 3, 4@%eax, -4@$1, 4@%ecx) + #ifdef PTR_MANGLE + PTR_MANGLE (%ecx) + #endif +diff -Nrup a/sysdeps/i386/setjmp.S b/sysdeps/i386/setjmp.S +--- a/sysdeps/i386/setjmp.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/i386/setjmp.S 2012-01-01 20:41:26.687439834 -0700 +@@ -1,5 +1,5 @@ + /* setjmp for i386. +- Copyright (C) 1995,1996,1997,2000,2001,2005,2006 ++ Copyright (C) 1995,1996,1997,2000,2001,2005,2006,2011 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + +@@ -23,6 +23,7 @@ + #include + #include "bp-sym.h" + #include "bp-asm.h" ++#include + + #define PARMS LINKAGE /* no space for saved regs */ + #define JMPBUF PARMS +@@ -44,6 +45,7 @@ ENTRY (BP_SYM (__sigsetjmp)) + #endif + movl %ecx, (JB_SP*4)(%eax) + movl PCOFF(%esp), %ecx /* Save PC we are returning to now. */ ++ LIBC_PROBE (setjmp, 3, 4@%eax, -4@SIGMSK(%esp), 4@%ecx) + #ifdef PTR_MANGLE + PTR_MANGLE (%ecx) + #endif +diff -Nrup a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S +--- a/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/unix/sysv/linux/i386/____longjmp_chk.S 2012-01-01 20:41:26.699439832 -0700 +@@ -1,4 +1,5 @@ +-/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc. ++/* Copyright (C) 2001,2004,2005,2006,2009,2011 ++ Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -19,6 +20,7 @@ + #include + #include + #include ++#include + + + .section .rodata.str1.1,"aMS",@progbits,1 +@@ -79,7 +81,9 @@ ENTRY (____longjmp_chk) + cfi_adjust_cfa_offset(-12) + movl 4(%esp), %ecx + +-.Lok: /* We add unwind information for the target here. */ ++.Lok: ++ LIBC_PROBE (longjmp, 3, 4@%ecx, -4@8(%esp), 4@%edx) ++ /* We add unwind information for the target here. */ + cfi_def_cfa(%ecx, 0) + cfi_register(%eip, %edx) + cfi_register(%esp, %edi) +@@ -102,5 +106,6 @@ ENTRY (____longjmp_chk) + cfi_restore(%ebp) + + /* Jump to saved PC. */ ++ LIBC_PROBE (longjmp_target, 3, 4@%ecx, -4@%eax, 4@%edx) + jmp *%edx + END (____longjmp_chk) +diff -Nrup a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S +--- a/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/unix/sysv/linux/x86_64/____longjmp_chk.S 2012-01-01 20:41:26.703439831 -0700 +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + .section .rodata.str1.1,"aMS",@progbits,1 + .type longjmp_msg,@object +@@ -94,7 +95,9 @@ ENTRY(____longjmp_chk) + movl %ebx, %esi + cfi_restore (%rsi) + +-.Lok: /* We add unwind information for the target here. */ ++.Lok: ++ LIBC_PROBE (longjmp, 3, 8@%rdi, -4@%esi, 8@%rdx) ++ /* We add unwind information for the target here. */ + cfi_def_cfa(%rdi, 0) + cfi_register(%rsp,%r8) + cfi_register(%rbp,%r9) +@@ -113,5 +116,6 @@ ENTRY(____longjmp_chk) + movl %esi, %eax + movq %r8,%rsp + movq %r9,%rbp ++ LIBC_PROBE (longjmp_target, 3, 8@%rdi, -4@%eax, 8@%rdx) + jmpq *%rdx + END (____longjmp_chk) +diff -Nrup a/sysdeps/x86_64/__longjmp.S b/sysdeps/x86_64/__longjmp.S +--- a/sysdeps/x86_64/__longjmp.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/x86_64/__longjmp.S 2012-01-01 20:41:26.703439831 -0700 +@@ -1,4 +1,4 @@ +-/* Copyright (C) 2001,2004,2005,2006,2009 Free Software Foundation, Inc. ++/* Copyright (C) 2001,2004,2005,2006,2009,2011 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + /* Jump to the position specified by ENV, causing the + setjmp call there to return VAL, or 1 if VAL is 0. +@@ -34,6 +35,7 @@ ENTRY(__longjmp) + PTR_DEMANGLE (%r9) + PTR_DEMANGLE (%rdx) + #endif ++ LIBC_PROBE (longjmp, 3, 8@%rdi, -4@%esi, 8@%rdx) + /* We add unwind information for the target here. */ + cfi_def_cfa(%rdi, 0) + cfi_register(%rsp,%r8) +@@ -53,5 +55,6 @@ ENTRY(__longjmp) + mov %esi, %eax + movq %r8,%rsp + movq %r9,%rbp ++ LIBC_PROBE (longjmp_target, 3, 8@%rdi, -4@%eax, 8@%rdx) + jmpq *%rdx + END (__longjmp) +diff -Nrup a/sysdeps/x86_64/setjmp.S b/sysdeps/x86_64/setjmp.S +--- a/sysdeps/x86_64/setjmp.S 2012-01-01 05:16:32.000000000 -0700 ++++ b/sysdeps/x86_64/setjmp.S 2012-01-01 20:41:26.704439831 -0700 +@@ -1,5 +1,5 @@ + /* setjmp for x86-64. +- Copyright (C) 2001, 2003, 2005, 2006 Free Software Foundation, Inc. ++ Copyright (C) 2001,2003,2005,2006,2011 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + ENTRY (__sigsetjmp) + /* Save registers. */ +@@ -41,6 +42,7 @@ ENTRY (__sigsetjmp) + #endif + movq %rdx, (JB_RSP*8)(%rdi) + movq (%rsp), %rax /* Save PC we are returning to now. */ ++ LIBC_PROBE (setjmp, 3, 8@%rdi, -4@%esi, 8@%rax) + #ifdef PTR_MANGLE + PTR_MANGLE (%rax) + #endif +diff -Nrup a/include/stap-probe.h b/include/stap-probe.h +--- a/include/stap-probe.h 1969-12-31 17:00:00.000000000 -0700 ++++ b/include/stap-probe.h 2012-01-01 20:41:26.646439841 -0700 +@@ -0,0 +1,140 @@ ++/* Macros for defining Systemtap static probe points. ++ Copyright (C) 2011 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#ifndef _STAP_PROBE_H ++#define _STAP_PROBE_H 1 ++ ++#ifdef USE_STAP_PROBE ++ ++# include ++ ++/* Our code uses one macro LIBC_PROBE (name, n, arg1, ..., argn). ++ ++ Without USE_STAP_PROBE, that does nothing but evaluates all ++ its arguments (to prevent bit rot, unlike e.g. assert). ++ ++ Systemtap's header defines the macros STAP_PROBE (provider, name) and ++ STAP_PROBEn (provider, name, arg1, ..., argn). For "provider" we paste ++ in the IN_LIB name (libc, libpthread, etc.) automagically. */ ++ ++# ifndef NOT_IN_libc ++# define IN_LIB libc ++# elif !defined IN_LIB ++/* This is intentionally defined with extra unquoted commas in it so ++ that macro substitution will bomb out when it is used. We don't ++ just use #error here, so that this header can be included by ++ other headers that use LIBC_PROBE inside their own macros. We ++ only want such headers to fail to compile if those macros are ++ actually used in a context where IN_LIB has not been defined. */ ++# define IN_LIB ,,,missing -DIN_LIB=... -- not extra-lib.mk?,,, ++# endif ++ ++# define LIBC_PROBE(name, n, ...) \ ++ LIBC_PROBE_1 (IN_LIB, name, n, ## __VA_ARGS__) ++ ++# define LIBC_PROBE_1(lib, name, n, ...) \ ++ STAP_PROBE##n (lib, name, ## __VA_ARGS__) ++ ++# define STAP_PROBE0 STAP_PROBE ++ ++# define LIBC_PROBE_ASM(name, template) \ ++ STAP_PROBE_ASM (IN_LIB, name, template) ++ ++# define LIBC_PROBE_ASM_OPERANDS STAP_PROBE_ASM_OPERANDS ++ ++#else /* Not USE_STAP_PROBE. */ ++ ++# ifndef __ASSEMBLER__ ++# define LIBC_PROBE(name, n, ...) DUMMY_PROBE##n (__VA_ARGS__) ++# else ++# define LIBC_PROBE(name, n, ...) /* Nothing. */ ++# endif ++ ++# define LIBC_PROBE_ASM(name, template) /* Nothing. */ ++# define LIBC_PROBE_ASM_OPERANDS(n, ...) /* Nothing. */ ++ ++/* This silliness lets us evaluate all the arguments for each arity ++ of probe. My kingdom for a real macro system. */ ++ ++# define DUMMY_PROBE0() do {} while (0) ++# define DUMMY_PROBE1(a1) do {} while ((void) (a1), 0) ++# define DUMMY_PROBE2(a1, a2) do {} while ((void) (a1), \ ++ (void) (a2), 0) ++# define DUMMY_PROBE3(a1, a2, a3) do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), 0) ++# define DUMMY_PROBE4(a1, a2, a3, a4) do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), 0) ++# define DUMMY_PROBE5(a1, a2, a3, a4, a5) \ ++ do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), \ ++ (void) (a5), 0) ++# define DUMMY_PROBE6(a1, a2, a3, a4, a5, a6) \ ++ do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), \ ++ (void) (a5), \ ++ (void) (a6), 0) ++# define DUMMY_PROBE7(a1, a2, a3, a4, a5, a6, a7) \ ++ do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), \ ++ (void) (a5), \ ++ (void) (a6), \ ++ (void) (a7), 0) ++# define DUMMY_PROBE8(a1, a2, a3, a4, a5, a6, a7, a8) \ ++ do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), \ ++ (void) (a5), \ ++ (void) (a6), \ ++ (void) (a7), \ ++ (void) (a8), 0) ++# define DUMMY_PROBE9(a1, a2, a3, a4, a5, a6, a7, a8, a9) \ ++ do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), \ ++ (void) (a5), \ ++ (void) (a6), \ ++ (void) (a7), \ ++ (void) (a8), \ ++ (void) (a9), 0) ++# define DUMMY_PROBE10(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) \ ++ do {} while ((void) (a1), \ ++ (void) (a2), \ ++ (void) (a3), \ ++ (void) (a4), \ ++ (void) (a5), \ ++ (void) (a6), \ ++ (void) (a7), \ ++ (void) (a8), \ ++ (void) (a9), \ ++ (void) (a10), 0) ++ ++#endif /* USE_STAP_PROBE. */ ++ ++#endif /* stap-probe.h */ +diff -Nrup a/config.h.in b/config.h.in +--- a/config.h.in 2012-01-01 05:16:32.000000000 -0700 ++++ b/config.h.in 2012-01-01 20:41:26.632439843 -0700 +@@ -187,6 +187,9 @@ + /* Define if `.ctors' and `.dtors' sections shouldn't be used. */ + #undef NO_CTORS_DTORS_SECTIONS + ++/* Define if Systemtap probes should be defined. */ ++#undef USE_STAP_PROBE ++ + /* + */ + +diff -Nrup a/configure b/configure +--- a/configure 2012-01-01 20:40:50.423446105 -0700 ++++ b/configure 2012-01-01 20:41:26.634439843 -0700 +@@ -791,6 +791,7 @@ enable_kernel + enable_all_warnings + enable_multi_arch + enable_nss_crypt ++enable_systemtap + with_cpu + ' + ac_precious_vars='build_alias +@@ -1450,6 +1451,7 @@ Optional Features: + --enable-multi-arch enable single DSO with optimizations for multiple + architectures + --enable-nss-crypt enable libcrypt to use nss ++ --enable-systemtap enable systemtap static probe points [default=no] + + Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] +@@ -3804,6 +3806,51 @@ else + fi + + ++# Check whether --enable-systemtap was given. ++if test "${enable_systemtap+set}" = set; then : ++ enableval=$enable_systemtap; systemtap=$enableval ++else ++ systemtap=no ++fi ++ ++if test x$systemtap != xno; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for systemtap static probe support" >&5 ++$as_echo_n "checking for systemtap static probe support... " >&6; } ++if test "${libc_cv_sdt+set}" = set; then : ++ $as_echo_n "(cached) " >&6 ++else ++ old_CFLAGS="$CFLAGS" ++ CFLAGS="-std=gnu99 $CFLAGS" ++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++#include ++void foo (int i, void *p) ++{ ++ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" ++ :: STAP_PROBE_ASM_OPERANDS (2, i, p)); ++} ++_ACEOF ++if ac_fn_c_try_compile "$LINENO"; then : ++ libc_cv_sdt=yes ++else ++ libc_cv_sdt=no ++fi ++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ++ CFLAGS="$old_CFLAGS" ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_sdt" >&5 ++$as_echo "$libc_cv_sdt" >&6; } ++ if test $libc_cv_sdt = yes; then ++ $as_echo "#define USE_STAP_PROBE 1" >>confdefs.h ++ ++ else ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "systemtap support needs sys/sdt.h with asm support ++See \`config.log' for more details" "$LINENO" 5; } ++ fi ++fi ++ + # The way shlib-versions is used to generate soversions.mk uses a + # fairly simplistic model for name recognition that can't distinguish + # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os +diff -Nrup a/configure.in b/configure.in +--- a/configure.in 2012-01-01 05:16:32.000000000 -0700 ++++ b/configure.in 2012-01-01 20:41:26.635439843 -0700 +@@ -290,6 +290,29 @@ else + fi + AC_SUBST(libc_cv_nss_crypt) + ++AC_ARG_ENABLE([systemtap], ++ [AS_HELP_STRING([--enable-systemtap], ++ [enable systemtap static probe points @<:@default=no@:>@])], ++ [systemtap=$enableval], ++ [systemtap=no]) ++if test x$systemtap != xno; then ++ AC_CACHE_CHECK([for systemtap static probe support], libc_cv_sdt, [dnl ++ old_CFLAGS="$CFLAGS" ++ CFLAGS="-std=gnu99 $CFLAGS" ++ AC_COMPILE_IFELSE([#include ++void foo (int i, void *p) ++{ ++ asm ("" STAP_PROBE_ASM (foo, bar, STAP_PROBE_ASM_TEMPLATE (2)) "" ++ :: STAP_PROBE_ASM_OPERANDS (2, i, p)); ++}], [libc_cv_sdt=yes], [libc_cv_sdt=no]) ++ CFLAGS="$old_CFLAGS"]) ++ if test $libc_cv_sdt = yes; then ++ AC_DEFINE([USE_STAP_PROBE]) ++ else ++ AC_MSG_FAILURE([systemtap support needs sys/sdt.h with asm support]) ++ fi ++fi ++ + # The way shlib-versions is used to generate soversions.mk uses a + # fairly simplistic model for name recognition that can't distinguish + # i486-pc-linux-gnu fully from i486-pc-gnu. So we mutate a $host_os +diff -Nrup a/extra-lib.mk b/extra-lib.mk +--- a/extra-lib.mk 2012-01-01 05:16:32.000000000 -0700 ++++ b/extra-lib.mk 2012-01-01 20:41:26.644439841 -0700 +@@ -101,4 +101,4 @@ ifneq (,$(cpp-srcs-left)) + include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + endif + +-CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 ++CPPFLAGS-$(lib) := -DNOT_IN_libc=1 -DIS_IN_$(lib)=1 -DIN_LIB=$(lib) +diff -Nrup a/elf/Makefile b/elf/Makefile +--- a/elf/Makefile 2012-01-01 05:16:32.000000000 -0700 ++++ b/elf/Makefile 2012-01-01 20:41:26.637439843 -0700 +@@ -505,7 +506,8 @@ CFLAGS-ldconfig.c = $(SYSCONF-FLAGS) -D' + CFLAGS-dl-cache.c = $(SYSCONF-FLAGS) + CFLAGS-cache.c = $(SYSCONF-FLAGS) + +-CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),-DNOT_IN_libc=1 -DIS_IN_rtld=1) ++CPPFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\ ++ -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld) + + test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(strip $(modules-names)))) + generated += $(addsuffix .so,$(strip $(modules-names))) +diff -Nrup a/elf/rtld-Rules b/elf/rtld-Rules +--- a/elf/rtld-Rules 2012-01-01 05:16:32.000000000 -0700 ++++ b/elf/rtld-Rules 2012-01-01 20:41:26.642439841 -0700 +@@ -1,7 +1,7 @@ + # Subroutine makefile for compiling libc modules linked into dynamic linker. + + # Copyright (C) 2002,2003,2005,2006,2008,2010,2011 +-# Free Software Foundation, Inc. ++# Free Software Foundation, Inc. + # This file is part of the GNU C Library. + + # The GNU C Library is free software; you can redistribute it and/or +@@ -131,6 +131,6 @@ ifdef rtld-depfiles + endif + + # This here is the whole point of all the shenanigans. +-rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 ++rtld-CPPFLAGS := -DNOT_IN_libc=1 -DIS_IN_rtld=1 -DIN_LIB=rtld + + endif diff --git a/glibc.spec b/glibc.spec index c9aaae5..ecbd72b 100644 --- a/glibc.spec +++ b/glibc.spec @@ -41,23 +41,24 @@ Source0: %{?glibc_release_url}%{glibcsrcdir}.tar.gz Source1: %{?glibc_release_url}%{glibcportsdir}.tar.gz Source2: %{glibcsrcdir}-fedora.tar.gz Patch0: %{name}-fedora.patch -Patch1: %{name}-ia64-lib64.patch +Patch1: %{name}-stap.patch +Patch2: %{name}-ia64-lib64.patch # Uli wants to see this undergo more analyis (what happens when thread B calls into malloc when # thread A has unlocked on the error path # There's an alternate approach using mmap after detecting an error that needs discussion -Patch2: %{name}-rh757881.patch +Patch3: %{name}-rh757881.patch # Sent upstream, awaiting responses -Patch3: %{name}-rh740506.patch +Patch4: %{name}-rh740506.patch # Not sure of upstream status -Patch4: %{name}-rh730856.patch +Patch5: %{name}-rh730856.patch # Reverting an upstream patch. I don't think this has been discussed upstream yet. # Caused a variety of problems for Fedora & Debian -Patch5: %{name}-rh769421.patch -Patch6: %{name}-rh729661.patch -Patch7: %{name}-rh446078.patch -Patch8: %{name}-rh454629.patch -Patch9: %{name}-rh784402.patch -Patch10: %{name}-rh622499.patch +Patch6: %{name}-rh769421.patch +Patch7: %{name}-rh729661.patch +Patch8: %{name}-rh446078.patch +Patch9: %{name}-rh454629.patch +Patch10: %{name}-rh784402.patch +Patch11: %{name}-rh622499.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Obsoletes: glibc-profile < 2.4 @@ -272,12 +273,12 @@ package or when debugging this package. rm -rf %{glibcportsdir} %setup -q -n %{glibcsrcdir} -b1 -b2 %patch0 -E -p1 +%patch1 -E -p1 %ifarch ia64 %if "%{_lib}" == "lib64" -%patch1 -p1 -%endif -%endif %patch2 -p1 +%endif +%endif %patch3 -p1 %patch4 -p1 %patch5 -p1 @@ -286,6 +287,7 @@ rm -rf %{glibcportsdir} %patch8 -p1 %patch9 -p1 %patch10 -p1 +%patch11 -p1 # A lot of programs still misuse memcpy when they have to use # memmove. The memcpy implementation below is not tolerant at