From: Tom de Vries Date: Tue, 22 Jun 2021 13:58:09 +0000 (+0200) Subject: [gdb/testsuite] Add gdb.dwarf2/imported-unit-c.exp X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e5b771060e42232b6d70e9fce0e6907bc979ef21;p=binutils-gdb.git [gdb/testsuite] Add gdb.dwarf2/imported-unit-c.exp This test-case is intended to excercise this code in process_imported_unit_die: ... /* We're importing a C++ compilation unit with tag DW_TAG_compile_unit into another compilation unit, at root level. Regard this as a hint, and ignore it. */ if (die->parent && die->parent->parent == NULL && per_cu->unit_type == DW_UT_compile && per_cu->lang == language_cplus) return; ... in the sense that the test-case should fail if the "per_cu->lang == language_cplus" clause is removed. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-06-22 Tom de Vries * gdb.dwarf2/imported-unit-c.exp: New file. --- 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"