# Expect script for various ARM ELF tests.
#   Copyright 2002, 2003, 2004 Free Software Foundation, Inc.
#
# This file 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 2 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-ARM-ELF targets.

if { ![is_elf_format] || ![istarget "arm*-*-*"] } {
    return
}

# List contains test-items with 3 items followed by 2 lists:
# 0:name 1:ld options 2:assembler options
# 3:filenames of assembler files 4: action and options. 5: name of output file

# Actions:
# objdump: Apply objdump options on result.  Compare with regex (last arg).
# nm: Apply nm options on result.  Compare with regex (last arg).
# readelf: Apply readelf options on result.  Compare with regex (last arg).

set armelftests {
    {"Simple non-PIC shared library" "-shared" "" {arm-lib.s}
     {{objdump -fdw arm-lib.d} {objdump -Rw arm-lib.r}}
     "arm-lib.so"}
    {"Simple PIC shared library" "-shared" "" {arm-lib-plt32.s}
     {{objdump -fdw arm-lib-plt32.d} {objdump -Rw arm-lib-plt32.r}}
     "arm-lib-plt32.so"}
    {"Simple dynamic application" "tmpdir/arm-lib.so" "" {arm-app.s}
     {{objdump -fdw arm-app.d} {objdump -Rw arm-app.r}}
     "arm-app"}
    {"Simple static application" "" "" {arm-static-app.s}
     {{objdump -fdw arm-static-app.d} {objdump -rw arm-static-app.r}}
     "arm-static-app"}
    {"Non-pcrel function reference" "tmpdir/arm-lib.so" "" {arm-app-abs32.s}
     {{objdump -fdw arm-app-abs32.d} {objdump -Rw arm-app-abs32.r}}
     "arm-app-abs32"}
    {"Mixed ARM/Thumb shared library" "-shared -T arm-lib.ld" ""
     {mixed-lib.s}
     {{objdump -fdw mixed-lib.d} {objdump -Rw mixed-lib.r}
      {readelf -Ds mixed-lib.sym}}
     "mixed-lib.so"}
    {"Mixed ARM/Thumb dynamic application" "tmpdir/mixed-lib.so -T arm-dyn.ld" ""
     {mixed-app.s}
     {{objdump -fdw mixed-app.d} {objdump -Rw mixed-app.r}
      {readelf -Ds mixed-app.sym}}
     "mixed-app"}
    {"target1-abs" "-static --target1-abs -T arm.ld" "" {arm-target1.s}
     {{objdump -s arm-target1-abs.d}}
     "arm-target1-abs"}
    {"target1-rel" "-static --target1-rel -T arm.ld" "" {arm-target1.s}
     {{objdump -s arm-target1-rel.d}}
     "arm-target1-rel"}
    {"target2-rel" "-static --target2=rel -T arm.ld" "" {arm-target2.s}
     {{objdump -s arm-target2-rel.d}}
     "arm-target2-rel"}
    {"target2-abs" "-static --target2=abs -T arm.ld" "" {arm-target2.s}
     {{objdump -s arm-target2-abs.d}}
     "arm-target2-abs"}
    {"target2-got-rel" "-static --target2=got-rel -T arm.ld" "" {arm-target2.s}
     {{objdump -s arm-target2-got-rel.d}}
     "arm-target2-got-rel"}
    {"arm-rel31" "-static -T arm.ld" "" {arm-rel31.s}
     {{objdump -s arm-rel31.d}}
     "arm-rel31"}
    {"TLS shared library" "-shared -T arm-lib.ld" "" {tls-lib.s}
     {{objdump -fdw tls-lib.d} {objdump -Rw tls-lib.r}}
     "tls-lib.so"}
    {"TLS dynamic application" "-T arm-dyn.ld tmpdir/tls-lib.so" "" {tls-app.s}
     {{objdump -fdw tls-app.d} {objdump -Rw tls-app.r}}
     "tls-app"}
}

run_ld_link_tests $armelftests
