1 #!/bin/sh 2 3 # script_test_3.sh -- test PHDRS 4 5 # Copyright (C) 2008-2014 Free Software Foundation, Inc. 6 # Written by Ian Lance Taylor <iant (at] google.com>. 7 8 # This file is part of gold. 9 10 # This program is free software; you can redistribute it and/or modify 11 # it under the terms of the GNU General Public License as published by 12 # the Free Software Foundation; either version 3 of the License, or 13 # (at your option) any later version. 14 15 # This program is distributed in the hope that it will be useful, 16 # but WITHOUT ANY WARRANTY; without even the implied warranty of 17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 # GNU General Public License for more details. 19 20 # You should have received a copy of the GNU General Public License 21 # along with this program; if not, write to the Free Software 22 # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 23 # MA 02110-1301, USA. 24 25 # This file goes with script_test_3.t, which is a linker script which 26 # uses a PHDRS clause. We run objdump -p on a program linked with 27 # that linker script. 28 29 check() 30 { 31 if ! grep -q "$2" "$1" 32 then 33 echo "Did not find expected segment in $1:" 34 echo " $2" 35 echo "" 36 echo "Actual output below:" 37 cat "$1" 38 exit 1 39 fi 40 } 41 42 check_count() 43 { 44 if test "`grep -c "$2" "$1"`" != "$3" 45 then 46 echo "Did not find expected segment in $1:" 47 echo " $2" 48 echo "" 49 echo "Actual output below:" 50 cat "$1" 51 exit 1 52 fi 53 } 54 55 check_count script_test_3.stdout "^ INTERP" 1 56 check_count script_test_3.stdout "^ LOAD" 3 57 check_count script_test_3.stdout "^ DYNAMIC" 1 58 59 # Make sure that the size of the INTERP segment is the same as the 60 # size of the .interp section. 61 section=`fgrep .interp script_test_3.stdout | grep PROGBITS` 62 if test "$section" = ""; then 63 echo "Did not find .interp section" 64 echo "" 65 echo "Actual output below:" 66 cat script_test_3.stdout 67 exit 1 68 fi 69 # Remove the brackets around the section number, since they can give 70 # an unpredictable number of fields. 71 section=`echo "$section" | sed -e 's/[][]*//g'` 72 section_size=`echo "$section" | awk '{ print $6; }'` 73 74 segment=`grep '^ INTERP' script_test_3.stdout` 75 # We already checked above that we have an INTERP segment. 76 segment_size=`echo "$segment" | awk '{ print $5; }'` 77 78 # Now $section_size looks like 000013 and $segment_size looks like 79 # 0x00013. Both numbers are in hex. 80 section_size=`echo "$section_size" | sed -e 's/^0*//'` 81 segment_size=`echo "$segment_size" | sed -e 's/^0x//' -e 's/^0*//'` 82 83 if test "$section_size" != "$segment_size"; then 84 echo ".interp size $section_size != PT_INTERP size $segment_size" 85 exit 1 86 fi 87 88 # At least one PT_LOAD segment should have an alignment >= 0x100000. 89 found=no 90 for a in `grep LOAD script_test_3.stdout | sed -e 's/^.* 0x/0x/'`; do 91 script="BEGIN { if ($a >= 0x100000) { print \"true\" } else { print \"false\" } }" 92 x=`awk "$script" < /dev/null` 93 if test "$x" = "true"; then 94 found=yes 95 fi 96 done 97 if test "$found" = "no"; then 98 echo "no LOAD segment has required alignment" 99 exit 1 100 fi 101 102 exit 0 103