diff options
author | Mark Kettenis <kettenis@gnu.org> | 2002-07-08 20:53:45 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2002-07-08 20:53:45 +0000 |
commit | 9b94f7bfd5f81a59fcd02bdbc6d330c4c86f79fc (patch) | |
tree | bfda4df54ab81a4afd5489c044205c0a817f28ff /gdb/dwarf2cfi.c | |
parent | c74222f7de2e4198556888ce584680f643ee5110 (diff) | |
download | gdb-9b94f7bfd5f81a59fcd02bdbc6d330c4c86f79fc.zip gdb-9b94f7bfd5f81a59fcd02bdbc6d330c4c86f79fc.tar.gz gdb-9b94f7bfd5f81a59fcd02bdbc6d330c4c86f79fc.tar.bz2 |
* dwarf2cfi.c: Include "gcore.h".
(execute_stack_op): Fix implementation of the
DW_OP_deref and DW_OP_deref_size operators by letting do their
lookup in the target.
Diffstat (limited to 'gdb/dwarf2cfi.c')
-rw-r--r-- | gdb/dwarf2cfi.c | 32 |
1 files changed, 11 insertions, 21 deletions
diff --git a/gdb/dwarf2cfi.c b/gdb/dwarf2cfi.c index 7302b45..8d9567f 100644 --- a/gdb/dwarf2cfi.c +++ b/gdb/dwarf2cfi.c @@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */ #include "defs.h" +#include "gdbcore.h" #include "symtab.h" #include "symfile.h" #include "objfiles.h" @@ -1119,32 +1120,21 @@ execute_stack_op (struct objfile *objfile, { case DW_OP_deref: { - char *ptr = (char *) result; - result = read_pointer (objfile->obfd, &ptr); + int len = TARGET_ADDR_BIT / TARGET_CHAR_BIT; + if (len != 4 && len != 8) + internal_error (__FILE__, __LINE__, + "execute_stack_op error"); + result = read_memory_unsigned_integer (result, len); } break; case DW_OP_deref_size: { - char *ptr = (char *) result; - switch (*op_ptr++) - { - case 1: - result = read_1u (objfile->obfd, &ptr); - break; - case 2: - result = read_2u (objfile->obfd, &ptr); - break; - case 4: - result = read_4u (objfile->obfd, &ptr); - break; - case 8: - result = read_8u (objfile->obfd, &ptr); - break; - default: - internal_error (__FILE__, __LINE__, - "execute_stack_op error"); - } + int len = *op_ptr++; + if (len != 1 && len != 2 && len != 4 && len !=8) + internal_error (__FILE__, __LINE__, + "execute_stack_op error"); + result = read_memory_unsigned_integer (result, len); } break; |