# Test ALIGN in a linker script.
# By Nathan Sidwell, CodeSourcery LLC
#   Copyright 2004, 2005, 2006
#   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.

if [istarget "rs6000-*-aix*"] {
    # Target maps .text and .data to other sections.
    return
}

set testname "align1"

if ![ld_assemble $as $srcdir/$subdir/align.s tmpdir/align.o] {
    unresolved $testname
    return
}

# Doesn't work on PECOFF, appears to be a genuine bug.
# mingw64 targets need to set the image base to 0 to avoid auto image-basing.
global LDFLAGS
set saved_LDFLAGS "$LDFLAGS"
if [istarget "*-*-mingw64*"] then {
  set LDFLAGS "$LDFLAGS --image-base 0"
} else {
  if [is_pecoff_format] {
  global target_triplet
  setup_xfail $target_triplet
  }
}

if ![ld_simple_link $ld tmpdir/align "$LDFLAGS -T $srcdir/$subdir/align.t tmpdir/align.o"] {
    fail $testname
} else {
    pass $testname
}

if ![is_aout_format] {
    # The z80-coff port defaults to a "binary" like output
    # file format which does not include a data section.
    setup_xfail "z80-*-coff"
    run_dump_test align2a
    setup_xfail "z80-*-coff"
    run_dump_test align2b
}
run_dump_test align2c
set LDFLAGS "$saved_LDFLAGS"
