This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.26-574-ga4777c4
- From: hjl at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 14 Oct 2017 20:29:35 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.26-574-ga4777c4
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via a4777c46af89649f2282c1703e8117ccd058d719 (commit)
from bc3821bb3b19646311d36c82a13b4ce5afea3508 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=a4777c46af89649f2282c1703e8117ccd058d719
commit a4777c46af89649f2282c1703e8117ccd058d719
Author: H.J. Lu <hjl.tools@gmail.com>
Date: Sat Oct 14 12:58:40 2017 -0700
Add a test for profiling static executable
The function, main, is added to profiling output of static executable
which must link against gcrt1.o.
* Makeconfig (+link-static-before-libc): Use the first of
$(CRT-$(@F)) and $(csu-objpfx)$(static-start-installed-name).
* gmon/Makefile (tests): Add tst-gmon-static.
(tests-static): Likewise.
(CFLAGS-tst-gmon-static.c): New.
(CRT-tst-gmon-static): Likewise.
(DEFAULT-LDFLAGS-tst-gmon-static): Likewise.
(tst-gmon-static-ENV): Likewise.
(tests-special): Likewise.
($(objpfx)tst-gmon-static.out): Likewise.
(clean-tst-gmon-static-data): Likewise.
($(objpfx)tst-gmon-static-gprof.out): Likewise.
* gmon/tst-gmon-static-gprof.sh: New file.
* gmon/tst-gmon-static.c: Likewise.
diff --git a/ChangeLog b/ChangeLog
index 3c8c45e..eed7450 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2017-10-14 H.J. Lu <hongjiu.lu@intel.com>
+
+ * Makeconfig (+link-static-before-libc): Use the first of
+ $(CRT-$(@F)) and $(csu-objpfx)$(static-start-installed-name).
+ * gmon/Makefile (tests): Add tst-gmon-static.
+ (tests-static): Likewise.
+ (CFLAGS-tst-gmon-static.c): New.
+ (CRT-tst-gmon-static): Likewise.
+ (DEFAULT-LDFLAGS-tst-gmon-static): Likewise.
+ (tst-gmon-static-ENV): Likewise.
+ (tests-special): Likewise.
+ ($(objpfx)tst-gmon-static.out): Likewise.
+ (clean-tst-gmon-static-data): Likewise.
+ ($(objpfx)tst-gmon-static-gprof.out): Likewise.
+ * gmon/tst-gmon-static-gprof.sh: New file.
+ * gmon/tst-gmon-static.c: Likewise.
+
2017-10-13 Carlos O'Donell <carlos@redhat.com>
[BZ #22295]
diff --git a/Makeconfig b/Makeconfig
index 5ff6f2e..1346109 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -422,7 +422,7 @@ ifndef +link-static
+link-static-before-libc = $(CC) -nostdlib -nostartfiles -static -o $@ \
$(DEFAULT-LDFLAGS-$(@F)) \
$(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
- $(addprefix $(csu-objpfx),$(static-start-installed-name)) \
+ $(firstword $(CRT-$(@F)) $(csu-objpfx)$(static-start-installed-name)) \
$(+preinit) $(+prectorT) \
$(filter-out $(addprefix $(csu-objpfx),start.o \
$(start-installed-name))\
diff --git a/gmon/Makefile b/gmon/Makefile
index 2cd077d..89ab3fc 100644
--- a/gmon/Makefile
+++ b/gmon/Makefile
@@ -33,6 +33,9 @@ tests-static += tst-profile-static
LDFLAGS-tst-profile-static = -profile
endif
+tests += tst-gmon-static
+tests-static += tst-gmon-static
+
ifeq (yesyes,$(have-fpie)$(build-shared))
tests += tst-gmon-pie
tests-pie += tst-gmon-pie
@@ -49,6 +52,14 @@ ifeq ($(run-built-tests),yes)
tests-special += $(objpfx)tst-gmon-gprof.out
endif
+CFLAGS-tst-gmon-static.c := $(PIE-ccflag) -fno-omit-frame-pointer -pg
+CRT-tst-gmon-static := $(csu-objpfx)gcrt1.o
+DEFAULT-LDFLAGS-tst-gmon-static = $(no-pie-ldflag)
+tst-gmon-static-ENV := GMON_OUT_PREFIX=$(objpfx)tst-gmon-static.data
+ifeq ($(run-built-tests),yes)
+tests-special += $(objpfx)tst-gmon-static-gprof.out
+endif
+
CFLAGS-tst-gmon-pie.c := $(PIE-ccflag) -fno-omit-frame-pointer -pg
CRT-tst-gmon-pie := $(csu-objpfx)gcrt1.o
tst-gmon-pie-ENV := GMON_OUT_PREFIX=$(objpfx)tst-gmon-pie.data
@@ -83,6 +94,16 @@ $(objpfx)tst-gmon-gprof.out: tst-gmon-gprof.sh $(objpfx)tst-gmon.out
$(SHELL) $< $(GPROF) $(objpfx)tst-gmon $(objpfx)tst-gmon.data.* > $@; \
$(evaluate-test)
+$(objpfx)tst-gmon-static.out: clean-tst-gmon-static-data
+clean-tst-gmon-static-data:
+ rm -f $(objpfx)tst-gmon-static.data.*
+
+$(objpfx)tst-gmon-static-gprof.out: tst-gmon-static-gprof.sh \
+ $(objpfx)tst-gmon-static.out
+ $(SHELL) $< $(GPROF) $(objpfx)tst-gmon-static \
+ $(objpfx)tst-gmon-static.data.* > $@; \
+ $(evaluate-test)
+
$(objpfx)tst-gmon-pie.out: clean-tst-gmon-pie-data
clean-tst-gmon-pie-data:
rm -f $(objpfx)tst-gmon-pie.data.*
diff --git a/gmon/tst-gmon-static-gprof.sh b/gmon/tst-gmon-static-gprof.sh
new file mode 100644
index 0000000..55ac8aa
--- /dev/null
+++ b/gmon/tst-gmon-static-gprof.sh
@@ -0,0 +1,62 @@
+#!/bin/sh
+# Check the output of gprof against a carfully crafted static binary.
+# Copyright (C) 2017 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, see
+# <http://www.gnu.org/licenses/>.
+
+LC_ALL=C
+export LC_ALL
+set -e
+exec 2>&1
+
+GPROF="$1"
+program="$2"
+data="$3"
+
+actual=$(mktemp)
+expected=$(mktemp)
+expected_dot=$(mktemp)
+cleanup () {
+ rm -f "$actual"
+ rm -f "$expected"
+ rm -f "$expected_dot"
+}
+trap cleanup 0
+
+cat > "$expected" <<EOF
+f1 2000
+f2 1000
+main 1
+EOF
+
+# Special version for powerpc with function descriptors.
+cat > "$expected_dot" <<EOF
+.f1 2000
+.f2 1000
+.main 1
+EOF
+
+"$GPROF" -C "$program" "$data" \
+ | awk -F '[(): ]' '/executions/{print $5, $8}' \
+ | sort > "$actual"
+
+if cmp -s "$actual" "$expected_dot" \
+ || diff -u --label expected "$expected" --label actual "$actual" ; then
+ echo "PASS"
+else
+ echo "FAIL"
+ exit 1
+fi
diff --git a/gmon/tst-gmon-static.c b/gmon/tst-gmon-static.c
new file mode 100644
index 0000000..1eef258
--- /dev/null
+++ b/gmon/tst-gmon-static.c
@@ -0,0 +1 @@
+#include "tst-gmon.c"
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 17 ++++++++++++++++
Makeconfig | 2 +-
gmon/Makefile | 21 ++++++++++++++++++++
...{tst-gmon-gprof.sh => tst-gmon-static-gprof.sh} | 4 ++-
gmon/{tst-gmon-pie.c => tst-gmon-static.c} | 0
5 files changed, 42 insertions(+), 2 deletions(-)
copy gmon/{tst-gmon-gprof.sh => tst-gmon-static-gprof.sh} (94%)
copy gmon/{tst-gmon-pie.c => tst-gmon-static.c} (100%)
hooks/post-receive
--
GNU C Library master sources