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-foo.c .S

set executable ${testfile}
set asm_file [standard_output_file ${srcfile2}]

# We need to know the size of integer and address types in order
# to write some of the debugging info we'd like to generate.
if [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug}] {
    return -1
}

# Create the DWARF.
Dwarf::assemble $asm_file {
    declare_labels cu_label cu2_label int_label int2_label
    set int_size [get_sizeof "int" 4]

    # imported CU 1: inty unsigned
    cu {} {
	cu_label: compile_unit {
	    {language @DW_LANG_C}
	    {name "<artificial>"}
	} {
	    int_label: base_type {
		{byte_size $int_size sdata}
		{encoding @DW_ATE_unsigned}
		{name {unsigned int}}
	    }
            DW_TAG_typedef {
                {DW_AT_name inty}
                {DW_AT_type :$int_label}
            }
	}
    }

    # imported CU 2: inty signed
    cu {} {
	cu2_label: compile_unit {
	    {language @DW_LANG_C}
	    {name "<artificial>"}
	} {
	    int2_label: base_type {
		{byte_size $int_size sdata}
		{encoding @DW_ATE_signed}
		{name {int}}
	    }
            DW_TAG_typedef {
                {DW_AT_name inty}
                {DW_AT_type :$int2_label}
            }
	}
    }

    # main CU
    cu {} {
	compile_unit {
	    {language @DW_LANG_C}
	    {name "<artificial>"}
	} {
	    imported_unit {
		{import %$cu2_label}
	    }

	    subprogram {
		{MACRO_AT_func {main}}
		{external 1 flag}
	    }
	}
    }

    # foo CU
    cu {} {
	compile_unit {
	    {language @DW_LANG_C}
	    {name "<artificial>"}
	} {
	    imported_unit {
		{import %$cu_label}
	    }

	    subprogram {
		{MACRO_AT_func {foo}}
		{external 1 flag}
	    }
	}
    }

}

if { [prepare_for_testing "failed to prepare" ${testfile} \
	  [list $srcfile $asm_file] {nodebug}] } {
    return -1
}

if ![runto_main] {
    return -1
}

gdb_test "ptype inty" "type = int" "ptype in main"

gdb_breakpoint "foo"
gdb_continue_to_breakpoint "continue to breakpoint for foo"

gdb_test "ptype inty" "type = unsigned int" "ptype in foo"
