Safe ICF for i386.
Sriraman Tallam
tmsriram@google.com
Thu Mar 4 02:46:00 GMT 2010
Hi Ralf,
My shell scripting can suck, let me make those changes with another
patch. I committed the original patch already.
Thanks,
-Sriraman.
On Wed, Mar 3, 2010 at 6:24 PM, Ralf Wildenhues <Ralf.Wildenhues@gmx.de> wrote:
> Hello,
>
> * Sriraman Tallam wrote on Thu, Mar 04, 2010 at 02:37:59AM CET:
>> --- testsuite/icf_safe_so_test.sh 13 Feb 2010 02:04:21 -0000 1.1
>> +++ testsuite/icf_safe_so_test.sh 4 Mar 2010 01:32:23 -0000
>> @@ -25,8 +25,26 @@
>> # to verify if identical code folding in safe mode correctly folds
>> # functions in a shared object.
>>
>> +error_if_symbol_absent()
>> +{
>> + is_symbol_present $1 $2
>> + if [ $? != 0 ];
>> + then
>
> These three lines are cleaner written as
> if is_symbol_present $1 $2; then
>
>> + echo "Symbol" $2 "not present, possibly folded."
>> + exit 1
>> + fi
>> +}
>> +
>> +is_symbol_present()
>> +{
>> + result=`grep $2 $1`
>> + return $?
>
> As Ian already noted, this is problematic. Not all shells propagate the
> exit status from a command substitution inside an assignment to the $?
> variable. These two lines are better replaced by
> grep $2 $1 >/dev/null 2>&1
>
>> +}
>> +
>> check_nofold()
>> {
>> + error_if_symbol_absent $1 $2
>> + error_if_symbol_absent $1 $3
>> func_addr_1=`grep $2 $1 | awk '{print $1}'`
>> func_addr_2=`grep $3 $1 | awk '{print $1}'`
>> if [ $func_addr_1 = $func_addr_2 ];
>> @@ -38,6 +56,18 @@ check_nofold()
>>
>> check_fold()
>> {
>> + is_symbol_present $1 $2
>> + if [ $? != 0 ];
>> + then
>
> See above.
>
>> + return 0
>> + fi
>> +
>> + is_symbol_present $1 $3
>> + if [ $? != 0 ];
>> + then
>
> See above.
>
>> + return 0
>> + fi
>> +
>> func_addr_1=`grep $2 $1 | awk '{print $1}'`
>> func_addr_2=`grep $3 $1 | awk '{print $1}'`
>> if [ $func_addr_1 != $func_addr_2 ];
>> @@ -49,21 +79,31 @@ check_fold()
>>
>> arch_specific_safe_fold()
>> {
>> - grep_x86_64=`grep -q "Advanced Micro Devices X86-64" $2`
>> - if [ $? == 0 ];
>> + if [ $1 == 0 ];
>> then
>> - check_fold $1 $3 $4
>> + check_fold $2 $3 $4
>> else
>> - check_nofold $1 $3 $4
>> + check_nofold $2 $3 $4
>> fi
>> }
>>
>> -check_nofold icf_safe_so_test_1.stdout "foo_prot" "foo_hidden"
>> -check_nofold icf_safe_so_test_1.stdout "foo_prot" "foo_internal"
>> -check_nofold icf_safe_so_test_1.stdout "foo_prot" "foo_static"
>> -check_nofold icf_safe_so_test_1.stdout "foo_hidden" "foo_internal"
>> -check_nofold icf_safe_so_test_1.stdout "foo_hidden" "foo_static"
>> -check_nofold icf_safe_so_test_1.stdout "foo_internal" "foo_static"
>> -arch_specific_safe_fold icf_safe_so_test_1.stdout icf_safe_so_test_2.stdout \
>> - "foo_glob" "bar_glob"
>> +X86_32_specific_safe_fold()
>> +{
>> + grep -q -e "Intel 80386" $1 >& /dev/null
>
> grep -q is not portable, just omit the -q. I don't think >& is
> portable, so prefer >/dev/null 2>&1 instead.
>
>> + arch_specific_safe_fold $? $2 $3 $4
>> +}
>>
>> +X86_64_specific_safe_fold()
>> +{
>> + grep -q -e "Advanced Micro Devices X86-64" $1 >& /dev/null
>
> See above.
>
>> + arch_specific_safe_fold $? $2 $3 $4
>> +}
>
>> diff -u -u -p -r1.2 icf_safe_test.sh
>> --- testsuite/icf_safe_test.sh 13 Feb 2010 02:04:21 -0000 1.2
>> +++ testsuite/icf_safe_test.sh 4 Mar 2010 01:32:23 -0000
>
>> arch_specific_safe_fold()
>> {
>> - grep_x86_64=`grep -q "Advanced Micro Devices X86-64" $2`
>> + grep_x86=`grep -q -e "Advanced Micro Devices X86-64" -e "Intel 80386" $2`
>> if [ $? == 0 ];
>
> See above.
>
>> then
>
> Cheers,
> Ralf
>
More information about the Binutils
mailing list