# Expect script for .tls_common tests
#   Copyright (C) 2006-2025 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 Jakub Jelinek (jakub@redhat.com)
#

# Make sure that binutils can correctly handle ld output in ELF.

if { !([istarget *-*-linux*]
       || [istarget arm*-*-uclinuxfdpiceabi]
       || [istarget *-*-gnu*]) || [istarget *ecoff] } then {
    return
}

if { ![ld_assemble $as "--elf-stt-common=no $srcdir/$subdir/tls_common.s" tmpdir/tls_commona.o]
      || ![ld_assemble $as "--elf-stt-common=yes $srcdir/$subdir/tls_common.s" tmpdir/tls_commonb.o] } {
    unsupported "tls_common"
    return
}

if { ![ld_link $ld tmpdir/tls_common1a.o "-r tmpdir/tls_commona.o"]
     || ![ld_link $ld tmpdir/tls_common1b.o "-r tmpdir/tls_commona.o"] } {
    fail "tls_common"
    return
}

if { ![ld_link $ld tmpdir/tls_commona "tmpdir/tls_common1a.o"] } {
    if { [string match "*not supported*" $link_output]
	 || [string match "*unrecognized option*" $link_output] } {
	unsupported "$ld_options is not supported by this target"
    } else {
	fail "tls_common"
    }
    return
}

if { ![ld_link $ld tmpdir/tls_commonb "tmpdir/tls_common1b.o"] } {
    if { [string match "*not supported*" $link_output]
	 || [string match "*unrecognized option*" $link_output] } {
	unsupported "$ld_options is not supported by this target"
    } else {
	fail "tls_common"
    }
    return
}

set readelf_output [run_host_cmd "$READELF" "-l --wide tmpdir/tls_commona"]
if ![regexp ".*TLS.*0x0+ 0x0+4 R .*" $readelf_output] then {
    send_log "$readelf_output\n"
    fail "tls_common"
    return
}

set readelf_output [run_host_cmd "$READELF" "-l --wide tmpdir/tls_commona"]
if ![regexp ".*TLS.*0x0+ 0x0+4 R .*" $readelf_output] then {
    send_log "$readelf_output\n"
    fail "tls_common"
    return
}

pass "tls_common"
