# Expect script for LoongArch ELF linker tests
#   Copyright (C) 2021-2024 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.
#

proc loongarch_choose_lp64_emul {} {
    if { [istarget "loongarch64be-*"] } {
	return "elf64bloongarch"
    }
    return "elf64lloongarch"
}

if [istarget "loongarch64-*-*"] {
    run_dump_test "jmp_op"
    run_dump_test "macro_op"
    run_dump_test "syscall"
    run_dump_test "disas-jirl"
    run_dump_test "local-ifunc-reloc"
    run_dump_test "anno-sym"
    run_dump_test "pcala64"
}

if [istarget "loongarch32-*-*"] {
    run_dump_test "jmp_op"
    run_dump_test "macro_op_32"
    run_dump_test "syscall"
    run_dump_test "disas-jirl-32"
}

if [istarget "loongarch64-*-*"] {
  if [check_shared_lib_support] {
    run_ld_link_tests \
	[list \
	    [list \
		"64_pcrel" \
		"-e 0x0 -z relro" "" \
		"" \
		{64_pcrel.s} \
		[list \
		    [list objdump -D 64_pcrel.d] \
		] \
		"64_pcrel" \
	    ] \
	]
  }

  # loongarch*-elf target do not support -shared option
  if [check_shared_lib_support] {
    run_ld_link_tests \
	[list \
	     [list \
		  "data plt" \
		  "-shared" "" \
		  "" \
		  {data-plt.s} \
		  {} \
		  "data-plt.so" \
	     ] \
	]

    if [file exist "tmpdir/data-plt.so"] {
      set objdump_output [run_host_cmd "objdump" "-d tmpdir/data-plt.so"]
      if { [ regexp "<a@plt>" $objdump_output] } {
	fail "data plt"
      } {
	pass "data plt"
      }
    }
  }

  run_ld_link_tests \
      [list \
	  [list \
	      "medium code model call" \
	      "-e 0x0" "" \
	      "" \
	      {medium-call.s} \
	      {} \
	      "medium-call" \
	  ] \
      ]
}

if [istarget "loongarch64-*-*"] {
  if [check_shared_lib_support] {
    run_dump_test "desc-ie"
    run_dump_test "desc-le"
    run_dump_test "ie-le"
    run_dump_test "tlsdesc-dso"
    run_dump_test "desc-norelax"
    run_dump_test "desc-relax"
  }
}
