Handle DW_OP_GNU_implicit_pointer in dwarf assembler
DW_OP_GNU_implicit_pointer refers to a DIE with an offset of different sizes in different dwarf versions. In v2, the size is the pointer size, while in v3 and above, it is the ref_addr size. This patch fixes dwarf assembler to emit the correct size of offset. We've already fixed this size issue in gdb, https://sourceware.org/ml/gdb-patches/2011-09/msg00451.html gdb/testsuite: 2017-01-25 Yao Qi <yao.qi@linaro.org> * lib/dwarf.exp (Dwarf::_location): Handle DW_OP_GNU_implicit_pointer with proper size.
This commit is contained in:
parent
a1aa5e81de
commit
5ac9524116
|
@ -1,3 +1,8 @@
|
|||
2017-01-25 Yao Qi <yao.qi@linaro.org>
|
||||
|
||||
* lib/dwarf.exp (Dwarf::_location): Handle
|
||||
DW_OP_GNU_implicit_pointer with proper size.
|
||||
|
||||
2017-01-20 Luis Machado <lgustavo@codesourcery.com>
|
||||
|
||||
* gdb.python/py-xmethods.exp: Fix test names starting with lowercase
|
||||
|
|
|
@ -840,6 +840,7 @@ namespace eval Dwarf {
|
|||
proc _location {body} {
|
||||
variable _constants
|
||||
variable _cu_label
|
||||
variable _cu_version
|
||||
variable _cu_addr_size
|
||||
variable _cu_offset_size
|
||||
|
||||
|
@ -913,7 +914,11 @@ namespace eval Dwarf {
|
|||
|
||||
# Here label is a section offset.
|
||||
set label [lindex $line 1]
|
||||
_op .${_cu_offset_size}byte $label
|
||||
if { $_cu_version == 2 } {
|
||||
_op .${_cu_addr_size}byte $label
|
||||
} else {
|
||||
_op .${_cu_offset_size}byte $label
|
||||
}
|
||||
_op .sleb128 [lindex $line 2]
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue