OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gdb-7.2/] [gdb/] [d-valprint.c] - Blame information for rev 861

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 330 jeremybenn
/* Support for printing D values for GDB, the GNU debugger.
2
 
3
   Copyright (C) 2008, 2009, 2010 Free Software Foundation, Inc.
4
 
5
   This file is part of GDB.
6
 
7
   This program is free software; you can redistribute it and/or modify
8
   it under the terms of the GNU General Public License as published by
9
   the Free Software Foundation; either version 3 of the License, or
10
   (at your option) any later version.
11
 
12
   This program is distributed in the hope that it will be useful,
13
   but WITHOUT ANY WARRANTY; without even the implied warranty of
14
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
   GNU General Public License for more details.
16
 
17
   You should have received a copy of the GNU General Public License
18
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
 
20
#include "defs.h"
21
#include "gdbtypes.h"
22
#include "gdbcore.h"
23
#include "d-lang.h"
24
#include "c-lang.h"
25
 
26
/* Assuming that TYPE is a TYPE_CODE_STRUCT, verify that TYPE is
27
   a dynamic array, and then print its value to STREAM.  Return
28
   the number of string characters printed, or -1 if TYPE is not
29
   a dynamic array.  */
30
static int
31
dynamic_array_type (struct type *type, const gdb_byte *valaddr,
32
                    int embedded_offset, CORE_ADDR address,
33
                    struct ui_file *stream, int recurse,
34
                    const struct value *val,
35
                    const struct value_print_options *options)
36
{
37
  if (TYPE_NFIELDS (type) == 2
38
      && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_INT
39
      && strcmp (TYPE_FIELD_NAME (type, 0), "length") == 0
40
      && strcmp (TYPE_FIELD_NAME (type, 1), "ptr") == 0
41
      && value_bits_valid (val, TARGET_CHAR_BIT * embedded_offset,
42
                           TARGET_CHAR_BIT * TYPE_LENGTH (type)))
43
    {
44
      CORE_ADDR addr;
45
      struct type *elttype;
46
      struct type *true_type;
47
      struct type *ptr_type;
48
      const gdb_byte *ptraddr;
49
      struct value *val;
50
      int length;
51
 
52
      length = unpack_field_as_long (type, valaddr + embedded_offset, 0);
53
 
54
      ptr_type = TYPE_FIELD_TYPE (type, 1);
55
      elttype = check_typedef (TYPE_TARGET_TYPE (ptr_type));
56
      addr = unpack_pointer (ptr_type,
57
                             valaddr + TYPE_FIELD_BITPOS (type, 1) / 8
58
                             + embedded_offset);
59
      true_type = check_typedef (elttype);
60
 
61
      true_type = lookup_array_range_type (true_type, 0, length - 1);
62
      val = value_at (true_type, addr);
63
      ptraddr = value_contents (val);
64
 
65
      return d_val_print (true_type, ptraddr, 0, addr, stream, recurse + 1,
66
                          NULL, options);
67
    }
68
  return -1;
69
}
70
 
71
/* Implements the la_val_print routine for language D.  */
72
int
73
d_val_print (struct type *type, const gdb_byte *valaddr, int embedded_offset,
74
             CORE_ADDR address, struct ui_file *stream, int recurse,
75
             const struct value *val,
76
             const struct value_print_options *options)
77
{
78
  int ret;
79
 
80
  CHECK_TYPEDEF (type);
81
  switch (TYPE_CODE (type))
82
    {
83
      case TYPE_CODE_STRUCT:
84
        ret = dynamic_array_type (type, valaddr, embedded_offset, address,
85
                                  stream, recurse, val, options);
86
        if (ret != -1)
87
           break;
88
      default:
89
        ret = c_val_print (type, valaddr, embedded_offset, address, stream,
90
                           recurse, val, options);
91
    }
92
 
93
  return ret;
94
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.