mirror of https://gitee.com/Nocallback/glibc.git
8 changed files with 149 additions and 2 deletions
@ -0,0 +1,60 @@ |
|||
#!/bin/sh |
|||
# Check the output of gprof against a carfully crafted 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 |
|||
EOF |
|||
|
|||
# Special version for powerpc with function descriptors. |
|||
cat > "$expected_dot" <<EOF |
|||
.f1 2000 |
|||
.f2 1000 |
|||
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 |
|||
@ -0,0 +1,50 @@ |
|||
/* Test program for profiling information collection (_mcount/gprof).
|
|||
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/>. */
|
|||
|
|||
/* This program does not use the test harness because we want tight
|
|||
control over the call graph. */ |
|||
|
|||
__attribute__ ((noinline, noclone, weak)) void |
|||
f1 (void) |
|||
{ |
|||
} |
|||
|
|||
__attribute__ ((noinline, noclone, weak)) void |
|||
f2 (void) |
|||
{ |
|||
f1 (); |
|||
/* Prevent tail call. */ |
|||
asm volatile (""); |
|||
} |
|||
|
|||
__attribute__ ((noinline, noclone, weak)) void |
|||
f3 (int count) |
|||
{ |
|||
for (int i = 0; i < count; ++i) |
|||
{ |
|||
f1 (); |
|||
f2 (); |
|||
} |
|||
} |
|||
|
|||
int |
|||
main (void) |
|||
{ |
|||
f3 (1000); |
|||
return 0; |
|||
} |
|||
Loading…
Reference in new issue