diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 88f8d96bf70..b0db1c8f086 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2021-06-22 Tom de Vries + + * gdb.dwarf2/imported-unit-c.exp: New file. + 2021-06-22 Andrew Burgess * gdb.server/server-kill.exp: Introduce global kill_pid_of, and diff --git a/gdb/testsuite/gdb.dwarf2/imported-unit-c.exp b/gdb/testsuite/gdb.dwarf2/imported-unit-c.exp new file mode 100644 index 00000000000..14047ab8eb9 --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/imported-unit-c.exp @@ -0,0 +1,110 @@ +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 ""} + } { + 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 ""} + } { + 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 ""} + } { + imported_unit { + {import %$cu2_label} + } + + subprogram { + {MACRO_AT_func {main}} + {external 1 flag} + } + } + } + + # foo CU + cu {} { + compile_unit { + {language @DW_LANG_C} + {name ""} + } { + 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"