aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
diff options
context:
space:
mode:
authorDoug Evans <dje@google.com>2013-05-20 22:11:37 +0000
committerDoug Evans <dje@google.com>2013-05-20 22:11:37 +0000
commit6c9e2db469f1c0783213045c6d7680078575f641 (patch)
tree00708fdea82a95eb2a9763d18a576a88626bfe76 /gdb/testsuite
parent4a6e676ceb43ee5d827c9264c35486dc1222a6e7 (diff)
downloadgdb-6c9e2db469f1c0783213045c6d7680078575f641.zip
gdb-6c9e2db469f1c0783213045c6d7680078575f641.tar.gz
gdb-6c9e2db469f1c0783213045c6d7680078575f641.tar.bz2
* lib/dwarf.exp (Dwarf): New variable _abbrev_section.
(_handle_DW_TAG): Use it. (cu, tu): Replace parameters is_64, version, addr_size with options. All callers updated. Add Fission support. * gdb.dwarf2/implptrconst.exp: Update callers of "cu". * gdb.dwarf2/method-ptr.exp: Ditto. * gdb.dwarf2/nostaticblock.exp: Ditto. * gdb.dwarf2/subrange.exp: Ditto. * gdb.dwarf2/missing-sig-type.exp: Update callers of "cu", "tu".
Diffstat (limited to 'gdb/testsuite')
-rw-r--r--gdb/testsuite/ChangeLog12
-rw-r--r--gdb/testsuite/gdb.dwarf2/implptrconst.exp2
-rw-r--r--gdb/testsuite/gdb.dwarf2/method-ptr.exp2
-rw-r--r--gdb/testsuite/gdb.dwarf2/missing-sig-type.exp4
-rw-r--r--gdb/testsuite/gdb.dwarf2/nostaticblock.exp2
-rw-r--r--gdb/testsuite/gdb.dwarf2/subrange.exp2
-rw-r--r--gdb/testsuite/lib/dwarf.exp144
7 files changed, 120 insertions, 48 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 0aa2086..3af6067 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,15 @@
+2013-05-20 Doug Evans <dje@google.com>
+
+ * lib/dwarf.exp (Dwarf): New variable _abbrev_section.
+ (_handle_DW_TAG): Use it.
+ (cu, tu): Replace parameters is_64, version, addr_size with options.
+ All callers updated. Add Fission support.
+ * gdb.dwarf2/implptrconst.exp: Update callers of "cu".
+ * gdb.dwarf2/method-ptr.exp: Ditto.
+ * gdb.dwarf2/nostaticblock.exp: Ditto.
+ * gdb.dwarf2/subrange.exp: Ditto.
+ * gdb.dwarf2/missing-sig-type.exp: Update callers of "cu", "tu".
+
2013-05-20 Tom Tromey <tromey@redhat.com>
* gdb.gdb/python-selftest.exp: New file.
diff --git a/gdb/testsuite/gdb.dwarf2/implptrconst.exp b/gdb/testsuite/gdb.dwarf2/implptrconst.exp
index 7eca600..1c89c43 100644
--- a/gdb/testsuite/gdb.dwarf2/implptrconst.exp
+++ b/gdb/testsuite/gdb.dwarf2/implptrconst.exp
@@ -29,7 +29,7 @@ set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
# Creating a CU with 4-byte addresses lets this test link on both
# 32- and 64-bit machines.
- cu 0 2 4 {
+ cu { addr_size 4 } {
compile_unit {} {
declare_labels byte_label size_type_label array_label
declare_labels var_label ptr_label
diff --git a/gdb/testsuite/gdb.dwarf2/method-ptr.exp b/gdb/testsuite/gdb.dwarf2/method-ptr.exp
index d76d63e..846a0ed 100644
--- a/gdb/testsuite/gdb.dwarf2/method-ptr.exp
+++ b/gdb/testsuite/gdb.dwarf2/method-ptr.exp
@@ -29,7 +29,7 @@ Dwarf::assemble $asm_file {
declare_labels int_label float_label struct_label
declare_labels ptr_label subr_label memptr_label
- cu 0 2 8 {
+ cu {} {
compile_unit {{language @DW_LANG_C_plus_plus}} {
int_label: base_type {
{name int}
diff --git a/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp b/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp
index 32a0843..e6049b0 100644
--- a/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp
+++ b/gdb/testsuite/gdb.dwarf2/missing-sig-type.exp
@@ -26,7 +26,7 @@ standard_testfile main.c missing-sig-type-dw4.S
# Make some DWARF for the test.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
- cu 0 4 8 {
+ cu {} {
compile_unit {} {
declare_labels typedef_label
@@ -38,7 +38,7 @@ Dwarf::assemble $asm_file {
}
}
- tu 0 4 8 0x1122334455667788 the_type {
+ tu {} 0x1122334455667788 the_type {
type_unit {} {
the_type: base_type {
{name int}
diff --git a/gdb/testsuite/gdb.dwarf2/nostaticblock.exp b/gdb/testsuite/gdb.dwarf2/nostaticblock.exp
index 69e4c60..9db1f26 100644
--- a/gdb/testsuite/gdb.dwarf2/nostaticblock.exp
+++ b/gdb/testsuite/gdb.dwarf2/nostaticblock.exp
@@ -26,7 +26,7 @@ standard_testfile main.c .S
# Make some DWARF for the test.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
- cu 0 2 8 {
+ cu {} {
compile_unit {
{low_pc 0x104320 DW_FORM_addr}
{high_pc 0x1045ed DW_FORM_addr}
diff --git a/gdb/testsuite/gdb.dwarf2/subrange.exp b/gdb/testsuite/gdb.dwarf2/subrange.exp
index 51db92e..e9b273b 100644
--- a/gdb/testsuite/gdb.dwarf2/subrange.exp
+++ b/gdb/testsuite/gdb.dwarf2/subrange.exp
@@ -26,7 +26,7 @@ standard_testfile method-ptr.cc subrange-dw.S
# Make some DWARF for the test.
set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
- cu 0 2 8 {
+ cu {} {
compile_unit {{language @DW_LANG_Pascal83}} {
declare_labels byte_label typedef_label array_label
diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp
index 2e5a3f7..7efaaca 100644
--- a/gdb/testsuite/lib/dwarf.exp
+++ b/gdb/testsuite/lib/dwarf.exp
@@ -137,6 +137,10 @@ namespace eval Dwarf {
# Otherwise, this is the name of a section to write to.
variable _defer
+ # The abbrev section. Typically .debug_abbrev but can be .debug_abbrev.dwo
+ # for Fission.
+ variable _abbrev_section
+
# The next available abbrev number in the current CU's abbrev
# table.
variable _abbrev_num
@@ -401,6 +405,7 @@ namespace eval Dwarf {
}
proc _handle_DW_TAG {tag_name {attrs {}} {children {}}} {
+ variable _abbrev_section
variable _abbrev_num
variable _constants
@@ -409,7 +414,7 @@ namespace eval Dwarf {
# We somewhat wastefully emit a new abbrev entry for each tag.
# There's no reason for this other than laziness.
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
_op .uleb128 $my_abbrev "Abbrev start"
_op .uleb128 $_constants($tag_name) $tag_name
_op .byte $has_children "has_children"
@@ -429,13 +434,13 @@ namespace eval Dwarf {
_handle_DW_FORM $attr_form $attr_value
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
_op .uleb128 $_constants($attr_name) $attr_name
_op .uleb128 $_constants($attr_form) $attr_form
}
}
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
# Terminator.
_op .byte 0x0 Terminator
_op .byte 0x0 Terminator
@@ -667,29 +672,52 @@ namespace eval Dwarf {
}
# Emit a DWARF CU.
- # IS_64 is a boolean which is true if you want to emit 64-bit
- # DWARF, and false for 32-bit DWARF.
- # VERSION is the DWARF version number to emit.
- # ADDR_SIZE is the size of addresses in bytes.
+ # OPTIONS is a list with an even number of elements containing
+ # option-name and option-value pairs.
+ # Current options are:
+ # is_64 0|1 - boolean indicating if you want to emit 64-bit DWARF
+ # default = 0 (32-bit)
+ # version n - DWARF version number to emit
+ # default = 4
+ # addr_size n - the size of addresses, 32 or 64
+ # default = 64
+ # fission 0|1 - boolean indicating if generating Fission debug info
+ # default = 0
# BODY is Tcl code that emits the DIEs which make up the body of
# the CU. It is evaluated in the caller's context.
- proc cu {is_64 version addr_size body} {
+ proc cu {options body} {
variable _cu_count
+ variable _abbrev_section
variable _abbrev_num
variable _cu_label
variable _cu_version
variable _cu_addr_size
variable _cu_offset_size
- set _cu_version $version
- if {$is_64} {
- set _cu_offset_size 8
- } else {
- set _cu_offset_size 4
+ # Establish the defaults.
+ set is_64 0
+ set _cu_version 4
+ set _cu_addr_size 8
+ set fission 0
+ set section ".debug_info"
+ set _abbrev_section ".debug_abbrev"
+
+ foreach { name value } $options {
+ switch -exact -- $name {
+ is_64 { set is_64 $value }
+ version { set _cu_version $value }
+ addr_size { set _cu_addr_size $value }
+ fission { set fission $value }
+ default { error "unknown option $name" }
+ }
+ }
+ set _cu_offset_size [expr { $is_64 ? 8 : 4 }]
+ if { $fission } {
+ set section ".debug_info.dwo"
+ set _abbrev_section ".debug_abbrev.dwo"
}
- set _cu_addr_size $addr_size
- _section .debug_info
+ _section $section
set cu_num [incr _cu_count]
set my_abbrevs [_compute_label "abbrev${cu_num}_begin"]
@@ -707,17 +735,17 @@ namespace eval Dwarf {
_op .4byte "$end_label - $start_label"
}
define_label $start_label
- _op .2byte $version Version
+ _op .2byte $_cu_version Version
_op .4byte $my_abbrevs Abbrevs
- _op .byte $addr_size "Pointer size"
+ _op .byte $_cu_addr_size "Pointer size"
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
define_label $my_abbrevs
}
uplevel $body
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
# Emit the terminator.
_op .byte 0x0 Terminator
_op .byte 0x0 Terminator
@@ -727,31 +755,55 @@ namespace eval Dwarf {
}
# Emit a DWARF TU.
- # IS_64 is a boolean which is true if you want to emit 64-bit
- # DWARF, and false for 32-bit DWARF.
- # VERSION is the DWARF version number to emit.
- # ADDR_SIZE is the size of addresses in bytes.
+ # OPTIONS is a list with an even number of elements containing
+ # option-name and option-value pairs.
+ # Current options are:
+ # is_64 0|1 - boolean indicating if you want to emit 64-bit DWARF
+ # default = 0 (32-bit)
+ # version n - DWARF version number to emit
+ # default = 4
+ # addr_size n - the size of addresses, 32 or 64
+ # default = 64
+ # fission 0|1 - boolean indicating if generating Fission debug info
+ # default = 0
# SIGNATURE is the 64-bit signature of the type.
- # TYPE_LABEL is the label of the type defined by this TU.
+ # TYPE_LABEL is the label of the type defined by this TU,
+ # or "" if there is no type (i.e., type stubs in Fission).
# BODY is Tcl code that emits the DIEs which make up the body of
- # the CU. It is evaluated in the caller's context.
- proc tu {is_64 version addr_size signature type_label body} {
+ # the TU. It is evaluated in the caller's context.
+ proc tu {options signature type_label body} {
variable _cu_count
+ variable _abbrev_section
variable _abbrev_num
variable _cu_label
variable _cu_version
variable _cu_addr_size
variable _cu_offset_size
- set _cu_version $version
- if {$is_64} {
- set _cu_offset_size 8
- } else {
- set _cu_offset_size 4
+ # Establish the defaults.
+ set is_64 0
+ set _cu_version 4
+ set _cu_addr_size 8
+ set fission 0
+ set section ".debug_types"
+ set _abbrev_section ".debug_abbrev"
+
+ foreach { name value } $options {
+ switch -exact -- $name {
+ is_64 { set is_64 $value }
+ version { set _cu_version $value }
+ addr_size { set _cu_addr_size $value }
+ fission { set fission $value }
+ default { error "unknown option $name" }
+ }
+ }
+ set _cu_offset_size [expr { $is_64 ? 8 : 4 }]
+ if { $fission } {
+ set section ".debug_types.dwo"
+ set _abbrev_section ".debug_abbrev.dwo"
}
- set _cu_addr_size $addr_size
- _section .debug_types
+ _section $section
set cu_num [incr _cu_count]
set my_abbrevs [_compute_label "abbrev${cu_num}_begin"]
@@ -769,25 +821,33 @@ namespace eval Dwarf {
_op .4byte "$end_label - $start_label"
}
define_label $start_label
- _op .2byte $version Version
+ _op .2byte $_cu_version Version
_op .4byte $my_abbrevs Abbrevs
- _op .byte $addr_size "Pointer size"
+ _op .byte $_cu_addr_size "Pointer size"
_op .8byte $signature Signature
- uplevel declare_labels $type_label
- upvar $type_label my_type_label
- if {$is_64} {
- _op .8byte "$my_type_label - $_cu_label"
+ if { $type_label != "" } {
+ uplevel declare_labels $type_label
+ upvar $type_label my_type_label
+ if {$is_64} {
+ _op .8byte "$my_type_label - $_cu_label"
+ } else {
+ _op .4byte "$my_type_label - $_cu_label"
+ }
} else {
- _op .4byte "$my_type_label - $_cu_label"
+ if {$is_64} {
+ _op .8byte 0
+ } else {
+ _op .4byte 0
+ }
}
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
define_label $my_abbrevs
}
uplevel $body
- _defer_output .debug_abbrev {
+ _defer_output $_abbrev_section {
# Emit the terminator.
_op .byte 0x0 Terminator
_op .byte 0x0 Terminator