diff options
author | Tom de Vries <tdevries@suse.de> | 2021-06-22 15:58:09 +0200 |
---|---|---|
committer | Tom de Vries <tdevries@suse.de> | 2021-06-22 15:58:09 +0200 |
commit | e5b771060e42232b6d70e9fce0e6907bc979ef21 (patch) | |
tree | cf04e6e2dd5af04a2c498bbf5414f5a743d2ea9e | |
parent | 50331d64f1080c2c9957fb608e0af236b96c1a41 (diff) | |
download | binutils-e5b771060e42232b6d70e9fce0e6907bc979ef21.zip binutils-e5b771060e42232b6d70e9fce0e6907bc979ef21.tar.gz binutils-e5b771060e42232b6d70e9fce0e6907bc979ef21.tar.bz2 |
[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 <tdevries@suse.de>
* gdb.dwarf2/imported-unit-c.exp: New file.
-rw-r--r-- | gdb/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/imported-unit-c.exp | 110 |
2 files changed, 114 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 88f8d96..b0db1c8 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2021-06-22 Tom de Vries <tdevries@suse.de> + + * gdb.dwarf2/imported-unit-c.exp: New file. + 2021-06-22 Andrew Burgess <andrew.burgess@embecosm.com> * 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 0000000..14047ab --- /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 "<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" |