* 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".
This commit is contained in:
parent
4a6e676ceb
commit
6c9e2db469
@ -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>
|
2013-05-20 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* gdb.gdb/python-selftest.exp: New file.
|
* gdb.gdb/python-selftest.exp: New file.
|
||||||
|
@ -29,7 +29,7 @@ set asm_file [standard_output_file $srcfile2]
|
|||||||
Dwarf::assemble $asm_file {
|
Dwarf::assemble $asm_file {
|
||||||
# Creating a CU with 4-byte addresses lets this test link on both
|
# Creating a CU with 4-byte addresses lets this test link on both
|
||||||
# 32- and 64-bit machines.
|
# 32- and 64-bit machines.
|
||||||
cu 0 2 4 {
|
cu { addr_size 4 } {
|
||||||
compile_unit {} {
|
compile_unit {} {
|
||||||
declare_labels byte_label size_type_label array_label
|
declare_labels byte_label size_type_label array_label
|
||||||
declare_labels var_label ptr_label
|
declare_labels var_label ptr_label
|
||||||
|
@ -29,7 +29,7 @@ Dwarf::assemble $asm_file {
|
|||||||
declare_labels int_label float_label struct_label
|
declare_labels int_label float_label struct_label
|
||||||
declare_labels ptr_label subr_label memptr_label
|
declare_labels ptr_label subr_label memptr_label
|
||||||
|
|
||||||
cu 0 2 8 {
|
cu {} {
|
||||||
compile_unit {{language @DW_LANG_C_plus_plus}} {
|
compile_unit {{language @DW_LANG_C_plus_plus}} {
|
||||||
int_label: base_type {
|
int_label: base_type {
|
||||||
{name int}
|
{name int}
|
||||||
|
@ -26,7 +26,7 @@ standard_testfile main.c missing-sig-type-dw4.S
|
|||||||
# Make some DWARF for the test.
|
# Make some DWARF for the test.
|
||||||
set asm_file [standard_output_file $srcfile2]
|
set asm_file [standard_output_file $srcfile2]
|
||||||
Dwarf::assemble $asm_file {
|
Dwarf::assemble $asm_file {
|
||||||
cu 0 4 8 {
|
cu {} {
|
||||||
compile_unit {} {
|
compile_unit {} {
|
||||||
declare_labels typedef_label
|
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 {} {
|
type_unit {} {
|
||||||
the_type: base_type {
|
the_type: base_type {
|
||||||
{name int}
|
{name int}
|
||||||
|
@ -26,7 +26,7 @@ standard_testfile main.c .S
|
|||||||
# Make some DWARF for the test.
|
# Make some DWARF for the test.
|
||||||
set asm_file [standard_output_file $srcfile2]
|
set asm_file [standard_output_file $srcfile2]
|
||||||
Dwarf::assemble $asm_file {
|
Dwarf::assemble $asm_file {
|
||||||
cu 0 2 8 {
|
cu {} {
|
||||||
compile_unit {
|
compile_unit {
|
||||||
{low_pc 0x104320 DW_FORM_addr}
|
{low_pc 0x104320 DW_FORM_addr}
|
||||||
{high_pc 0x1045ed DW_FORM_addr}
|
{high_pc 0x1045ed DW_FORM_addr}
|
||||||
|
@ -26,7 +26,7 @@ standard_testfile method-ptr.cc subrange-dw.S
|
|||||||
# Make some DWARF for the test.
|
# Make some DWARF for the test.
|
||||||
set asm_file [standard_output_file $srcfile2]
|
set asm_file [standard_output_file $srcfile2]
|
||||||
Dwarf::assemble $asm_file {
|
Dwarf::assemble $asm_file {
|
||||||
cu 0 2 8 {
|
cu {} {
|
||||||
compile_unit {{language @DW_LANG_Pascal83}} {
|
compile_unit {{language @DW_LANG_Pascal83}} {
|
||||||
declare_labels byte_label typedef_label array_label
|
declare_labels byte_label typedef_label array_label
|
||||||
|
|
||||||
|
@ -137,6 +137,10 @@ namespace eval Dwarf {
|
|||||||
# Otherwise, this is the name of a section to write to.
|
# Otherwise, this is the name of a section to write to.
|
||||||
variable _defer
|
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
|
# The next available abbrev number in the current CU's abbrev
|
||||||
# table.
|
# table.
|
||||||
variable _abbrev_num
|
variable _abbrev_num
|
||||||
@ -401,6 +405,7 @@ namespace eval Dwarf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc _handle_DW_TAG {tag_name {attrs {}} {children {}}} {
|
proc _handle_DW_TAG {tag_name {attrs {}} {children {}}} {
|
||||||
|
variable _abbrev_section
|
||||||
variable _abbrev_num
|
variable _abbrev_num
|
||||||
variable _constants
|
variable _constants
|
||||||
|
|
||||||
@ -409,7 +414,7 @@ namespace eval Dwarf {
|
|||||||
|
|
||||||
# We somewhat wastefully emit a new abbrev entry for each tag.
|
# We somewhat wastefully emit a new abbrev entry for each tag.
|
||||||
# There's no reason for this other than laziness.
|
# 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 $my_abbrev "Abbrev start"
|
||||||
_op .uleb128 $_constants($tag_name) $tag_name
|
_op .uleb128 $_constants($tag_name) $tag_name
|
||||||
_op .byte $has_children "has_children"
|
_op .byte $has_children "has_children"
|
||||||
@ -429,13 +434,13 @@ namespace eval Dwarf {
|
|||||||
|
|
||||||
_handle_DW_FORM $attr_form $attr_value
|
_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_name) $attr_name
|
||||||
_op .uleb128 $_constants($attr_form) $attr_form
|
_op .uleb128 $_constants($attr_form) $attr_form
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_defer_output .debug_abbrev {
|
_defer_output $_abbrev_section {
|
||||||
# Terminator.
|
# Terminator.
|
||||||
_op .byte 0x0 Terminator
|
_op .byte 0x0 Terminator
|
||||||
_op .byte 0x0 Terminator
|
_op .byte 0x0 Terminator
|
||||||
@ -667,29 +672,52 @@ namespace eval Dwarf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Emit a DWARF CU.
|
# Emit a DWARF CU.
|
||||||
# IS_64 is a boolean which is true if you want to emit 64-bit
|
# OPTIONS is a list with an even number of elements containing
|
||||||
# DWARF, and false for 32-bit DWARF.
|
# option-name and option-value pairs.
|
||||||
# VERSION is the DWARF version number to emit.
|
# Current options are:
|
||||||
# ADDR_SIZE is the size of addresses in bytes.
|
# 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
|
# BODY is Tcl code that emits the DIEs which make up the body of
|
||||||
# the CU. It is evaluated in the caller's context.
|
# 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 _cu_count
|
||||||
|
variable _abbrev_section
|
||||||
variable _abbrev_num
|
variable _abbrev_num
|
||||||
variable _cu_label
|
variable _cu_label
|
||||||
variable _cu_version
|
variable _cu_version
|
||||||
variable _cu_addr_size
|
variable _cu_addr_size
|
||||||
variable _cu_offset_size
|
variable _cu_offset_size
|
||||||
|
|
||||||
set _cu_version $version
|
# Establish the defaults.
|
||||||
if {$is_64} {
|
set is_64 0
|
||||||
set _cu_offset_size 8
|
set _cu_version 4
|
||||||
} else {
|
set _cu_addr_size 8
|
||||||
set _cu_offset_size 4
|
set fission 0
|
||||||
}
|
set section ".debug_info"
|
||||||
set _cu_addr_size $addr_size
|
set _abbrev_section ".debug_abbrev"
|
||||||
|
|
||||||
_section .debug_info
|
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"
|
||||||
|
}
|
||||||
|
|
||||||
|
_section $section
|
||||||
|
|
||||||
set cu_num [incr _cu_count]
|
set cu_num [incr _cu_count]
|
||||||
set my_abbrevs [_compute_label "abbrev${cu_num}_begin"]
|
set my_abbrevs [_compute_label "abbrev${cu_num}_begin"]
|
||||||
@ -707,17 +735,17 @@ namespace eval Dwarf {
|
|||||||
_op .4byte "$end_label - $start_label"
|
_op .4byte "$end_label - $start_label"
|
||||||
}
|
}
|
||||||
define_label $start_label
|
define_label $start_label
|
||||||
_op .2byte $version Version
|
_op .2byte $_cu_version Version
|
||||||
_op .4byte $my_abbrevs Abbrevs
|
_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
|
define_label $my_abbrevs
|
||||||
}
|
}
|
||||||
|
|
||||||
uplevel $body
|
uplevel $body
|
||||||
|
|
||||||
_defer_output .debug_abbrev {
|
_defer_output $_abbrev_section {
|
||||||
# Emit the terminator.
|
# Emit the terminator.
|
||||||
_op .byte 0x0 Terminator
|
_op .byte 0x0 Terminator
|
||||||
_op .byte 0x0 Terminator
|
_op .byte 0x0 Terminator
|
||||||
@ -727,31 +755,55 @@ namespace eval Dwarf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Emit a DWARF TU.
|
# Emit a DWARF TU.
|
||||||
# IS_64 is a boolean which is true if you want to emit 64-bit
|
# OPTIONS is a list with an even number of elements containing
|
||||||
# DWARF, and false for 32-bit DWARF.
|
# option-name and option-value pairs.
|
||||||
# VERSION is the DWARF version number to emit.
|
# Current options are:
|
||||||
# ADDR_SIZE is the size of addresses in bytes.
|
# 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.
|
# 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
|
# BODY is Tcl code that emits the DIEs which make up the body of
|
||||||
# the CU. It is evaluated in the caller's context.
|
# the TU. It is evaluated in the caller's context.
|
||||||
proc tu {is_64 version addr_size signature type_label body} {
|
proc tu {options signature type_label body} {
|
||||||
variable _cu_count
|
variable _cu_count
|
||||||
|
variable _abbrev_section
|
||||||
variable _abbrev_num
|
variable _abbrev_num
|
||||||
variable _cu_label
|
variable _cu_label
|
||||||
variable _cu_version
|
variable _cu_version
|
||||||
variable _cu_addr_size
|
variable _cu_addr_size
|
||||||
variable _cu_offset_size
|
variable _cu_offset_size
|
||||||
|
|
||||||
set _cu_version $version
|
# Establish the defaults.
|
||||||
if {$is_64} {
|
set is_64 0
|
||||||
set _cu_offset_size 8
|
set _cu_version 4
|
||||||
} else {
|
set _cu_addr_size 8
|
||||||
set _cu_offset_size 4
|
set fission 0
|
||||||
}
|
set section ".debug_types"
|
||||||
set _cu_addr_size $addr_size
|
set _abbrev_section ".debug_abbrev"
|
||||||
|
|
||||||
_section .debug_types
|
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"
|
||||||
|
}
|
||||||
|
|
||||||
|
_section $section
|
||||||
|
|
||||||
set cu_num [incr _cu_count]
|
set cu_num [incr _cu_count]
|
||||||
set my_abbrevs [_compute_label "abbrev${cu_num}_begin"]
|
set my_abbrevs [_compute_label "abbrev${cu_num}_begin"]
|
||||||
@ -769,10 +821,11 @@ namespace eval Dwarf {
|
|||||||
_op .4byte "$end_label - $start_label"
|
_op .4byte "$end_label - $start_label"
|
||||||
}
|
}
|
||||||
define_label $start_label
|
define_label $start_label
|
||||||
_op .2byte $version Version
|
_op .2byte $_cu_version Version
|
||||||
_op .4byte $my_abbrevs Abbrevs
|
_op .4byte $my_abbrevs Abbrevs
|
||||||
_op .byte $addr_size "Pointer size"
|
_op .byte $_cu_addr_size "Pointer size"
|
||||||
_op .8byte $signature Signature
|
_op .8byte $signature Signature
|
||||||
|
if { $type_label != "" } {
|
||||||
uplevel declare_labels $type_label
|
uplevel declare_labels $type_label
|
||||||
upvar $type_label my_type_label
|
upvar $type_label my_type_label
|
||||||
if {$is_64} {
|
if {$is_64} {
|
||||||
@ -780,14 +833,21 @@ namespace eval Dwarf {
|
|||||||
} else {
|
} else {
|
||||||
_op .4byte "$my_type_label - $_cu_label"
|
_op .4byte "$my_type_label - $_cu_label"
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
if {$is_64} {
|
||||||
|
_op .8byte 0
|
||||||
|
} else {
|
||||||
|
_op .4byte 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_defer_output .debug_abbrev {
|
_defer_output $_abbrev_section {
|
||||||
define_label $my_abbrevs
|
define_label $my_abbrevs
|
||||||
}
|
}
|
||||||
|
|
||||||
uplevel $body
|
uplevel $body
|
||||||
|
|
||||||
_defer_output .debug_abbrev {
|
_defer_output $_abbrev_section {
|
||||||
# Emit the terminator.
|
# Emit the terminator.
|
||||||
_op .byte 0x0 Terminator
|
_op .byte 0x0 Terminator
|
||||||
_op .byte 0x0 Terminator
|
_op .byte 0x0 Terminator
|
||||||
|
Loading…
Reference in New Issue
Block a user