2011-03-21 Eric B. Weddington <eric.weddington@atmel.com>
[deliverable/binutils-gdb.git] / gold / testsuite / icf_safe_so_test.sh
CommitLineData
21bb3914
ST
1# icf_safe_so_test.sh -- test --icf=safe
2
3# Copyright 2010 Free Software Foundation, Inc.
4# Written by Sriraman Tallam <tmsriram@google.com>.
5
6# This file is part of gold.
7
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of the GNU General Public License as published by
10# the Free Software Foundation; either version 3 of the License, or
11# (at your option) any later version.
12
13# This program is distributed in the hope that it will be useful,
14# but WITHOUT ANY WARRANTY; without even the implied warranty of
15# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16# GNU General Public License for more details.
17
18# You should have received a copy of the GNU General Public License
19# along with this program; if not, write to the Free Software
20# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21# MA 02110-1301, USA.
22
23# The goal of this program is to verify if --icf=safe works as expected.
24# File icf_safe_so_test.cc is in this test. The goal of this script is
25# to verify if identical code folding in safe mode correctly folds
26# functions in a shared object.
27
0897ed3b
ST
28error_if_symbol_absent()
29{
ce97fa81 30 if ! is_symbol_present $1 $2;
0897ed3b
ST
31 then
32 echo "Symbol" $2 "not present, possibly folded."
33 exit 1
34 fi
35}
36
37is_symbol_present()
38{
ce97fa81 39 grep $2 $1 > /dev/null 2>&1
0897ed3b
ST
40 return $?
41}
42
21bb3914
ST
43check_nofold()
44{
0897ed3b
ST
45 error_if_symbol_absent $1 $2
46 error_if_symbol_absent $1 $3
21bb3914
ST
47 func_addr_1=`grep $2 $1 | awk '{print $1}'`
48 func_addr_2=`grep $3 $1 | awk '{print $1}'`
49 if [ $func_addr_1 = $func_addr_2 ];
50 then
51 echo "Safe Identical Code Folding folded" $2 "and" $3
52 exit 1
53 fi
54}
55
56check_fold()
57{
ce97fa81 58 if ! is_symbol_present $1 $2
0897ed3b
ST
59 then
60 return 0
61 fi
62
ce97fa81 63 if ! is_symbol_present $1 $3
0897ed3b
ST
64 then
65 return 0
66 fi
67
21bb3914
ST
68 func_addr_1=`grep $2 $1 | awk '{print $1}'`
69 func_addr_2=`grep $3 $1 | awk '{print $1}'`
70 if [ $func_addr_1 != $func_addr_2 ];
71 then
72 echo "Safe Identical Code Folding did not fold " $2 "and" $3
73 exit 1
74 fi
75}
76
77arch_specific_safe_fold()
78{
0897ed3b 79 if [ $1 == 0 ];
21bb3914 80 then
0897ed3b 81 check_fold $2 $3 $4
21bb3914 82 else
0897ed3b 83 check_nofold $2 $3 $4
21bb3914
ST
84 fi
85}
86
bca7fb63 87X86_32_or_ARM_specific_safe_fold()
0897ed3b 88{
bca7fb63 89 grep -e "Intel 80386" -e "ARM" $1 > /dev/null 2>&1
0897ed3b
ST
90 arch_specific_safe_fold $? $2 $3 $4
91}
21bb3914 92
0897ed3b
ST
93X86_64_specific_safe_fold()
94{
ce97fa81 95 grep -e "Advanced Micro Devices X86-64" $1 > /dev/null 2>&1
0897ed3b
ST
96 arch_specific_safe_fold $? $2 $3 $4
97}
98
bca7fb63
DK
99X86_32_or_ARM_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout "foo_prot" "foo_hidden"
100X86_32_or_ARM_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout "foo_prot" "foo_internal"
101X86_32_or_ARM_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout "foo_prot" "foo_static"
102X86_32_or_ARM_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout "foo_hidden" "foo_internal"
103X86_32_or_ARM_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout "foo_hidden" "foo_static"
104X86_32_or_ARM_specific_safe_fold icf_safe_so_test_2.stdout icf_safe_so_test_1.stdout "foo_internal" "foo_static"
ce97fa81 105check_nofold icf_safe_so_test_1.stdout "foo_glob" "bar_glob"
This page took 0.133853 seconds and 4 git commands to generate.