# Expect script for ELF compressed debug section tests.
#   Copyright 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.
#

# Exclude non-ELF targets.

if ![is_elf_format] {
    return
}

# The following tests require running the executable generated by ld.
if ![isnative] {
    return
}

# Check if compiler works
if { [which $CC] == 0 } {
    return
}

global as
if { ![ld_assemble $as "--compress-debug-sections $srcdir/$subdir/empty.s" tmpdir/empty.o ] } {
    unsupported "linker compressed debug sections"
}

set build_tests {
  {"Build libfoo.so with compressed debug sections"
   "-shared" "-fPIC -g -Wa,--compress-debug-sections"
   {foo.c} {} "libfoo.so"}
  {"Build libbar.so with compressed debug sections"
   "-shared" "-fPIC -g -Wa,--compress-debug-sections"
   {begin.c end.c} {} "libbar.so"}
}

set run_tests {
    {"Run normal with libfoo.so with compressed debug sections"
     "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" "-Wa,--compress-debug-sections"
     {main.c} "normal" "normal.out"}
}

run_cc_link_tests $build_tests
run_ld_link_exec_tests [] $run_tests
