diff options
author | Tom Tromey <tromey@redhat.com> | 2009-09-11 18:38:39 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2009-09-11 18:38:39 +0000 |
commit | cec03d703f8c80f4a3f98fe0e3e35dde7e9b1835 (patch) | |
tree | 2faf4cf446d7c4f9eedfb9f15c4cfe890722b62d /gdb/testsuite/gdb.dwarf2 | |
parent | a05e8785c75bf89c90799f675f126782aabbb20e (diff) | |
download | gdb-cec03d703f8c80f4a3f98fe0e3e35dde7e9b1835.zip gdb-cec03d703f8c80f4a3f98fe0e3e35dde7e9b1835.tar.gz gdb-cec03d703f8c80f4a3f98fe0e3e35dde7e9b1835.tar.bz2 |
gdb
* dwarf2loc.c (struct piece_closure) <arch>: New field.
(dwarf2_evaluate_loc_desc): Update.
(dwarf2_loc_desc_needs_frame): Likewise.
(allocate_piece_closure): Initialize new field.
(read_pieced_value): Update.
(write_pieced_value): Update.
(copy_pieced_value_closure): Update.
* dwarf2expr.h (enum dwarf_value_location): New.
(struct dwarf_expr_context) <in_reg>: Remove.
<location, len, data>: New fields.
(struct dwarf_expr_piece) <in_reg, value>: Remove.
<location, v>: New fields.
* dwarf2expr.c (add_piece): Remove in_reg, value arguments.
Update.
(require_composition): New function.
(execute_stack_op): Update.
<DW_OP_implicit_value, DW_OP_stack_value>: New cases.
<DW_OP_reg0>: Set location, not in_reg.
<DW_OP_regx>: Likewise. Use require_composition.
<DW_OP_fbreg>: Update.
<DW_OP_piece>: Likewise.
* dwarf2-frame.c (execute_stack_op): Update.
gdb/testsuite
* gdb.dwarf2/valop.S: New file.
* gdb.dwarf2/valop.exp: New file.
Diffstat (limited to 'gdb/testsuite/gdb.dwarf2')
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/valop.S | 505 | ||||
-rw-r--r-- | gdb/testsuite/gdb.dwarf2/valop.exp | 55 |
2 files changed, 560 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.dwarf2/valop.S b/gdb/testsuite/gdb.dwarf2/valop.S new file mode 100644 index 0000000..313a00b --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/valop.S @@ -0,0 +1,505 @@ +/* + Copyright 2009 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/>. + */ + +/* This was compiled from a trivial program just to test the + DW_OP_stack_value and DW_OP_implicit_value operators: + + unsigned int func (unsigned int arg) __attribute__ ((__noinline__)); + + unsigned int func (unsigned int arg) + { + unsigned int uses_stack_op = 23; + unsigned int uses_lit_op = 0x7fffffff; + unsigned int result = arg; + + if (arg % 2) + result += uses_lit_op + uses_stack_op; + else + { + ++uses_stack_op; + ++uses_lit_op; + + result -= uses_stack_op + uses_lit_op; + } + + return result * uses_stack_op; // line 19, see the .exp file + } + + int main (int argc, char *argv[]) + { + return func (1024); + } + + Then it was compiled with: + + gcc -fvar-tracking{,-assignments} -gdwarf-3 + -fno-inline{,-functions,-small-functions,-functions-called-once} + -O2 + +*/ + + .file "valop.c" + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .section .debug_line,"",@progbits +.Ldebug_line0: + .text +.Ltext0: + .p2align 4,,15 +.globl func + .type func, @function +func: +.LFB0: + .file 1 "valop.c" + .loc 1 4 0 + .cfi_startproc +.LVL0: + pushl %ebp + .cfi_def_cfa_offset 8 + movl %esp, %ebp + .cfi_offset 5, -8 + .cfi_def_cfa_register 5 + .loc 1 4 0 + movl 8(%ebp), %eax +.LVL1: + .loc 1 9 0 + testb $1, %al + jne .L5 +.LVL2: + .loc 1 16 0 + addl $2147483624, %eax +.LVL3: + .loc 1 13 0 + movl $24, %edx +.LVL4: + .loc 1 16 0 + imull %edx, %eax +.LVL5: + .loc 1 20 0 + popl %ebp + .cfi_remember_state + .cfi_restore 5 + .cfi_def_cfa 4, 4 + ret +.LVL6: + .p2align 4,,7 + .p2align 3 +.L5: + .cfi_restore_state + .loc 1 10 0 + subl $2147483626, %eax +.LVL7: + .loc 1 5 0 + movl $23, %edx +.LVL8: + .loc 1 16 0 + imull %edx, %eax +.LVL9: + .loc 1 20 0 + popl %ebp + .cfi_def_cfa 4, 4 + .cfi_restore 5 + ret + .cfi_endproc +.LFE0: + .size func, .-func + .p2align 4,,15 +.globl _start + .type _start, @function +_start: +.LFB1: + .loc 1 23 0 + .cfi_startproc +.LVL10: + pushl %ebp + .cfi_def_cfa_offset 8 + movl %esp, %ebp + .cfi_offset 5, -8 + .cfi_def_cfa_register 5 + subl $4, %esp + .loc 1 24 0 + movl $1024, (%esp) + call func +.LVL11: + .loc 1 25 0 + leave + .cfi_restore 5 + .cfi_def_cfa 4, 4 + ret + .cfi_endproc +.LFE1: + .size _start, .-_start +.Letext0: + .section .debug_loc,"",@progbits +.Ldebug_loc0: +.LLST0: + .long .LVL0-.Ltext0 + .long .LVL2-.Ltext0 + .value 0x4 + .byte 0x47 + .byte 0x9f + .byte 0x93 + .uleb128 0x4 + .long .LVL2-.Ltext0 + .long .LVL4-.Ltext0 + .value 0x4 + .byte 0x48 + .byte 0x9f + .byte 0x93 + .uleb128 0x4 + .long .LVL4-.Ltext0 + .long .LVL6-.Ltext0 + .value 0x1 + .byte 0x52 + .long .LVL6-.Ltext0 + .long .LVL8-.Ltext0 + .value 0x4 + .byte 0x47 + .byte 0x9f + .byte 0x93 + .uleb128 0x4 + .long .LVL8-.Ltext0 + .long .LFE0-.Ltext0 + .value 0x1 + .byte 0x52 + .long 0x0 + .long 0x0 +.LLST1: + .long .LVL0-.Ltext0 + .long .LVL2-.Ltext0 + .value 0x6 + .byte 0x9e + .uleb128 0x4 + .long 0x7fffffff + .long .LVL2-.Ltext0 + .long .LVL6-.Ltext0 + .value 0x6 + .byte 0x9e + .uleb128 0x4 + .long 0x80000000 + .long .LVL6-.Ltext0 + .long .LFE0-.Ltext0 + .value 0x6 + .byte 0x9e + .uleb128 0x4 + .long 0x7fffffff + .long 0x0 + .long 0x0 +.LLST2: + .long .LVL1-.Ltext0 + .long .LVL3-.Ltext0 + .value 0x1 + .byte 0x50 + .long .LVL3-.Ltext0 + .long .LVL5-.Ltext0 + .value 0x1 + .byte 0x50 + .long .LVL6-.Ltext0 + .long .LVL7-.Ltext0 + .value 0x1 + .byte 0x50 + .long .LVL7-.Ltext0 + .long .LVL9-.Ltext0 + .value 0x1 + .byte 0x50 + .long 0x0 + .long 0x0 +.LLST3: + .long .LVL10-.Ltext0 + .long .LVL11-1-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 0 + .long 0x0 + .long 0x0 +.LLST4: + .long .LVL10-.Ltext0 + .long .LVL11-1-.Ltext0 + .value 0x2 + .byte 0x91 + .sleb128 4 + .long 0x0 + .long 0x0 + .section .debug_info + .long 0xd4 + .value 0x3 + .long .Ldebug_abbrev0 + .byte 0x4 + .uleb128 0x1 + .long .LASF9 + .byte 0x1 + .long .LASF10 + .long .LASF11 + .long .Ltext0 + .long .Letext0 + .long .Ldebug_line0 + .uleb128 0x2 + .byte 0x1 + .long .LASF3 + .byte 0x1 + .byte 0x3 + .byte 0x1 + .long 0x7c + .long .LFB0 + .long .LFE0 + .byte 0x1 + .byte 0x9c + .long 0x7c + .uleb128 0x3 + .string "arg" + .byte 0x1 + .byte 0x3 + .long 0x7c + .byte 0x2 + .byte 0x91 + .sleb128 0 + .uleb128 0x4 + .long .LASF0 + .byte 0x1 + .byte 0x5 + .long 0x7c + .long .LLST0 + .uleb128 0x4 + .long .LASF1 + .byte 0x1 + .byte 0x6 + .long 0x7c + .long .LLST1 + .uleb128 0x4 + .long .LASF2 + .byte 0x1 + .byte 0x7 + .long 0x7c + .long .LLST2 + .byte 0x0 + .uleb128 0x5 + .byte 0x4 + .byte 0x7 + .long .LASF7 + .uleb128 0x2 + .byte 0x1 + .long .LASF4 + .byte 0x1 + .byte 0x16 + .byte 0x1 + .long 0xbd + .long .LFB1 + .long .LFE1 + .byte 0x1 + .byte 0x9c + .long 0xbd + .uleb128 0x6 + .long .LASF5 + .byte 0x1 + .byte 0x16 + .long 0xbd + .long .LLST3 + .uleb128 0x6 + .long .LASF6 + .byte 0x1 + .byte 0x16 + .long 0xc4 + .long .LLST4 + .byte 0x0 + .uleb128 0x7 + .byte 0x4 + .byte 0x5 + .string "int" + .uleb128 0x8 + .byte 0x4 + .long 0xca + .uleb128 0x8 + .byte 0x4 + .long 0xd0 + .uleb128 0x5 + .byte 0x1 + .byte 0x6 + .long .LASF8 + .byte 0x0 + .section .debug_abbrev + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1b + .uleb128 0xe + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x10 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x2 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0xa + .uleb128 0x1 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .uleb128 0x4 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x5 + .uleb128 0x24 + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .uleb128 0x5 + .byte 0x0 + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x7 + .uleb128 0x24 + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0x8 + .byte 0x0 + .byte 0x0 + .uleb128 0x8 + .uleb128 0xf + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .byte 0x0 + .byte 0x0 + .byte 0x0 + .section .debug_pubnames,"",@progbits + .long 0x20 + .value 0x2 + .long .Ldebug_info0 + .long 0xd8 + .long 0x25 + .string "func" + .long 0x83 + .string "main" + .long 0x0 + .section .debug_aranges,"",@progbits + .long 0x1c + .value 0x2 + .long .Ldebug_info0 + .byte 0x4 + .byte 0x0 + .value 0x0 + .value 0x0 + .long .Ltext0 + .long .Letext0-.Ltext0 + .long 0x0 + .long 0x0 + .section .debug_str,"MS",@progbits,1 +.LASF7: + .string "unsigned int" +.LASF3: + .string "func" +.LASF0: + .string "uses_stack_op" +.LASF5: + .string "argc" +.LASF10: + .string "valop.c" +.LASF2: + .string "result" +.LASF8: + .string "char" +.LASF9: + .string "GNU C 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]" +.LASF4: + .string "main" +.LASF11: + .string "/tmp" +.LASF1: + .string "uses_lit_op" +.LASF6: + .string "argv" + .ident "GCC: (GNU) 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]" + .section .note.GNU-stack,"",@progbits diff --git a/gdb/testsuite/gdb.dwarf2/valop.exp b/gdb/testsuite/gdb.dwarf2/valop.exp new file mode 100644 index 0000000..ee5ebda --- /dev/null +++ b/gdb/testsuite/gdb.dwarf2/valop.exp @@ -0,0 +1,55 @@ +# Copyright 2009 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/>. + +# Test DW_OP_stack_value and DW_OP_implicit_value. + +# This test can only be run on targets which support DWARF-2 and use gas. +# For now pick a sampling of likely targets. +if {![istarget *-*-linux*] + && ![istarget *-*-gnu*] + && ![istarget *-*-elf*] + && ![istarget *-*-openbsd*] + && ![istarget arm-*-eabi*] + && ![istarget powerpc-*-eabi*]} { + return 0 +} +# This test can only be run on x86 targets. +if {![istarget i?86-*]} { + return 0 +} + +set testfile "valop" +set srcfile ${testfile}.S +set binfile ${objdir}/${subdir}/${testfile}.x + +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \ + [list {additional_flags=-nostdlib}]] != "" } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +if ![runto_main] { + return -1 +} + +gdb_test "break valop.c:19" "Breakpoint 2.*" "set breakpoint for valop" +gdb_continue_to_breakpoint "continue to breakpoint for valop" + +gdb_test "print uses_stack_op" " = 24" "print uses_stack_op" +gdb_test "print uses_lit_op" " = 2147483648" "print uses_lit_op" |