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:
Yao Qi 2017-01-25 16:24:44 +00:00
parent a1aa5e81de
commit 5ac9524116
2 changed files with 11 additions and 1 deletions

View File

@ -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

View File

@ -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]
}