# Expect script for ELF compressed debug section tests.
#   Copyright (C) 2010-2016 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 ] } {
    fail "linker compressed debug sections"
}

if { ![ld_assemble $as "--compress-debug-sections=zlib-gabi $srcdir/$subdir/empty.s" tmpdir/emptyzlib.o ] } {
    fail "linker compressed debug sections"
}

set build_tests {
  {"Build libfoo.so with compressed debug sections"
   "-shared" "-fPIC -ggdb3 -Wa,--compress-debug-sections"
   {foo.c} {} "libfoo.so"}
  {"Build libbar.so with compressed debug sections"
   "-shared -Wl,--compress-debug-sections=none"
   "-fPIC -ggdb3 -Wa,--compress-debug-sections"
   {begin.c end.c} {} "libbar.so"}
  {"Build libfoozlib.so with compressed debug sections with zlib-gabi"
   "-shared" "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gabi"
   {foo.c} {} "libfoozlib.so"}
  {"Build libbarzlib.so with compressed debug sections with zlib-gabi"
   "-shared" "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gabi"
   {begin.c end.c} {} "libbarzlib.so"}
  {"Build libzlibfoo.so with zlib compressed debug sections"
   "-shared -Wl,--compress-debug-sections=zlib"
   "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib"
   {foo.c} {} "libzlibfoo.so"}
  {"Build libgnufoo.so with zlib-gnu compressed debug sections"
   "-shared -Wl,--compress-debug-sections=zlib-gnu"
   "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gnu"
   {foo.c} {} "libgnufoo.so"}
  {"Build libgabifoo.so with zlib-gabi compressed debug sections"
   "-shared -Wl,--compress-debug-sections=zlib-gabi"
   "-fPIC -ggdb3 -Wa,--compress-debug-sections=zlib-gabi"
   {foo.c} {} "libgabifoo.so"}
  {"Build zlibbegin.o with zlib compressed debug sections"
   "-r -nostdlib -Wl,--compress-debug-sections=zlib"
   "-ggdb3 -Wa,--compress-debug-sections=zlib"
   {begin.c} {} "zlibbegin.o"}
  {"Build gnubegin.o with zlib-gnu compressed debug sections"
   "-r -nostdlib -Wl,--compress-debug-sections=zlib-gnu"
   "-ggdb3 -Wa,--compress-debug-sections=zlib-gnu"
   {begin.c} {} "gnubegin.o"}
  {"Build gabiend.o with zlib-gabi compressed debug sections"
   "-r -nostdlib -Wl,--compress-debug-sections=zlib-gabi"
   "-ggdb3 -Wa,--compress-debug-sections=zlib-gnu"
   {end.c} {} "gabiend.o"}
}

set run_tests {
    {"Run normal with libfoo.so with compressed debug sections"
     "tmpdir/begin.o tmpdir/libfoo.so tmpdir/end.o" ""
     {main.c} "normal" "normal.out" "-Wa,--compress-debug-sections"}
    {"Run normal with libfoozlib.so with compressed debug sections with zlib-gabi"
     "tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o" ""
     {main.c} "normal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
    {"Run zlibnormal with libzlibfoo.so with zlib compressed debug sections"
     "tmpdir/begin.o tmpdir/libzlibfoo.so tmpdir/end.o --compress-debug-sections=zlib" ""
     {main.c} "zlibnormal" "normal.out" "-Wa,--compress-debug-sections=zlib"}
    {"Run zlibnormal with libfoozlib.so with zlib compressed debug sections"
     "tmpdir/begin.o tmpdir/libfoozlib.so tmpdir/end.o --compress-debug-sections=zlib" ""
     {main.c} "zlibnormal" "normal.out" "-Wa,--compress-debug-sections=zlib"}
    {"Run gnunormal with libgnufoo.so with zlib-gnu compressed debug sections"
     "tmpdir/gnubegin.o tmpdir/libgnufoo.so tmpdir/end.o --compress-debug-sections=zlib-gnu" ""
     {main.c} "gnunormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gnu"}
    {"Run gnunormal with libfoozlib.so with zlib-gnu compressed debug sections"
     "tmpdir/gnubegin.o tmpdir/libfoozlib.so tmpdir/end.o --compress-debug-sections=zlib-gnu" ""
     {main.c} "gnunormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gnu"}
    {"Run gabinormal with libgabifoo.so with zlib-gabi compressed debug sections"
     "tmpdir/zlibbegin.o tmpdir/libgabifoo.so tmpdir/gabiend.o --compress-debug-sections=zlib-gabi" ""
     {main.c} "gabinormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
    {"Run gabinormal with libfoozlib.so with zlib-gabi compressed debug sections"
     "tmpdir/zlibbegin.o tmpdir/libfoozlib.so tmpdir/gabiend.o --compress-debug-sections=zlib-gabi" ""
     {main.c} "gabinormal" "normal.out" "-Wa,--compress-debug-sections=zlib-gabi"}
}

run_cc_link_tests $build_tests
run_ld_link_exec_tests [] $run_tests

set test_name "Link with zlib-gabi compressed debug input"
send_log "cmp tmpdir/libfoo.so tmpdir/libfoozlib.so\n"
if { [catch {exec cmp tmpdir/libfoo.so tmpdir/libfoozlib.so}] } then {
    send_log "tmpdir/libfoo.so tmpdir/libfoozlib.so differ.\n"
    fail "$test_name"
} else {
    pass "$test_name"
}

global READELF

set test_name "Link -r with zlib compressed debug output"
set test zlibbegin
send_log "$READELF -S -W tmpdir/$test.o > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test.o" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
    fail "$test_name"
} else {
    pass "$test_name"
}

set test_name "Link -r with zlib-gnu compressed debug output"
set test gnubegin
send_log "$READELF -S -W tmpdir/$test.o > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test.o" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
    fail "$test_name"
} else {
    pass "$test_name"
}

set test_name "Link -r with zlib-gabi compressed debug output"
set test gabiend
send_log "$READELF -t -W tmpdir/$test.o > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -t -W tmpdir/$test.o" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rt] } then {
    fail "$test_name"
} else {
    pass "$test_name"
}

set test_name "Link with zlib compressed debug output"
set test normal
send_log "$READELF -w tmpdir/$test > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -w tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}

set test_name "Link with zlib compressed debug output"
set test zlibnormal
send_log "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\" > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\"" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [catch {exec cmp tmpdir/normal.out tmpdir/$test.out}] } then {
    send_log "tmpdir/normal.out tmpdir/$test.out differ.\n"
    fail "$test_name"
} else {
    pass "$test_name"
}
send_log "$READELF -S -W tmpdir/$test' > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
    fail "$test_name"
} else {
    pass "$test_name"
}

set test_name "Link with zlib-gnu compressed debug output"
set test gnunormal
send_log "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\" > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -w tmpdir/$test | sed -e \"s/.zdebug_/.debug_/\"" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [catch {exec cmp tmpdir/normal.out tmpdir/$test.out}] } then {
    send_log "tmpdir/normal.out tmpdir/$test.out differ.\n"
    fail "$test_name"
} else {
    pass "$test_name"
}
send_log "$READELF -S -W tmpdir/$test' > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -S -W tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rS] } then {
    fail "$test_name"
} else {
    pass "$test_name"
}

set test gabinormal
set test_name "Link with zlib-gabi compressed debug output"
send_log "$READELF -w tmpdir/$test > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -w tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [catch {exec cmp tmpdir/normal.out tmpdir/$test.out}] } then {
    send_log "tmpdir/normal.out tmpdir/$test.out differ.\n"
    fail "$test_name"
} else {
    pass "$test_name"
}
send_log "$READELF -t -W tmpdir/$test > tmpdir/$test.out\n"
set got [remote_exec host "$READELF -t -W tmpdir/$test" "" "/dev/null" "tmpdir/$test.out"]
if { [lindex $got 0] != 0 || ![string match "" [lindex $got 1]] } then {
    send_log "$got\n"
    unresolved "$test_name"
}
if { [regexp_diff tmpdir/$test.out $srcdir/$subdir/$test.rt] } then {
    fail "$test_name"
} else {
    pass "$test_name"
}
