# Expect script for linker support of STB_GNU_UNIQUE symbols
#
#   Copyright 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
#   Contributed by Red Hat.
#
# 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 Nick Clifton <nickc@redhat.com>
# Adapted for unique checking by Mark J. Wielaard <mjw@redhat.com>


# STB_GNU_UNIQUE support has only been implemented for the ix86, x86_64,
# arm, powerpc, and sparc so far.
if {!(([istarget "i?86-*-*"]
       || [istarget "x86_64-*-*"]
       || [istarget "arm-*-*"]
       || [istarget "powerpc*-*-*"]
       || [istarget "sparc*-*-*"])
      && ([istarget "*-*-elf*"]
	  || [istarget "*-*-nacl*"]
	  || (([istarget "*-*-linux*"]
	       || [istarget "*-*-gnu*"])
	      && ![istarget "*-*-*aout*"]
	      && ![istarget "*-*-*oldld*"]))) } {
    verbose "UNIQUE tests not run - target does not support UNIQUE"
    return
}

# We need a native system.  FIXME: Strictly speaking this
# is not true, we just need to know how to create a fully
# linked executable, including the C and Z libraries, using
# the linker that is under test.
if ![isnative] {
    verbose "UNIQUE tests not run - not a native toolchain"
    return
}

# We need a working compiler.  (Strictly speaking this is
# not true, we could use target specific assembler files).
if { [which $CC] == 0 } {
    verbose "UNIQUE tests not run - no compiler available"
    return
}

# A procedure to check the OS/ABI field in the ELF header of a binary file.
proc check_osabi { binary_file expected_osabi } {
    global READELF
    global READELFFLAGS

    catch "exec $READELF $READELFFLAGS --file-header $binary_file > readelf.out" got

    if ![string match "" $got] then {
	verbose "proc check_osabi: Readelf produced unexpected out processing $binary_file: $got"
	return 0
    }

    if { ![regexp "\n\[ \]*OS/ABI:\[ \]*(.+)\n\[ \]*ABI" \
	   [file_contents readelf.out] nil osabi] } {
	verbose "proc check_osabi: Readelf failed to extract an ELF header from $binary_file"
	return 0
    }

    if { $osabi == $expected_osabi } {
	return 1
    }

    verbose "Expected OSABI: $expected_osabi, Obtained osabi: $osabi"

    return 0
}

# A procedure to confirm that a file contains the UNIQUE symbol.
# Returns -1 upon error, 0 if the symbol was not found and 1 if it was found.
proc contains_unique_symbol { binary_file } {
    global READELF
    global READELFFLAGS

    catch "exec $READELF $READELFFLAGS --symbols $binary_file > readelf.out" got

    if ![string match "" $got] then {
	verbose "proc contains_unique_symbol: Readelf produced unexpected out processing $binary_file: $got"
	return -1
    }

    # Look for a line like this:
    #    54: 0000000000400474     4 OBJECT  UNIQUE DEFAULT   13 a

    if { ![regexp ".*\[ \]*OBJECT\[ \]+UNIQUE\[ \]+DEFAULT\[ \]+\[UND0-9\]+\[ \]+\[ab\]\n" [file_contents readelf.out]] } {
	return 0
    }

    return 1
}

set fails 0

# Create object file containing unique symbol.
if ![ld_compile "$CC -c" "$srcdir/$subdir/unique.s" "tmpdir/unique.o"] {
    fail "Could not create a unique object"
    set fails [expr $fails + 1]
}

# Create object file NOT containing unique symbol.
if ![ld_compile "$CC -c" "$srcdir/$subdir/unique_empty.s" "tmpdir/unique_empty.o"] {
    fail "Could not create a non-unique object"
    set fails [expr $fails + 1]
}

# Create pic object file containing unique symbol.
if ![ld_compile "$CC -c -fPIC" "$srcdir/$subdir/unique_shared.s" "tmpdir/unique_shared.o"] {
    fail "Could not create a pic unique object"
    set fails [expr $fails + 1]
}

# Create executable containing unique symbol.
if ![default_ld_link $ld "tmpdir/unique_prog" "tmpdir/unique.o"] {
    fail "Could not link a unique executable"
    set fails [expr $fails + 1]
}

# Create shared library containing unique symbol.
if ![ld_simple_link $ld "tmpdir/libunique_shared.so" "-shared tmpdir/unique_shared.o"] {
    fail "Could not create a shared library containing an unique symbol"
    set fails [expr $fails + 1]
}

# Create executable NOT containing unique symbol linked against library.
if ![default_ld_link $ld "tmpdir/unique_shared_prog" "-Ltmpdir tmpdir/unique_empty.o -Bdynamic -lunique_shared -rpath ./tmpdir"] {
    fail "Could not link a dynamic executable"
    set fails [expr $fails + 1]
}

# Create shared library containing unique symbol with reference.
if ![ld_simple_link $ld "tmpdir/libunique_shared_ref.so" "-shared tmpdir/unique_shared.o tmpdir/unique_empty.o"] {
    fail "Could not create a shared library containing an unique symbol with reference"
    set fails [expr $fails + 1]
}

if { $fails != 0 } {
    return
}

# Check the object file.
if {! [check_osabi tmpdir/unique.o {UNIX - GNU}]} {
    fail "Object containing unique does not have an OS/ABI field of GNU"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/unique.o] != 1} {
    fail "Object containing unique does not contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

if { $fails == 0 } {
  pass "Checking unique object"
}

# Check the executable.
if {! [check_osabi tmpdir/unique_prog {UNIX - GNU}]} {
    fail "Executable containing unique does not have an OS/ABI field of GNU"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/unique_prog] != 1} {
    fail "Executable containing unique does not contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

if { $fails == 0 } {
  pass "Checking unique executable"
}

# Check the empty object file.
if {! [check_osabi tmpdir/unique_empty.o {UNIX - System V}]} {
    fail "Object NOT containing unique does not have an OS/ABI field of System V"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/unique_empty.o] == 1} {
    fail "Object NOT containing unique does contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

if { $fails == 0 } {
  pass "Checking empty unique object"
}

# Check the unique PIC file.
if {! [check_osabi tmpdir/unique_shared.o {UNIX - GNU}]} {
    fail "PIC Object containing unique does not have an OS/ABI field of GNU"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/unique_shared.o] != 1} {
    fail "PIC Object containing unique does not contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

if { $fails == 0 } {
  pass "Checking unique PIC object"
}

# Check the unique shared library.
if {! [check_osabi tmpdir/libunique_shared.so {UNIX - GNU}]} {
    fail "Shared library containing unique does not have an OS/ABI field of GNU"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/libunique_shared.so] != 1} {
    fail "Shared library containing unique does not contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

# Check the unique shared library with reference.
if {! [check_osabi tmpdir/libunique_shared_ref.so {UNIX - GNU}]} {
    fail "Shared library containing unique with reference does not have an OS/ABI field of GNU"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/libunique_shared_ref.so] != 1} {
    fail "Shared library containing unique with reference does not contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

if { $fails == 0 } {
  pass "Checking unique PIC object"
}

# Check the empty executable linked against unique shared library.
if {! [check_osabi tmpdir/unique_shared_prog {UNIX - System V}]} {
    fail "Executable NOT containing unique does not have an OS/ABI field of System V"
    set fails [expr $fails + 1]
}

if {[contains_unique_symbol tmpdir/unique_shared_prog] == 1} {
    fail "Executable NOT containing unique does contain an UNIQUE symbol"
    set fails [expr $fails + 1]
}

if { $fails == 0 } {
  pass "Checking shared empty executable"
}

# Clean up, unless we are being verbose, in which case we leave the files available.
if { $verbose < 1 } {
    remote_file host delete "tmpdir/unique_empty.o"
    remote_file host delete "tmpdir/unique.o"
    remote_file host delete "tmpdir/unique_shared.o"
    remote_file host delete "tmpdir/libunique_shared.so"
    remote_file host delete "tmpdir/libunique_shared_ref.so"
    remote_file host delete "tmpdir/unique_prog"
    remote_file host delete "tmpdir/unique_shared_prog"
}
