# Copyright 2011-2020 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/>.
load_lib dwarf.exp

# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
    return 0  
}

standard_testfile main.c

proc test { dwarf_version offset_size addr_size ref_addr_size two_cu } {
    global testfile srcfile

    set name "d${dwarf_version}o${offset_size}a${addr_size}r${ref_addr_size}t${two_cu}"

    # Make some DWARF for the test.
    set asm_file [standard_output_file ${testfile}-${name}.S]
    Dwarf::assemble $asm_file {
	upvar dwarf_version dwarf_version
	upvar addr_size addr_size
	upvar offset_size offset_size
	upvar ref_addr_size ref_addr_size
	upvar two_cu two_cu

	set is_64 [expr { $offset_size == 4 ? 0 : 1 }]

	cu {
	    version $dwarf_version
	    addr_size $addr_size
	    is_64 $is_64
	} {
	    compile_unit {
		{ producer "GNU C 4.4.3" }
		{ language @DW_LANG_C89 }
		{ name 1.c }
	    } {
		declare_labels struct_label variable_label int_label pointer_label

		int_label: base_type {
		    { byte_size 4 DW_FORM_sdata }
		    { DW_AT_encoding @DW_ATE_signed }
		    { name int }
		}

		struct_label: structure_type {
		    { name s }
		    { byte_size 4 sdata }
		} {
		    member {
			{ name f }
			{ type :$int_label }
			{ data_member_location 0 data1 }
		    }
		}

		pointer_label: pointer_type {
		    { byte_size $Dwarf::_cu_addr_size sdata }
		    { type  :$struct_label }
		}

		variable_label: DW_TAG_variable {
		    { name v }
		    { location {
			DW_OP_implicit_value 0x1 0x1 0x1 0x1
		    } SPECIAL_expr}
		    { type :$struct_label "DW_FORM_ref$ref_addr_size" }
		}

		if { !$two_cu } {
		    subprogram {
			{ name main }
			{ low_pc main addr }
			{ high_pc "main+0x100" addr }
			{ type :$int_label }
			{ external 1 flag }
		    } {
			DW_TAG_variable {
			    { name p }
			    { location {
				GNU_implicit_pointer $variable_label 0
			    } SPECIAL_expr }
			    { type :$pointer_label "DW_FORM_ref$ref_addr_size" }
			}
		    }
		}
	    }
	}

	if { $two_cu } {
	    cu {
		version $dwarf_version
		addr_size $addr_size
		is_64 $is_64
	    } {
		compile_unit {
		    { producer "GNU C 4.4.3" }
		    { language @DW_LANG_C89 }
		    { name 1.c }
		} {
		    subprogram {
			{ name main }
			{ low_pc main addr }
			{ high_pc "main+0x100" addr }
			{ type %$int_label }
			{ external 1 flag }
		    } {
			DW_TAG_variable {
			    { name p }
			    { location {
				GNU_implicit_pointer $variable_label 0
			    } SPECIAL_expr }
			    { type %$pointer_label }
			}
		    }
		}
	    }
	}
    }

    # 32-bit targets do not support any of the testcases; keep quiet there.
    set opts {quiet}
    set executable ${testfile}-${name}
    if [prepare_for_testing "failed to prepare" $executable "${asm_file} ${srcfile}" $opts] {
	return -1
    }

    if ![runto_main] {
	return -1
    }

    gdb_test "p/x p->f" " = 0x1010101" $name
}

#    DWARF_VERSION OFFSET_SIZE ADDR_SIZE REF_ADDR_SIZE TWO_CU
test 2 8 4 4 0
test 2 4 8 8 0
test 3 8 4 8 0
test 3 4 8 4 0
test 2 8 4 4 1
test 2 4 8 8 1
test 3 8 4 8 1
test 3 4 8 4 1
