* dwarf2loc.c (dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_STACK>
	(dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_LITERAL>: New variable
	objfile_gdbarch.  Fix BFD_ENDIAN_BIG case.

gdb/testsuite/
	* gdb.dwarf2/dw2-op-stack-value.S: New file.
	* gdb.dwarf2/dw2-op-stack-value.exp: New file.
This commit is contained in:
Jan Kratochvil 2011-08-08 21:41:14 +00:00
parent 3c542bc312
commit b6cede7829
5 changed files with 209 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2011-08-08 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2loc.c (dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_STACK>
(dwarf2_evaluate_loc_desc_full) <DWARF_VALUE_LITERAL>: New variable
objfile_gdbarch. Fix BFD_ENDIAN_BIG case.
2011-08-08 Tom Tromey <tromey@redhat.com>
* breakpoint.c (clean_up_filters): Remove.

View File

@ -1232,7 +1232,13 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
retval = allocate_value (type);
contents = value_contents_raw (retval);
if (n > TYPE_LENGTH (type))
n = TYPE_LENGTH (type);
{
struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
val_bytes += n - TYPE_LENGTH (type);
n = TYPE_LENGTH (type);
}
memcpy (contents, val_bytes, n);
}
break;
@ -1254,7 +1260,13 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
n -= byte_offset;
if (n > TYPE_LENGTH (type))
n = TYPE_LENGTH (type);
{
struct gdbarch *objfile_gdbarch = get_objfile_arch (objfile);
if (gdbarch_byte_order (objfile_gdbarch) == BFD_ENDIAN_BIG)
ldata += n - TYPE_LENGTH (type);
n = TYPE_LENGTH (type);
}
memcpy (contents, ldata, n);
}
break;

View File

@ -1,3 +1,8 @@
2011-08-08 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.dwarf2/dw2-op-stack-value.S: New file.
* gdb.dwarf2/dw2-op-stack-value.exp: New file.
2011-08-08 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.dwarf2/dw2-simple-locdesc.S: Replace .value by .2byte.

View File

@ -0,0 +1,132 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2011 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
.section .data
aa551234: .byte 0xaa, 0x55, 0x12, 0x34
.section .debug_info
.Lcu1_begin:
/* CU header */
.4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
.Lcu1_start:
.2byte 2 /* DWARF Version */
.4byte .Labbrev1_begin /* Offset into abbrev section */
.byte 4 /* Pointer size */
/* CU die */
.uleb128 1 /* Abbrev: DW_TAG_compile_unit */
.ascii "file1.txt\0" /* DW_AT_name */
.ascii "GNU C 3.3.3\0" /* DW_AT_producer */
.byte 2 /* DW_LANG_C (C) */
.L2byte_type:
.uleb128 2 /* Abbrev: DW_TAG_base_type */
.ascii "2byte\0" /* DW_AT_name */
.byte 2 /* DW_AT_byte_size */
.byte 7 /* DW_AT_encoding: DW_ATE_unsigned */
.L4byte_type:
.uleb128 2 /* Abbrev: DW_TAG_base_type */
.ascii "4byte\0" /* DW_AT_name */
.byte 4 /* DW_AT_byte_size */
.byte 7 /* DW_AT_encoding: DW_ATE_unsigned */
.L8byte_type:
.uleb128 2 /* Abbrev: DW_TAG_base_type */
.ascii "8byte\0" /* DW_AT_name */
.byte 4 /* DW_AT_byte_size */
.byte 7 /* DW_AT_encoding: DW_ATE_unsigned */
.uleb128 3 /* Abbrev: DW_TAG_variable */
.ascii "stack2\0" /* DW_AT_name */
.4byte .L2byte_type-.Lcu1_begin /* DW_AT_type */
.byte 2f - 1f /* DW_AT_location */
1: .byte 0x31 /* DW_OP_lit1 */
.byte 0x9f /* DW_OP_stack_value */
2:
.uleb128 3 /* Abbrev: DW_TAG_variable */
.ascii "stack8\0" /* DW_AT_name */
.4byte .L8byte_type-.Lcu1_begin /* DW_AT_type */
.byte 2f - 1f /* DW_AT_location */
1: .byte 0x31 /* DW_OP_lit1 */
.byte 0x9f /* DW_OP_stack_value */
2:
.uleb128 3 /* Abbrev: DW_TAG_variable */
.ascii "implicit4to2\0" /* DW_AT_name */
.4byte .L2byte_type-.Lcu1_begin /* DW_AT_type */
.byte 3f - 1f /* DW_AT_location */
1: .byte 0x9e /* DW_OP_implicit_value */
.uleb128 3f - 2f
2: .byte 0x11, 0x22, 0x33, 0x44
3:
.uleb128 3 /* Abbrev: DW_TAG_variable */
.ascii "implicit4to4\0" /* DW_AT_name */
.4byte .L4byte_type-.Lcu1_begin /* DW_AT_type */
.byte 3f - 1f /* DW_AT_location */
1: .byte 0x9e /* DW_OP_implicit_value */
.uleb128 3f - 2f
2: .byte 0x11, 0x22, 0x33, 0x44
3:
.byte 0 /* End of children of CU */
.Lcu1_end:
/* Abbrev table */
.section .debug_abbrev
.Labbrev1_begin:
.uleb128 1 /* Abbrev code */
.uleb128 0x11 /* DW_TAG_compile_unit */
.byte 1 /* has_children */
.uleb128 0x3 /* DW_AT_name */
.uleb128 0x8 /* DW_FORM_string */
.uleb128 0x25 /* DW_AT_producer */
.uleb128 0x8 /* DW_FORM_string */
.uleb128 0x13 /* DW_AT_language */
.uleb128 0xb /* DW_FORM_data1 */
.byte 0x0 /* Terminator */
.byte 0x0 /* Terminator */
.uleb128 2 /* Abbrev code */
.uleb128 0x24 /* DW_TAG_base_type */
.byte 0 /* has_children */
.uleb128 0x3 /* DW_AT_name */
.uleb128 0x8 /* DW_FORM_string */
.uleb128 0xb /* DW_AT_byte_size */
.uleb128 0xb /* DW_FORM_data1 */
.uleb128 0x3e /* DW_AT_encoding */
.uleb128 0xb /* DW_FORM_data1 */
.byte 0x0 /* Terminator */
.byte 0x0 /* Terminator */
.uleb128 3 /* Abbrev code */
.uleb128 0x34 /* DW_TAG_variable */
.byte 0 /* has_children */
.uleb128 0x3 /* DW_AT_name */
.uleb128 0x8 /* DW_FORM_string */
.uleb128 0x49 /* DW_AT_type */
.uleb128 0x13 /* DW_FORM_ref4 */
.uleb128 0x2 /* DW_AT_location */
.uleb128 0xa /* DW_FORM_block1 */
.byte 0x0 /* Terminator */
.byte 0x0 /* Terminator */
.byte 0x0 /* Terminator */
.byte 0x0 /* Terminator */

View File

@ -0,0 +1,52 @@
# Copyright 2011 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
load_lib dwarf.exp
# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
return 0
}
set testfile "dw2-op-stack-value"
set srcfile ${testfile}.S
set executable ${testfile}.x
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${objdir}/${subdir}/${executable}" object {nodebug}] != "" } {
return -1
}
clean_restart $executable
gdb_test "p/x stack2" " = 0x1"
gdb_test "p/x stack8" " = 0x1"
set test "x/wx &aa551234"
gdb_test_multiple $test $test {
-re ":\[ \t\]*0x341255aa\r\n$gdb_prompt $" {
# little endian
pass $test
gdb_test "p/x implicit4to2" " = 0x2211"
gdb_test "p/x implicit4to4" " = 0x44332211"
}
-re ":\[ \t\]*0xaa551234\r\n$gdb_prompt $" {
# big endian
pass $test
gdb_test "p/x implicit4to2" " = 0x3344"
gdb_test "p/x implicit4to4" " = 0x11223344"
}
-re ":\[ \t\]*0x\[0-9a-f\]{8}\r\n$gdb_prompt $" {
unsupported $test
}
}