# Expect script for ld-plugin LTO tests
#   Copyright 2011, 2012, 2013
#   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.

# These tests require plugin and LTO.
if { ![check_plugin_api_available]
     || ![check_lto_available] } {
    return
}

global CFLAGS
global CXXFLAGS
set saved_CFLAGS "$CFLAGS"
set saved_CXXFLAGS "$CXXFLAGS"
regsub -all "\\-Wp,-D_FORTIFY_SOURCE=\[0-9\]+" $CFLAGS "" CFLAGS
regsub -all "\\-Wp,-D_FORTIFY_SOURCE=\[0-9\]+" $CXXFLAGS "" CXXFLAGS

proc restore_notify { } {
  global saved_CFLAGS
  global saved_CXXFLAGS
  set CFLAGS "$saved_CFLAGS"
  set CXXFLAGS "$saved_CXXFLAGS"
}

# Simple LTO tests and generate input files for complex LTO tests.
set lto_link_tests {
  {"LTO 1"
   "-O2 -flto -fuse-linker-plugin" "-flto -fuse-linker-plugin"
   {lto-1a.c lto-1b.c} {} "lto-1.exe"}
  {"Build libdummy.a 2"
   "" "-O2 -flto -fuse-linker-plugin"
   {lto-2.c} {} "libdummy.a"}
  {"LTO 2"
   "-static -O2 -flto -fuse-linker-plugin tmpdir/lto-2.o -lm" ""
   {dummy.c} {} "lto-2.exe"}
  {"Build libdummy.a 3a"
   "" "-flto"
   {lto-3a.c} {} "libdummy.a"}
  {"Build libdummy.a 3c"
   "" "-O2"
   {lto-3c.c} {} "libdummy.a"}
  {"Build liblto-3.a"
   "" "-flto"
   {lto-3b.c} {} "liblto-3.a"}
  {"Build libdummy.a 5a"
   "" "-flto"
   {lto-5a.c} {} "libdummy.a"}
  {"Build libdummy.a 5b"
   "" "-flto"
   {lto-5b.c} {} "libdummy.a"}
  {"LTO 6"
   "-O2 -flto -fuse-linker-plugin" ""
   {lto-6.c} {} "lto-6.exe" "c"}
  {"Build libdummy.a 9"
   "" "-O2 -finline -flto"
   {lto-9.cc} {} "libdummy.a"}
  {"Build libdummy.a 11a"
   "" "-O -flto"
   {lto-11a.c} {} "libdummy.a"}
  {"Build libdummy.a 11b"
   "" "-O -flto"
   {lto-11b.c} {} "libdummy.a"}
  {"Build libdummy.a 11c"
   "" "-O"
   {lto-11c.c} {} "libdummy.a"}
  {"Build liblto-12.a"
   "" "-O2 -flto"
   {lto-12c.c} {} "liblto-12.a"}
  {"Build libdummy.a 12"
   "" "-O2 -flto"
   {lto-12a.c lto-12b.c} {} "libdummy.a"}
  {"Build libdummy.a 13"
   "" "-O2 -flto"
   {lto-13a.c lto-13b.c} {} "libdummy.a"}
  {"Build liblto-13.a"
   "" "-O2"
   {lto-13c.c} {} "liblto-13.a"}
  {"Build libdummy.a 14a"
   "" "-flto"
   {lto-14a.c lto-14b.c} {} "libdummy.a"}
  {"Build liblto-14.a"
   "" "-flto"
   {lto-14c.c} {} "liblto-14.a"}
  {"Build libdummy.a 15a"
   "" "-flto"
   {lto-15a.c} {} "libdummy.a"}
  {"Build liblto-15.a"
   "" "-flto"
   {lto-15b.c} {} "liblto-15.a"}
  {"PR ld/12696"
   "-O2 -flto -fuse-linker-plugin -r -nostdlib" "-O2 -flto"
   {pr12696-1.cc} {} "pr12696-1r.o" "c"}
  {"Build libdummy.a PR ld/12758"
   "" ""
   {pr12758a.s} {} "libdummy.a"}
  {"Build libpr12758.a"
   "" "-flto -O2"
   {pr12758b.c} {} "libpr12758.a"}
  {"PR ld/12758"
   "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12758a.o -Wl,--start-group tmpdir/libpr12758.a -Wl,--end-group" ""
   {dummy.c} {} "pr12758.exe"}
  {"Build libdummy.a PR ld/12760"
   "" ""
   {pr12760a.c} {} "libdummy.a"}
  {"Build libpr12760.a"
   "" "-flto -O2"
   {pr12760b.c} {} "libpr12760.a"}
  {"PR ld/12760"
   "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin tmpdir/pr12760a.o -Wl,--start-group tmpdir/libpr12760.a -Wl,--end-group" ""
   {dummy.c} {} "pr12760.exe" "c" "warning: Bad bar"}
  {"Build libpr13183.a"
   "-T" "-flto -O2"
   {pr13183a.c} {} "libpr13183.a"}
  {"Build libdummy.a PR ld/13183"
   "" "-flto -O2"
   {pr13183b.c} {} "libdummy.a"}
  {"Build libdummy.a PR ld/13201"
   "" "-flto -O2"
   {pr13201.c} {} "libdummy.a"}
  {"PR ld/13287"
   "-flto -fuse-linker-plugin -Wl,--as-needed" "-flto"
   {pr13287.cc} {} "pr13287.exe" "c++"}
  {"PR ld/15323"
   "" "-O2"
   {pr15323a.c} {} "libdummy.a" "c"}
}

if { [at_least_gcc_version 4 7] } {
    set lto_link_tests [concat $lto_link_tests {
      {"Build libdummy.a PR ld/12942 (1)"
       "" "-flto -O2"
       {pr12942a.cc pr12942c.cc} {} "libdummy.a" "c++"}
      {"Build libdummy.a PR ld/12942 (2)"
       "" "-O0"
       {pr12942b.cc} {} "libdummy.a" "c++"}
    }]
}

# Generate input files for complex LTO tests for ELF.
set lto_link_elf_tests {
  {"Build libdummy.a 7"
   "" "-flto -O2"
   {lto-7a.c lto-7b.c lto-7c.c} {} "libdummy.a"}
  {"Build liblto-7.so"
   "-shared" "-O2 -fpic"
   {lto-7d.c} {} "liblto-7.so" "c"}
  {"Build libdummy.a 8a"
   "" "-O2"
   {lto-8a.c} {} "libdummy.a"}
  {"Build libdummy.a 8b"
   "" "-flto -O2"
   {lto-8b.c} {} "libdummy.a"}
  {"Build liblto-17a.so"
   "-shared -O2 -fpic -flto -fuse-linker-plugin" "-O2 -fpic -flto"
   {lto-17a.c} {{"nm" {} "lto-17a.d"}} "liblto-17a.so" "c"}
  {"Build liblto-17b.so 1"
   "-shared -O2 -fpic -flto -fuse-linker-plugin tmpdir/lto-17a.o" "-O2 -fpic -flto"
   {lto-17b.c} {{"nm" {} "lto-17b-1.d"}} "liblto-17b.so"}
  {"Build liblto-17b.so 2"
   "-shared -O2 -fpic -flto -fuse-linker-plugin tmpdir/lto-17a.o" "-O2 -fpic -flto"
   {lto-17b.c} {{"nm" {} "lto-17b-2.d"}} "liblto-17b.so"}
  {"PR ld/12982"
   "-O2 -flto -fuse-linker-plugin" "-O2 -flto"
   {pr12982.c} {{"readelf" {-l --wide} "pr12982.d"}} "pr12982.exe"}
  {"PR ld/12975"
   "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib -Wl,-version-script,pr12975.t" "-O2 -flto"
   {pr12975.c} {{"readelf" {-s --wide} "pr12975.d"}} "pr12975.so" "c"}
  {"PR ld/13229"
   "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib" "-O2 -finline -fno-early-inlining -flto"
   {pr13229.cc} {{"readelf" {-s --wide} "pr13229.d"}} "pr13229.so" "c++"}
  {"PR ld/13244"
   "-shared -O2 -fPIC -flto -fuse-linker-plugin -nostdlib" "-O2 -fno-early-inlining -flto"
   {pr13244.c} {{"readelf" {-s --wide} "pr13244.d"}} "pr13244.so" "c"}
  {"Build libpr15146a.a"
   "" "-flto -O2"
   {pr15146a.c} {} "lib15146a.a"}
  {"Build pr15146b.so"
   "-shared" "-O2 -fpic"
   {pr15146b.c} {} "pr15146b.so" "c"}
  {"Build pr15146c.so"
   "-shared -Wl,--no-as-needed tmpdir/pr15146b.so" "-O2 -fpic"
   {pr15146c.c} {} "pr15146c.so" "c"}
  {"PR ld/15146 (1)"
   "-O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146a.o tmpdir/pr15146c.so" ""
   {dummy.c} {{"readelf" {-d} "pr15146.d"}} "pr15146a.exe"}
  {"Build libpr15146d.a"
   "" "-flto -O2"
   {pr15146d.c} {} "lib15146d.a"}
  {"Build libpr15146d.a"
   "" "-flto -O2"
   {pr15146d.c} {} "lib15146d.a"}
}

# Check final symbols in executables.
set lto_link_symbol_tests {
  {"LTO 3 symbol"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o tmpdir/liblto-3.a" ""
   {dummy.c} {{"nm" {} "lto-3.d"}} "lto-3.exe" "c"}
  {"LTO 5 symbol"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-5.o" ""
   {dummy.c} {{"nm" {} "lto-5.d"}} "lto-5.exe" "c"}
  {"LTO 9 symbol"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-9.o" ""
   {dummy.c} {{"nm" {-C} "lto-9.d"}} "lto-9.exe" "c++"}
  {"LTO 16a symbol"
   "-O2 -Wl,-e,foo -nostdlib -flto -fuse-linker-plugin" "-flto"
   {lto-16a.c} {{"nm" {} "lto-16a.d"}} "lto-16.exe" "c"}
  {"LTO 16b symbol"
   "-O2 -Wl,-e,foo -u bar -nostdlib -flto -fuse-linker-plugin" "-flto"
   {lto-16a.c lto-16b.c} {{"nm" {} "lto-16b.d"}} "lto-16b.exe" "c"}
  {"PR ld/13183"
   "-O2 -flto -fuse-linker-plugin tmpdir/pr13183b.o tmpdir/libpr13183.a" ""
   {dummy.c} {{"nm" {} "pr13183.d"}} "pr13183.exe" "c"}
}

# LTO run-time tests.
set lto_run_tests {
  {"LTO 3a"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o tmpdir/liblto-3.a" ""
   {dummy.c} "lto-3b.exe" "lto-3.out" "" "c"}
  {"LTO 3b"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o tmpdir/lto-3.o" ""
   {dummy.c} "lto-3c.exe" "lto-3.out" "" "c"}
  {"LTO 3c"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-3a.o tmpdir/lto-3c.o -Wl,--whole-archive tmpdir/liblto-3.a -Wl,--no-whole-archive tmpdir/liblto-3.a" ""
   {dummy.c} "lto-3d.exe" "lto-3.out" "" "c"}
  {"LTO 5"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-5.o" ""
   {dummy.c} "lto-5.exe" "lto-5.out" "" "c"}
  {"LTO 11"
   "-O -flto -fuse-linker-plugin tmpdir/liblto-11.a" ""
   {dummy.c} "lto-11.exe" "lto-11.out" "" "c"}
  {"LTO 12a"
   "-O -flto -fuse-linker-plugin tmpdir/lto-12a.o tmpdir/liblto-12.a tmpdir/lto-12b.o" ""
   {dummy.c} "lto-12a.exe" "lto-12.out" "" "c"}
  {"LTO 12b"
   "-O -flto -fuse-linker-plugin tmpdir/lto-12a.o tmpdir/lto-12b.o tmpdir/liblto-12.a" ""
   {dummy.c} "lto-12b.exe" "lto-12.out" "" "c"}
  {"LTO 13"
   "-O -flto -fuse-linker-plugin tmpdir/lto-13a.o tmpdir/liblto-13.a tmpdir/lto-13b.o" ""
   {dummy.c} "lto-13.exe" "lto-13.out" "" "c"}
  {"LTO 14"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-14a.o -Wl,--whole-archive tmpdir/liblto-14.a -Wl,--no-whole-archive tmpdir/lto-14b.o" ""
   {dummy.c} "lto-14.exe" "lto-14.out" "" "c"}
  {"LTO 15"
   "-O2 -flto -fuse-linker-plugin -Wl,--start-group tmpdir/liblto-15.a tmpdir/lto-15a.o -Wl,--end-group" ""
   {dummy.c} "lto-15.exe" "lto-15.out" "" "c"}
  {"PR ld/13066"
   "-O2 -flto -fuse-linker-plugin" ""
   {pr13066.cc} "pr13066.exe" "pr13066.out" "" "c++"}
  {"PR ld/13201"
   "-O2 -flto -fuse-linker-plugin -Wl,--as-needed tmpdir/pr13201.o -lm" ""
   {dummy.c} "pr13201.exe" "pr13201.out" "" "c"}
  {"PR ld/15323"
   "-O2 -flto -fuse-linker-plugin tmpdir/pr15323a.o" ""
   {pr15323b.c} "pr15323.exe" "pr15323.out" "-flto -O2" "c"}
}

if { [at_least_gcc_version 4 7] } {
    set lto_run_tests [concat $lto_run_tests {
      {"PR ld/12942 (1)"
       "-O2 -flto -fuse-linker-plugin tmpdir/pr12942a.o tmpdir/pr12942b.o" ""
       {dummy.c} "pr12942a.exe" "pr12942.out" "" "c++"}
      {"PR ld/12942 (2)"
       "-O2 -flto -fuse-linker-plugin tmpdir/pr12942a.o tmpdir/pr12942c.o" ""
       {dummy.c} "pr12942c.exe" "pr12942.out" "" "c++"}
    }]
}

# LTO run-time tests for ELF
set lto_run_elf_tests {
  {"LTO 7"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-7b.o tmpdir/lto-7c.o tmpdir/lto-7a.o -Wl,--no-as-needed tmpdir/liblto-7.so" ""
   {dummy.c} "lto-7.exe" "lto-7.out" "" "c"}
  {"LTO 8"
   "-O2 -flto -fuse-linker-plugin tmpdir/lto-8b.o tmpdir/lto-8a.o" ""
   {dummy.c} "lto-8.exe" "lto-8.out" "" "c"}
  {"LTO TLS IE"
   "-O2 -flto -fuse-linker-plugin" ""
   {run-ie.c} "run-ie.exe" "run-ie.out" "" "c"}
}

run_cc_link_tests $lto_link_tests

# Restrict these to ELF targets that support shared libs and PIC.
if { [is_elf_format]
     && [run_host_cmd_yesno $CC "-shared -fPIC $srcdir/$subdir/dummy.c -o tmpdir/t.so"] } {
    run_cc_link_tests $lto_link_elf_tests
    set testname "PR ld/15146 (2)"
    set exec_output [run_host_cmd "$CC" "$gcc_gas_flag $gcc_ld_flag -O2 -flto -fuse-linker-plugin -Wl,-rpath-link,. -Wl,--no-copy-dt-needed-entries -Wl,--no-as-needed tmpdir/pr15146d.o tmpdir/pr15146c.so"]
    if { [ regexp "undefined reference to symbol 'xxx'" $exec_output ] } {
	pass $testname
    } {
	fail $testname
    }
}

set testname "Build liblto-11.a"
remote_file host delete "tmpdir/liblto-11.a"
set catch_output [run_host_cmd "$ar" "rc tmpdir/liblto-11.a tmpdir/lto-11a.o tmpdir/lto-11b.o tmpdir/lto-11c.o"]
if {![string match "" $catch_output]} {
    unresolved $testname
    restore_notify
    return
}

if { [at_least_gcc_version 4 7] } {
    # Check expected LTO linker errors.
    set testname "PR ld/12942 (3)"
    set exec_output [run_host_cmd "$CXX" "$gcc_gas_flag $gcc_ld_flag -O2 -flto -fuse-linker-plugin tmpdir/pr12942b.o tmpdir/pr12942a.o"]
    if { [ regexp "undefined reference to `link_error\\(\\)'" $exec_output ] } {
        pass $testname
    } {
        fail $testname
    }
}

# Run "ld -r" to generate inputs for complex LTO tests.
run_dump_test "lto-3r"
remote_exec host "mv" "tmpdir/dump tmpdir/lto-3.o"
run_dump_test "lto-5r"
remote_exec host "mv" "tmpdir/dump tmpdir/lto-5.o"

run_cc_link_tests $lto_link_symbol_tests

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

run_ld_link_exec_tests [] $lto_run_tests

if { [is_elf_format] } {
    run_ld_link_exec_tests [] $lto_run_elf_tests
}

restore_notify
