# Copyright 2018-2021 Free Software Foundation, Inc.

# 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, see <http://www.gnu.org/licenses/>.

# Verify that gdbarches for i386 variants and osabi none are properly created.

if { ![istarget x86_64-*-* ] } {
    untested "skipping x86-64 specific test"
    return
}


proc test_osabi_none { arch void_ptr_size long_double_size } {
    clean_restart

    gdb_test "set architecture $arch" "The target architecture is set to \"$arch\"\\."
    gdb_test_no_output "set osabi none" "set osabi none"
    gdb_test "print sizeof (void*)" " = $void_ptr_size"
    gdb_test "print sizeof (long double)" " = $long_double_size"
}

set infos { \
    { "i386:x86-64" 8 16 } \
    { "i386:x64-32" 4 16 } \
    { "i386"        4 12 } }

foreach info $infos {
    lassign $info arch void_ptr_size long_double_size
    with_test_prefix "arch=$arch" {
	test_osabi_none $arch $void_ptr_size $long_double_size
    }
}
