# Test ALIGNOF in a linker script.
# Copyright (C) 2007-2025 Free Software Foundation, Inc.
# Contributed by Nathan Sidwell <nathan@codesourcery.com>
#
# 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.

# Only ELF and PE-COFF targets record section alignment.

if {![is_elf_format] && ![is_pecoff_format]} {
    return
}

set testname "ALIGNOF"

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

if { [is_pecoff_format] } {
    set IMAGE_BASE "--image-base 0"
} else {
    set IMAGE_BASE ""
}

if ![ld_link $ld tmpdir/alignof "-T $srcdir/$subdir/alignof.t \
	$IMAGE_BASE tmpdir/alignof.o --no-error-rwx-segments"] {
    fail $testname
    return
}

if ![ld_nm $nm "" tmpdir/alignof] {
    fail $testname
    return
}

if {![info exists nm_output(alignof_text)] \
     || ![info exists nm_output(alignof_data)]} {
    send_log "bad output from nm\n"
    verbose "bad output from nm"
    fail $testname
    return
}

if {$nm_output(alignof_text) != 64} {
    send_log "alignof_text != 64\n"
    verbose "alignof_text != 64"
    fail $testname
    return
}

if {$nm_output(alignof_data) != 16} {
    send_log "alignof_data != 16\n"
    verbose "alignof_data != 16"
    fail $testname
    return
}

pass $testname
