# Expect script for ld-visibility tests
#   Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010
#   Free Software Foundation, Inc.
#
# This file is part of the GNU Binutils.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.
#
# Written by Ian Lance Taylor (ian@cygnus.com)
#	     and H.J. Lu (hjl@gnu.org)
#

# Make sure that ld can generate ELF shared libraries with visibility.

# This test can only be run on a couple of ELF platforms.
# Square bracket expressions seem to confuse istarget.
if { ![istarget hppa*64*-*-hpux*] \
     && ![istarget hppa*-*-linux*] \
     && ![istarget i?86-*-linux*] \
     && ![istarget i?86-*-gnu*] \
     && ![istarget ia64-*-linux*] \
     && ![istarget m68k-*-linux*] \
     && ![istarget mips*-*-linux*] \
     && ![istarget powerpc*-*-linux*] \
     && ![istarget arm*-*-linux*] \
     && ![istarget alpha*-*-linux*] \
     && ![istarget sparc*-*-linux*] \
     && ![istarget s390*-*-linux*] \
     && ![istarget sh\[34\]*-*-linux*] \
     && ![istarget x86_64-*-linux*] } {
    return
}

if { [istarget *-*-linux*aout*] \
     || [istarget *-*-linux*oldld*] } {
    return
}

set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
foreach t $test_list {
    # We need to strip the ".d", but can leave the dirname.
    verbose [file rootname $t]
    run_dump_test [file rootname $t]
}

# The remaining tests can only be run if ld generates native executables.
if ![isnative] then {return}

set tmpdir tmpdir
set SHCFLAG ""
set shared_needs_pic "no"

if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {

    # AIX shared libraries do not seem to support useful features,
    # like overriding the shared library function or letting the
    # shared library refer to objects defined in the main program.  We
    # avoid testing those features.
    set SHCFLAG "-DXCOFF_TEST"

    # The AIX 3.2.5 loader appears to randomly fail when loading
    # shared libraries from NSF mounted partitions, so we avoid any
    # potential problems by using a local directory.
    catch {exec /bin/sh -c "echo $$"} pid
    set tmpdir /usr/tmp/ld.$pid
    catch "exec mkdir $tmpdir" exec_status

    # On AIX, we need to explicitly export the symbols the shared
    # library is going to provide, and need.
    set file [open $tmpdir/xcoff.exp w]
    puts $file shlibvar1
    puts $file shlibvar2
    puts $file shlib_shlibvar1
    puts $file shlib_shlibvar2
    puts $file shlib_shlibcall
    puts $file shlib_shlibcalled
    puts $file shlib_checkfunptr1
    puts $file shlib_getfunptr1
    puts $file shlib_check
    close $file
}

if [istarget arm*-*-linux*] {
    # On ARM section anchors can change the symbol pre-emptability for
    # non-PIC shared libraries, causing these tests to fail.  Turn section 
    # anchors off.
    set SHCFLAG "-fno-section-anchors"

    # On targets that have MOVW the compiler will emit relocations which 
    # the linker doesn't support when compiling -shared without -fpic.  The
    # test to find out whether we want to XFAIL the non-PIC tests requires 
    # a compile - so we pre-calculate it here.  We also note that this can
    # only affect arm*-*-*eabi targets as the old ABI doesn't support v7.
    if [istarget arm*-*-*eabi] {
	set file [open $tmpdir/movw-detect.c w]
	puts $file "void foo(void) { __asm (\"movw r0, #0\"); }"
	close $file
	if [run_host_cmd_yesno "$CC" "$CFLAGS -c $tmpdir/movw-detect.c -o $tmpdir/movw-detect.o"] {
	    set shared_needs_pic "yes"
	}
    }
}

set support_protected "no"

if { [istarget *-*-linux*]
     || [istarget *-*-gnu*] } {
    if [ld_compile "$CC -g $CFLAGS -DPROTECTED_CHECK" $srcdir/$subdir/main.c $tmpdir/main.o] {
      if [ld_simple_link $CC $tmpdir/main "$tmpdir/main.o"] {
	catch "exec $tmpdir/main" support_protected
      }
    }
}

# The test procedure.
proc visibility_test { visibility progname testname main sh1 sh2 dat args } {
    global CC
    global srcdir
    global subdir
    global exec_output
    global link_output
    global host_triplet
    global tmpdir

    if [llength $args] { set shldflags [lindex $args 0] } else { set shldflags "" }

    # Build the shared library.
    # On AIX, we need to use an export file.
    set shared -shared
    if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
	set shared "-bM:SRE -bE:$tmpdir/xcoff.exp"
    }
    if {![ld_simple_link $CC $tmpdir/$progname.so "$shared $shldflags $tmpdir/$sh1 $tmpdir/$sh2"]} {
	if { [ string match $visibility "hidden_undef" ]
	     && [regexp "undefined reference to \`\.?visibility\'" $link_output]
	     && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
    	    pass "$testname"
	} else { if { [ string match $visibility "protected_undef" ]
	     && [regexp "undefined reference to \`\.?visibility\'" $link_output]
	     && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
    	    pass "$testname"
	} else {
	    fail "$testname"
	}}
    	return
    }

    # Link against the shared library.  Use -rpath so that the
    # dynamic linker can locate the shared library at runtime.
    # On AIX, we must include /lib in -rpath, as otherwise the loader
    # can not find -lc.
    set rpath $tmpdir
    if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
	set rpath /lib:$tmpdir
    }
    if ![ld_simple_link $CC $tmpdir/$progname "-Wl,-rpath,$rpath $tmpdir/$main $tmpdir/$progname.so"] {
	if { [ string match $visibility "hidden" ]
	     && [regexp "undefined reference to \`\.?visibility\'" $link_output]
	     && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
    	    pass "$testname"
	} else { if { [ string match $visibility "hidden_undef_def" ]
	     && [regexp "undefined reference to \`\.?visibility\'" $link_output]
	     && [regexp "undefined reference to \`visibility_def\'" $link_output]
	     && [regexp "undefined reference to \`\.?visibility_func\'" $link_output]
	     && [regexp "undefined reference to \`visibility_var\'" $link_output] } {
    	    pass "$testname"
	} else {
    	    fail "$testname"
	}}
    	return
    }

    if { [ string match $visibility "hidden" ]
	 || [ string match $visibility "hidden_undef" ]
	 || [ string match $visibility "protected_undef" ] } {
	fail "$testname"
    }

    # Run the resulting program
    send_log "$tmpdir/$progname >$tmpdir/$progname.out\n"
    verbose "$tmpdir/$progname >$tmpdir/$progname.out"
    catch "exec $tmpdir/$progname >$tmpdir/$progname.out" exec_output
    if ![string match "" $exec_output] then {
	send_log "$exec_output\n"
	verbose "$exec_output"
	fail "$testname"
    	return
    }

    send_log "diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat\n"
    verbose "diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat"
    catch "exec diff $tmpdir/$progname.out $srcdir/$subdir/$dat.dat" exec_output
    set exec_output [prune_warnings $exec_output]

    if {![string match "" $exec_output]} then {
	send_log "$exec_output\n"
	verbose "$exec_output"
	fail "$testname"
        return
    }

    pass "$testname"
}

proc visibility_run {visibility} {
    global CC
    global CFLAGS
    global SHCFLAG
    global srcdir
    global subdir
    global tmpdir
    global picflag
    global target_triplet
    global support_protected
    global shared_needs_pic

    if [ string match $visibility "hidden" ] {
	set VSBCFLAG "-DHIDDEN_TEST"
    } else { if [ string match $visibility "hidden_normal" ] {
	set VSBCFLAG "-DHIDDEN_NORMAL_TEST"
    } else { if [ string match $visibility "hidden_undef" ] {
	set VSBCFLAG "-DHIDDEN_UNDEF_TEST"
    } else { if [ string match $visibility "hidden_undef_def" ] {
	set VSBCFLAG "-DHIDDEN_UNDEF_TEST -DDSO_DEFINE_TEST"
    } else { if [ string match $visibility "hidden_weak" ] {
	set VSBCFLAG "-DHIDDEN_WEAK_TEST"
    } else { if [ string match $visibility "protected" ] {
	set VSBCFLAG "-DPROTECTED_TEST"
    } else { if [ string match $visibility "protected_undef" ] {
	set VSBCFLAG "-DPROTECTED_UNDEF_TEST"
    } else { if [ string match $visibility "protected_undef_def" ] {
	set VSBCFLAG "-DPROTECTED_UNDEF_TEST -DDSO_DEFINE_TEST"
    } else { if [ string match $visibility "protected_weak" ] {
	set VSBCFLAG "-DPROTECTED_WEAK_TEST"
    } else {
	set VSBCFLAG ""
    }}}}}}}}}

    if { [istarget powerpc*-*-linux*] } {
	# Testing non-PIC libraries is a waste of effort on any target.
	# If you don't pass -fpic or -fPIC to gcc, gcc will assume quite
	# reasonably that you are not compiling for a shared library.
	# It can then make optimisations that result in shared library
	# functions and variables not being overridable.  Newer versions
	# of gcc are more likely to do this.
    } else {
    # Compile the main program.
    if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/main.c $tmpdir/mainnp.o] {
	unresolved "visibility ($visibility) (non PIC)"
	unresolved "visibility ($visibility)"
    } else {
	# The shared library is composed of two files.  First compile them
	# without using -fpic.  That should work on an ELF system,
	# although it will be less efficient because the dynamic linker
	# will need to do more relocation work.  However, note that not
	# using -fpic will cause some of the tests to return different
	# results.
	if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/sh1.c $tmpdir/sh1np.o]
	     || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG" $srcdir/$subdir/sh2.c $tmpdir/sh2np.o] } {
	    unresolved "visibility ($visibility) (non PIC)"
	} else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
	    visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o xcoff
	} else {
	    # SunOS non PIC shared libraries don't permit some cases of
	    # overriding.
	    if { [ string match $visibility "protected" ]
		 || [ string match $visibility "protected_undef_def" ] } {
		if [ string match $support_protected "no" ] {
		    setup_xfail $target_triplet
		}
	    } else {
		setup_xfail "*-*-sunos4*"
	    }

	    # Non-pic code uses name binding rules for applications to
	    # reference variables by gp-relative relocs, which can't be
	    # used with overridable symbols.
	    if { ![ string match $visibility "hidden_undef" ]
		 && ![ string match $visibility "protected_undef" ] } {
		setup_xfail "ia64-*-linux*"
		setup_xfail "alpha*-*-linux*"
	    }
	    if { ![ string match $visibility "hidden" ]
		 && ![ string match $visibility "hidden_undef" ]
		 && ![ string match $visibility "hidden_undef_def" ]
		 && ![ string match $visibility "protected_undef" ] } {
		setup_xfail "s390x-*-linux*"
		if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
		    setup_xfail "sparc*-*-linux*"
		}
	    }
	    if { [is_elf64 $tmpdir/mainnp.o] } {
		setup_xfail "x86_64-*-linux*"
	    }
	    if { ![istarget hppa*64*-*-linux*] } {
		setup_xfail "hppa*-*-linux*"
	    }
	    if [ string match $shared_needs_pic "yes" ] {
		setup_xfail "arm*-*-linux*"
	    }

	    visibility_test $visibility vnp "visibility ($visibility) (non PIC)" mainnp.o sh1np.o sh2np.o elfvsb

	    # Test ELF shared library relocations with a non-zero load
	    # address for the library.  Near as I can tell, the R_*_RELATIVE
	    # relocations for various targets are broken in the case where
	    # the load address is not zero (which is the default).
	    if { [ string match $visibility "protected" ]
		 || [ string match $visibility "protected_undef_def" ] } {
		if [ string match $support_protected "no" ] {
		    setup_xfail $target_triplet
		}
	    } else {
		setup_xfail "*-*-sunos4*"
		setup_xfail "*-*-linux*libc1"
	    }
	    if { [ string match $visibility "hidden_normal" ]
		 || [ string match $visibility "hidden_weak" ]
		 || [ string match $visibility "protected" ]
		 || [ string match $visibility "protected_undef_def" ]
		 || [ string match $visibility "protected_weak" ]
		 || [ string match $visibility "normal" ] } {
		setup_xfail "powerpc-*-linux*"
		setup_xfail "s390x-*-linux*"
		if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainnp.o] } {
		    setup_xfail "sparc*-*-linux*"
		}
	    }
	    if { ![ string match $visibility "hidden_undef" ]
		 && ![ string match $visibility "protected_undef" ] } {
		setup_xfail "ia64-*-linux*"
		setup_xfail "alpha*-*-linux*"
		setup_xfail "mips*-*-linux*"
	    }
	    if { [is_elf64 $tmpdir/mainnp.o] } {
		setup_xfail "x86_64-*-linux*"
	    }
	    if { ![istarget hppa*64*-*-linux*] } {
		setup_xfail "hppa*-*-linux*"
	    }
	    if [ string match $shared_needs_pic "yes" ] {
		setup_xfail "arm*-*-linux*"
	    }

	    visibility_test $visibility vnp "visibility ($visibility) (non PIC, load offset)" \
		mainnp.o sh1np.o sh2np.o elfvsb \
		"-T $srcdir/$subdir/elf-offset.ld"
	} }

	# Now compile the code using -fpic.

	if { ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/sh1.c $tmpdir/sh1p.o] 
	    || ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/sh2.c $tmpdir/sh2p.o] } {
	    unresolved "visibility ($visibility)"
	} else {
	    if { [ string match $visibility "protected" ]
		 || [ string match $visibility "protected_undef_def" ] } {
		if [ string match $support_protected "no" ] {
		    setup_xfail $target_triplet
		}
	    }
	    # SunOS can not compare function pointers correctly
	    if [istarget "*-*-sunos4*"] {
		visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o sun4
	    } else { if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
		visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o xcoff
	    } else {
		visibility_test $visibility vp "visibility ($visibility)" mainnp.o sh1p.o sh2p.o elfvsb
	    } }
	}
    }}

    if { [istarget powerpc*-*-linux*] } {
	# Don't bother.
    } else {
    # Now do the same tests again, but this time compile main.c PIC.
    if ![ld_compile "$CC -g $CFLAGS $SHCFLAG $VSBCFLAG -DSHARED $picflag" $srcdir/$subdir/main.c $tmpdir/mainp.o] {
	unresolved "visibility ($visibility) (PIC main, non PIC so)"
	unresolved "visibility ($visibility) (PIC main)"
    } else {
	if { [file exists $tmpdir/sh1np.o ] && [ file exists $tmpdir/sh2np.o ] } {
	    if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
		visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o xcoff
	    } else {
		# SunOS non PIC shared libraries don't permit some cases of
		# overriding.
		if { [ string match $visibility "protected" ]
		     || [ string match $visibility "protected_undef_def" ] } {
		    if [ string match $support_protected "no" ] {
			setup_xfail $target_triplet
		    }
		} else {
		    setup_xfail "*-*-sunos4*"
		}
		if { ![ string match $visibility "hidden_undef" ]
		     && ![ string match $visibility "protected_undef" ] } {
		    setup_xfail "ia64-*-linux*"
		    setup_xfail "alpha*-*-linux*"
		}
		if { ![ string match $visibility "hidden" ]
		     && ![ string match $visibility "hidden_undef" ]
		     && ![ string match $visibility "hidden_undef_def" ]
		     && ![ string match $visibility "protected_undef" ] } {
		    setup_xfail "s390x-*-linux*"
		    if { [istarget sparc*-*-linux*] && [is_elf64 $tmpdir/mainp.o] } {
			setup_xfail "sparc*-*-linux*"
		    }
		}
		if { [is_elf64 $tmpdir/mainp.o] } {
		    setup_xfail "x86_64-*-linux*"
		}
		if { ![istarget hppa*64*-*-linux*] } {
		    setup_xfail "hppa*-*-linux*"
		}
		if [ string match $shared_needs_pic "yes" ] {
		    setup_xfail "arm*-*-linux*"
		}

		visibility_test $visibility vmpnp "visibility ($visibility) (PIC main, non PIC so)" mainp.o sh1np.o sh2np.o elfvsb
	    }
	} else {
	    unresolved "visibility (PIC main, non PIC so)"
	}

	if { [file exists $tmpdir/sh1p.o ] && [ file exists $tmpdir/sh2p.o ] } {
	    if { [ string match $visibility "protected" ]
		 || [ string match $visibility "protected_undef_def" ] } {
		if [ string match $support_protected "no" ] {
		    setup_xfail $target_triplet
		}
	    }
	    if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
		visibility_test $visibility vmpp "visibility ($visibility) (PIC main)" mainp.o sh1p.o sh2p.o xcoff
	    } else {
		visibility_test $visibility vmpp "visibility ($visibility) (PIC main)" mainp.o sh1p.o sh2p.o elfvsb
	    }
	} else {
	    unresolved "visibility ($visibility) (PIC main)"
	}
    }}
}

if [istarget mips*-*-*] {
    set picflag ""
} else {
    # Unfortunately, the gcc argument is -fpic and the cc argument is
    # -KPIC.  We have to try both.
    set picflag "-fpic"
    send_log "$CC $picflag\n"
    verbose "$CC $picflag"
    catch "exec $CC $picflag" exec_output
    send_log "$exec_output\n"
    verbose "--" "$exec_output"
    if { [string match "*illegal option*" $exec_output] \
	 || [string match "*option ignored*" $exec_output] \
	 || [string match "*unrecognized option*" $exec_output] \
	 || [string match "*passed to ld*" $exec_output] } {
	if [istarget *-*-sunos4*] {
	    set picflag "-pic"
	} else {
	    set picflag "-KPIC"
	}
    }
}
verbose "Using $picflag to compile PIC code"

visibility_run hidden
visibility_run hidden_normal
visibility_run hidden_undef
visibility_run hidden_undef_def
visibility_run hidden_weak
visibility_run protected
visibility_run protected_undef
visibility_run protected_undef_def
visibility_run protected_weak
visibility_run normal

if { ![ld_compile "$CC -g $CFLAGS" $srcdir/$subdir/common.c tmpdir/common.o] } {
    unresolved "common hidden symbol"
} else {
    if ![ld_simple_link $ld tmpdir/common "tmpdir/common.o"] {
	fail "common hidden symbol"
    } else {
	pass "common hidden symbol"
    }
}

if { ![ld_compile "$CC -g $CFLAGS" $srcdir/$subdir/test.c tmpdir/test.o] } {
    unresolved "weak hidden symbol"
} else {
   if { ![ld_compile "$CC -g $CFLAGS -DSHARED $picflag" $srcdir/$subdir/sh3.c tmpdir/sh3.o] } {
	unresolved "weak hidden symbol"
    } else {
	if ![ld_simple_link $ld tmpdir/sh3.so "-shared tmpdir/sh3.o"] {
	    fail "weak hidden symbol"
	} else {
	    if ![ld_simple_link $ld tmpdir/weak "tmpdir/test.o tmpdir/sh3.o"] {
		fail "weak hidden symbol DSO last"
	    } else {
		pass "weak hidden symbol DSO last"
	    }
	    if ![ld_simple_link $ld tmpdir/weak "tmpdir/sh3.so tmpdir/test.o"] {
		fail "weak hidden symbol DSO first"
	    } else {
		pass "weak hidden symbol DSO first"
	    }
	}
    }
}

if { [istarget rs6000*-*-aix*] || [istarget powerpc*-*-aix*] } {
    # Remove the temporary directory.
    catch "exec rm -rf $tmpdir" exec_status
}
